当前位置:   article > 正文

基于Qt的OpenCV人脸识别(四)_qt opencv人脸检测算法

qt opencv人脸检测算法

上篇进行了人脸的检测,现在进行人脸的识别,采用OpenCV的face320模块里的EigenFace算法。在进行检测之间,得制作被检测人的人脸数据,这是捕获按钮就起到了作用,进行人脸数据的拍摄,

  1. //拍摄人脸
  2. void Widget::on_btn_cap_clicked()
  3. {
  4. Mat dst;
  5. for (int i = 0; i < faces.size(); i++)
  6. {
  7. cv::resize(frame(faces[i]), dst, Size(92, 112));
  8. cvtColor(dst,dst,COLOR_BGR2RGB);
  9. imwrite(format("../myFace/%d.jpg", count), dst);
  10. count++;
  11. }
  12. }
如代码所示,拍摄的人脸数据大小都为112*92,拍摄10到20张图片,进行数据筛选,选则好的数据集进行训练,然后进行实时监测,同样在打开摄像头槽函数中添加代码:
  1. //延时函数
  2. void Widget::Sleep(int msec)
  3. {
  4. QTime dieTime = QTime::currentTime().addMSecs(msec);
  5. while( QTime::currentTime() < dieTime )
  6. QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
  7. }
  8. //打开摄像头
  9. void Widget::on_btn_open_clicked()
  10. {
  11. //打开摄像头
  12. if (capture.isOpened())
  13. return;
  14. capture.open(0);
  15. if(capture.isOpened())
  16. {
  17. //int rate= capture.get(CV_CAP_PROP_FPS); //获取帧率
  18. //qDebug() << "rate=" << rate;
  19. for(;;)
  20. {
  21. capture >> frame;
  22. flip(frame, frame, 1); //画面翻转
  23. if (!frame.empty())
  24. {
  25. //人脸检测
  26. Mat frame_gray;
  27. Mat dst;
  28. Mat testSample;
  29. cvtColor(frame, frame_gray, COLOR_BGR2GRAY);
  30. equalizeHist(frame_gray, frame_gray);
  31. faceDetector.detectMultiScale(frame_gray, faces, 1.1, 2, 0 | CASCADE_SCALE_IMAGE, Size(30, 30));
  32. for (int i = 0; i < faces.size(); i++)
  33. {
  34. Mat roi = frame(faces[i]);
  35. cvtColor(roi, dst, COLOR_BGR2GRAY);
  36. cv::resize(dst, testSample, Size(92, 112));
  37. int label = model->predict(testSample);
  38. rectangle(frame, faces[i], Scalar(0, 0, 255), 2, 8, 0);
  39. putText(frame, format("i'm %s", (label == 36 ? "Howard" : "Unknow")),
  40. faces[i].tl(), FONT_HERSHEY_PLAIN, 1.0, Scalar(0, 0, 255), 2, 8);
  41. //qDebug() << "label:" << label;
  42. }
  43. //显示
  44. image = Mat2QImage(frame);
  45. ui->label->setPixmap(QPixmap::fromImage(image));
  46. }
  47. Sleep(2); //延时2ms
  48. }
  49. }
  50. }

 注意点:

  1.  face属于OpenCV拓展模块,因此在头文件中要加入#include <opencv2/face.hpp>
  2. 训练的数据大小要一致,拍摄时表情可变化,但最好位置不要移动

最后的结果如下:

最后附上整个工程代码: https://download.csdn.net/download/huhuandk/10821182

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/278627
推荐阅读
相关标签
  

闽ICP备14008679号