2

Kinect SDK 1.5 を使用していますが、複数の顔を追跡したいときに問題が見つかりました。

私のコードでは、最初に使用します

myFaceTracker->DetectFaces(&sensor, NULL, candidates, &nums)

現在検出されている顔を取得し、それらの位置を既に追跡されている顔と比較します。

現在追跡されていない顔は、次のステップで追跡するためにキューに追加されます。

しかし、StartTracking 関数を使用してそれらを追跡したい場合、期待した結果が得られません。

例えば:

//Time for us to track those not tracked
RECT rect = queue_face.front();

//Make the region larger than orginal
int length_vertical = rect.bottom - rect.top;
int length_horizontal = rect.right - rect.left;
rect.top    = rect.top - length_vertical * 2;
rect.bottom = rect.bottom + length_vertical * 2;
rect.left   = rect.left - length_horizontal * 2;
rect.right  = rect.right + length_horizontal * 2;

//Use OpenCV to see if it gets right
CvPoint LT = cvPoint(rect.left, rect.top);
CvPoint LB = cvPoint(rect.left, rect.bottom);
CvPoint RT = cvPoint(rect.right, rect.top);
CvPoint RB = cvPoint(rect.right, rect.bottom);

cvLine(_img, LT, LB, cvScalar(0, 255, 0), 2);
cvLine(_img, LB, RB, cvScalar(0, 255, 0), 2);
cvLine(_img, RB, RT, cvScalar(0, 255, 0), 2);
cvLine(_img, RT, LT, cvScalar(0, 255, 0), 2);

//Here turns out to be some problem
result = facetracker->StartTracking(&sensor, &rect, NULL, faceresult);

//Check Result
is_track = SUCCEEDED(result) && SUCCEEDED(faceresult->GetStatus());
queue_face.pop();

....

上記のコードを使用すると、ステータスが成功と表示されていても、まったく役に立たない結果が得られます

faceresult->GetFaceRect(rect);

(0, 0, 0, 0) の rect が得られます。

でも私たちが変われば

result = facetracker->StartTracking(&sensor, &rect, NULL, faceresult);

result = facetracker->StartTracking(&sensor, NULL, NULL, faceresult);

これで便利なものが得られますが、この方法では、誰を追跡するかを制御することはほとんど不可能です.

また、(0, 0, width-1, height-1) への入力 rect を確認しようとしましたが、さらに悪いことに、何も追跡できないと表示されます。

誰か助けてくれませんか?

どうもありがとう。

4

0 に答える 0