C++に限らず、プログラミング知識に乏しい初心者です。
現在、顔認証を行い、顔(視線)を上下させた際に、それに伴って閲覧ページのスクロールを行うシステムの開発を行っております。
発生している問題・エラーメッセージ
顔認証はopenFrameworksを活用しているofxFacetrackerを使用しています。
スクロール機能はxcodeに搭載されているCoreGraphicsを使用しています。
これらを踏まえて、以下に記載されているようなソースコードを書いてデバックしたのですが、エラーは出ず、顔認証をきちんと行えている状態でした。しかし、顔を上下してもページはスクロールされませんでした。きちんと変数等は値を受け取っているものの、ページスクロールの部分(CGEventRef, CGEventCreateScrollWheelEvent,CGEventPostなどの関数)のみ、動作していない状況です。
該当のソースコード
使用言語:C++
#include "ofApp.h" #include "ApplicationServices/ApplicationServices.h" using namespace ofxCv; void ofApp::setup() { ofSetVerticalSync(true); ofSetDrawBitmapMode(OF_BITMAPMODE_MODEL_BILLBOARD); cam.setup(640, 480); tracker.setup(); } void ofApp::update() { cam.update(); if(cam.isFrameNew()) { tracker.update(toCv(cam)); position = tracker.getPosition(); scale = tracker.getScale(); orientation = tracker.getOrientation(); rotationMatrix = tracker.getRotationMatrix(); } } void ofApp::draw() { ofSetColor(255); cam.draw(0, 0); ofDrawBitmapString(ofToString((int) ofGetFrameRate()), 10, 20); if(tracker.getFound()) { ofSetLineWidth(1); tracker.draw(); ofSetupScreenOrtho(640, 480, -1000, 1000); ofTranslate(640 / 2, 480 / 2); ofPushMatrix(); ofScale(5,5,5); tracker.getObjectMesh().drawWireframe(); ofPopMatrix(); applyMatrix(rotationMatrix); ofScale(5,5,5); tracker.getObjectMesh().drawWireframe(); } } void ofApp::keyPressed(int key) { if(key == 'r') { tracker.reset(); } /*ページスクロール*/ if(key == 's'){ templeL = tracker.getImagePoint(2); templeR = tracker.getImagePoint(14); nose = tracker.getImagePoint(29); faceDirValue = (templeR.y + templeL.y)/2 - nose.y; Move = (faceDirValue - FaceDirectionBaseY)/5; if(!FaceDirectionBaseY) { FaceDirectionBaseY = faceDirValue; }else if(FaceDirectionBaseY) { if(faceDirValue < FaceDirectionBaseY-20 || faceDirValue > FaceDirectionBaseY + 30) { CGEventRef eve = CGEventCreateScrollWheelEvent(NULL, kCGScrollEventUnitLine, 1, Move); CGEventPost(kCGHIDEventTap, eve); CFRelease(eve); NeckMoveY = true; }else { NeckMoveY = false; } } } }
試したこと
・CoreGraphicsを用いる際に使用するCoreService.framworkをFrameworkに追加。
・エラーはなく、正常にデバックできる。
・プログラムを実行するとカメラが起動し、顔認証(検知)が実行され、正常に動作する。
・アルゴリズム自体に問題はなく、ソースコード内のページスクロールの部分のみ動作していない。
・ページスクロール部分にある変数(faceDirValue,Moveなど)はきちんと値を取得している。
補足情報
開発環境
PC:MacBook Air (13-inch, Early 2015) macOS High Sierra 10.13.6
IDE:Xcode 10.0
開発言語:C++
ライブラリ:CoreGraphics
openFrameworks 使用アドオン(ofxGui, ofxCv, ofxFaceTracker, ofxOpenCV)
ofxFaceTracker
https://github.com/kylemcdonald/ofxFaceTracker
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。