我正在开发一个Android项目,我正在使用OpenCV通过相机检测人脸。应用程序正确检测面部,但性能非常慢。我已多次检查此问题,但我没有找到任何解决方案。有没有办法改善表现?
我的代码是:
QVideoFrame FilterRunnable::run( QVideoFrame *input,
const QVideoSurfaceFormat &surfaceFormat,
QVideoFilterRunnable::RunFlags flags )
{
input->map(QAbstractVideoBuffer::ReadOnly);
QImage image = imageWrapper(*input);
image = image.scaled(640,480);
cv::Mat mat(image.width(),image.height(),CV_8UC3,image.bits(), image.bytesPerLine());
vector< Rect > detectedFaces;
detectedFaces.clear();
frontalFaceClassifier.detectMultiScale( mat, detectedFaces,
1.6, 3, 2 | CV_HAAR_SCALE_IMAGE , Size(60,60) );
qDebug()<<"Cantidad de caras en el vector : " << detectedFaces.size();
if( detectedFaces.size() > 0 ){
actualFace = detectedFaces.at( 0 );
countDetectedFaces++;
qDebug()<<"**********qwerty**********"<<detectedFaces.size();
}
for(int i=0;i<detectedFaces.size();i++)
{
Rect dibujarCuadrado = detectedFaces.at(i);
cv::rectangle (mat, dibujarCuadrado, 20, 1, LINE_8, 0);
}
}
答案 0 :(得分:1)
我看到你只实施了一个haar分类器。我假设你使用了frontleface。您可以在else语句中合并配置文件面分类器(在opencv haar包中提供)以提高准确性。通常,您可以训练您想要的任何分类器并将它们合并。对于训练分类器,这是一个很棒的视频here