【oFセミナーメモ4】openFrameworksと映像制作ソフトの連携
『デジタルアートセミナー#3 openFrameworksで学ぶ、クリエイティブ・コーディング』のライゾマ比嘉さんのセッション『openFrameworksと映像制作ソフトの連携』のメモ。
講師 : 比嘉了
AfterEffectsやCinema4Dなどの映像ソフトとopenFrameworksを連携させる映像制作手法の紹介を行います。
講義資料はこちらで公開されています。markdown形式。
過去のセッションのレポートはこちら。
- http://d.hatena.ne.jp/shu223/20141012/1413086307
- http://d.hatena.ne.jp/shu223/20141011/1413030973
- http://d.hatena.ne.jp/shu223/20141011/1413021458
事例紹介
(ダンスのやつ。動画メモし忘れました)
- 手と頭につけてるマーカーで軌跡を書く
- 他の部分は動的生成ではなく、CINEMA 4Dであらかじめ用意していたもの
Illustratorとの連携:ofxPDF
ベクタデータのうち、SVGよりPDFの方がロードが10倍ぐらい速いことがあったので、それからはPDFを使っている。そのPDFをoFで取り扱うアドオン。
普通に描画
ofxPDF pdf;
pdf.loadPDF("tiger.pdf");
pdf.draw();
テキストアニメーション
(アニメーションの途中の様子です)
void draw() { float app_time = ofGetElapsedTimef(); float animation_time = fmodf(app_time, 2) / 2.; cout << "app_time: = " << app_time << ", animation_time: " << animation_time << endl; ofSetColor(0); // PDFのパスを順番に取り出して ofPolyline で描画する for (int i = 0; i < pdf.getNumPath(); i++) { ofPath& path = pdf.getPathAt(i); vector<ofPolyline>& polys = path.getOutline(); for (int k = 0; k < polys.size(); k++) { ofPolyline poly = polys[k]; poly = poly.getResampledByCount(100); int target_size = poly.size() * animation_time; poly.resize(target_size); poly.draw(); } } }
順番に見ていくと、
1. パスを取り出す
ofPath& path = pdf.getPathAt(i);
2. パスのアウトラインを取り出す
vector<ofPolyline>& polys = path.getOutline();
ofPolyline がベクタで得られる
3. ofPolylineをリサイズしながら描画する
for (int k = 0; k < polys.size(); k++) { ofPolyline poly = polys[k]; poly = poly.getResampledByCount(100); int target_size = poly.size() * animation_time; poly.resize(target_size); poly.draw(); }
各アウトラインが、長さ0から元の長さに戻っていく。
After Effects との連携:ofxAfterEffectsKeyframeParser
サッカーのボールの軌跡を追う
AEにはそういう機能が入っている: tracker
- > キーフレームとして入る
- > ofxAfterEffectsKeyframeParser で読む
画像解析不要!
Cinema 4Dとの連携:ofxAlembic
https://github.com/perfume-dev/ofxAlembic
- メッシュアニメーション
- パーティクル
- polyline
- カメラワーク
などが読み書きできる
(それぞれ ofxAlembic に付属のサンプルを実行したもの。アニメーションします)
【oFセミナーメモ5】映像解析
『デジタルアートセミナー#3 openFrameworksで学ぶ、クリエイティブ・コーディング』の最終セッション『映像解析によるインタラクション』のメモです。
openFrameworksとOpenCV(ofxOpenCV、ofxCv)を組みあわせることで、映像を用いたインタラクティブな表現の可能性が大きく拡がります。このセッションでは、実例を紹介しながら映像とのリアルタイムなインタラクションの手法を探ります。
田所先生のイントロ、ひつじさんのオプティカルフロー+ドロネー変換、ライゾマ登本さんによるアドバンストな話、の3本立て構成でした。
過去のセッションのレポートはこちら。
- http://d.hatena.ne.jp/shu223/20141013/1413190109
- http://d.hatena.ne.jp/shu223/20141012/1413086307
- http://d.hatena.ne.jp/shu223/20141011/1413030973
- http://d.hatena.ne.jp/shu223/20141011/1413021458
田所先生のイントロ
オプティカル・フロー
映像内の物体の動きを、ベクトル場で表したもの
2種類のアルゴリズム
- Gunner Farneback
- 密なオプティカルフロー
- ofxCv::FlowFarneback
- Pyramidal LK
- 疎な特徴集合に対するオプティカルフロー
- ofxCv::FlowPyrLK
ひつじさん
講義資料: オプティカルフローを使ったモーショングラフィックス生成|ひつじ|note
ダンサーさんの踊っている映像を使用して、それをリアルタイムにカットアップしながらオプティカルフローを使ったグラフィックを載せているというプログラムです。
- YCAMのダンサーの映像にオプティカルフローをかける・・・特徴点を抽出
- ofxDelaunay ドロネー変換
登本さん
Kinectで3Dモデリング
キャリブレーション
- Kinect3台
- それぞれのカメラの位置がわかってない
- そのままだと 2.5d
- 光る玉を3台のKinectから見える位置で振る
- kinectのcolorの方で見ると、暗い部屋との対比で、簡単に中心位置を割り出せる
- カメラ位置の推定に、OpenCV の estimateAffine3D を使用
ofxEvm
Eulerian Video Magnification
動画の中から、人間の目ではわからないような微細な変化を検出する
論文と MATLAB
- 論文のコードは MATLAB で公開されてることが多い
- EVM も MATLAB でコードが公開されてる
- MATLAB が使われるのは、その世界ではみんな使ってるので、referされやすいから。Pythonも増えてきた。
- MatLabからのC++エクスポート機能はつかってない。自分でC++で書き直している。
SVGでAR
- カメラを固定して、映っている対象物の頂点の位置を示したSVGファイル をつくる
- → その位置に別の映像をオーバーレイするとAR的なことができる
- CameraCalibrate3D を使用 する
- (ってメモしたけどググっても見当たらないので、OpenCV の calibrateCamera かも。。)
- 最終的なテクスチャをズームしたり変位させたり回転させたりすることでカメラが動いてるっぽくも見える
TLD Tracker
ofxTldTracker
- ライセンスはLGPL
OpenCV 3.0 にTLDアルゴリズムのとラッカーが追加される
http://docs.opencv.org/trunk/modules/tracking/doc/tracker_algorithms.html の TrackerTLD