Python 使用Opencv实现图片人脸检测和视频人脸检测

比眉伴天荒 2022-05-23 09:44 385阅读 0赞

-————-欢迎加入学习交流QQ群:657341423


Haar级联数据文件夹与代码文件存放在同一目录
Haar级联数据文件下载:请点击
图片人面检测

  1. import cv2
  2. filename = 'pic.jpg'
  3. def detect(filename):
  4. # 加载Haar级联数据文件,用于检测人面
  5. face_cascade = cv2.CascadeClassifier('cascades/haarcascade_frontalface_default.xml')
  6. eye_cascade = cv2.CascadeClassifier('cascades/haarcascade_eye.xml')
  7. # 读取文件并灰度处理
  8. img = cv2.imread(filename)
  9. gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  10. # 人面识别。detectMultiScale参数说明:
  11. # gray: 进行检测的图像, 这里是转换后的。
  12. # scaleFactor: 官网文档说是每次图片缩小的比例, 其实可以这么理解, 距离相机不同的距离, 物体大小是不一样的, 在物体大小不一致的情况下识别一个东西是不方便的, 这就需要进行多次的缩放, 这就是这个参数的作用。
  13. # minNeighbors: 可以理解为每次检测时, 对检测点(Scale)周边多少有效点同时检测, 因为可能选取的检测点大小不足而导致遗漏。
  14. # minSize: 检测点的最小值, 或者说就是检测点的最终值。
  15. faces = face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5, minSize=(5,5))
  16. # 眼部识别
  17. eyes = eye_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5, minSize=(5,5))
  18. # 画出面部位置
  19. for (x, y, w, h) in faces:
  20. img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
  21. # 显示图像
  22. cv2.imshow('pic', img)
  23. cv2.imwrite('pic.jpg', img)
  24. cv2.waitKey(0)
  25. detect(filename)

视频人面检测

  1. import cv2
  2. def detect():
  3. # 加载Haar级联数据文件,用于检测人面
  4. face_cascade = cv2.CascadeClassifier('cascades/haarcascade_frontalface_default.xml')
  5. eye_cascade = cv2.CascadeClassifier('cascades/haarcascade_eye.xml')
  6. camera = cv2.VideoCapture(0)
  7. while True:
  8. ret, frame = camera.read()
  9. gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
  10. # 人面识别。detectMultiScale参数说明:
  11. # gray: 进行检测的图像, 这里是转换后的。
  12. # scaleFactor: 官网文档说是每次图片缩小的比例, 其实可以这么理解, 距离相机不同的距离, 物体大小是不一样的, 在物体大小不一致的情况下识别一个东西是不方便的, 这就需要进行多次的缩放, 这就是这个参数的作用。
  13. # minNeighbors: 可以理解为每次检测时, 对检测点(Scale)周边多少有效点同时检测, 因为可能选取的检测点大小不足而导致遗漏。
  14. # minSize: 检测点的最小值, 或者说就是检测点的最终值。
  15. faces = face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5, minSize=(5,5))
  16. # 画出面部位置
  17. for (x, y, w, h) in faces:
  18. img = cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)
  19. # 画出眼部位置
  20. eyes = eye_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5, minSize=(5, 5))
  21. for (ex, ey, ew, eh) in eyes:
  22. cv2.rectangle(img, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2)
  23. # 显示图像
  24. cv2.imshow('pic', frame)
  25. # 停止程序
  26. if cv2.waitKey(120) & 0xff == ord('q'):
  27. break
  28. camera.release()
  29. cv2.destroyAllWindows()
  30. detect()

参考资料:OpenCV 3计算机视觉 Python语言实现第二版

发表评论

表情:
评论列表 (有 0 条评论,385人围观)

还没有评论,来说两句吧...

相关阅读