以下の参考サイトを見ながら、環境設定を行い、「FaceOSC.app」を立ち上げて、3Dメッシュが顔動画に描画されるところまではたどり着きました。
困っているのは、カメラに写っている自分の顔に、他人の顔をマッピングして顔を交換する際に、参考webサイト2より以下のコードを書く必要があるのですが、その開発環境がわからないことです。miやSublime Textなどで書いて、ファイルをどこに移動させれれば良いのでしょうか。
C++
1#include "testApp.h" 2using namespace ofxCv; 3void testApp::setup() { 4 5//画面基本設定 6ofSetVerticalSync(true); 7ofEnableAlphaBlending(); 8 9//カメラを初期化 10cam.initGrabber(640, 480); 11 12//合成するイメージのメモリ領域を確保して、読込み 13faceImage.allocate(640, 480, OF_IMAGE_COLOR); 14faceImage.loadImage("jiu.jpg"); 15 16//カメラ映像のフェイストラッカーのセットアップ 17tracker.setup(); 18 19//合成する顔画像のフェイストラッカーのセットアップ 20imgTracker.setup(); 21} 22 23void testApp::update() { 24//カメラ更新 25cam.update(); 26if(cam.isFrameNew()) { 27 28//フェイストラッカーの更新 29imgTracker.update(toCv(faceImage)); 30tracker.update(toCv(cam)); 31} 32} 33 34void testApp::draw() { 35//カメラ映像を描画 36ofSetColor(255); 37cam.draw(0, 0); 38 39//フレームレート表示 40ofDrawBitmapString(ofToString((int) ofGetFrameRate()), 10, 20); 41 42//もしカメラの映像に顔が検出されたら以下の処理をする 43if(tracker.getFound()) { 44 45//カメラ映像からメッシュを作成 46ofMesh objectMesh = tracker.getObjectMesh(); 47 48//合成する顔の画像からメッシュを作成 49ofMesh imgMesh = imgTracker.getObjectMesh(); 50 51//静止画のメッシュの頂点情報を、カメラから生成したメッシュのものに変換 52//つまり現在の顔の表情を、静止画のメッシュに適用 53for (int i = 0; i < objectMesh.getNumVertices(); i++) { 54imgMesh.setVertex(i, objectMesh.getVertex(i)); 55} 56 57//画面の3Dのパースをなしに 58ofSetupScreenOrtho(640, 480, OF_ORIENTATION_DEFAULT, 59true, -1000, 1000); 60 61//カメラで検出された顔の、位置、大きさ、傾きを取得 62ofVec2f positon = tracker.getPosition(); 63float scale = tracker.getScale(); 64ofVec3f orientation = tracker.getOrientation(); 65 66//静止画のメッシュをカメラの位置、大きさ、傾きにあわせる 67ofPushMatrix(); 68ofTranslate(positon.x, positon.y); 69ofScale(scale, scale, scale); 70ofRotateX(orientation.x * 45.0f); 71ofRotateY(orientation.y * 45.0f); 72ofRotateZ(orientation.z * 45.0f); 73 74//静止画から生成メッシュを配置して、合成する画像をマッピング 75ofSetColor(255, 255, 255, 127); 76faceImage.getTextureReference().bind(); 77imgMesh.draw(); 78faceImage.getTextureReference().unbind(); 79ofPopMatrix(); 80} 81} 82 83void testApp::keyPressed(int key) { 84//トラッカーのリセット 85if(key == 'r') { 86tracker.reset(); 87imgTracker.reset(); 88} 89}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/07/29 22:47