我将视频序列中的帧大小调整为 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 快得多。我不确定这一点以及性能和质量,但我认为也可以提及这一点。