ビデオシーケンスでフレームのサイズを10倍に変更しましたが、うまく機能しています。また、プロセスを高速化するには、各フレームで顔検出器を使用してから、(ドリフトを避けるために)間のフレームで代わりにフェイストラッカーを使用します。x
x-1
このリンクをチェックアウト:追跡と検出
また、サンプルコードが誰かを助けるかもしれません(追跡や認識ではなく、単純な検出です):
これはAndroidの例ですが、他のプラットフォームや言語のopencvでもほとんど同じです。」
mRgba = inputFrame.rgba();
mGray = inputFrame.gray();
int resizeFactor=10;//or any other number based on your input resolution
Imgproc.resize(mGray,mGray,newSize(mGray.width()/resizeFactor,mGray.height()/resizeFactor));
mRgba = proc(mRgba, mGray,resizeFactor);
そして、「proc」機能は次のようになります-OpenCV4Android顔検出サンプルからこれを見つけてアップグレードしました:
public Mat proc(Mat mRgba, Mat mGray, int resizeFactor) {
MatOfRect faces = new MatOfRect();
if (mJavaDetector != null)
mJavaDetector.detectMultiScale(mGray, faces, 1.1, 2, 2, new Size(0,0), new Size());//change this according to your usage-> Size(0, 0)
Rect[] facesArray = faces.toArray();
for (Rect rect : facesArray) {
Point t1 = rect.tl();
t1.x *= resizeFactor;
t1.y *= resizeFactor;
Point br = rect.br();
br.x *= resizeFactor;
br.y *= resizeFactor;
Imgproc.rectangle(mRgba, t1, br, FACE_RECT_COLOR, 3);
}
return mRgba;
}
私が使用したCPU:Snapdragon 720G
また、関連するフォーラムから、LBPはHAARよりもはるかに高速であることがわかりました。これと性能や品質についてはよくわかりませんが、この点についても触れておくといいと思いました。