视频人脸检测——OpenCV版(三)

偏执的太偏执、 2023-10-17 21:11 105阅读 0赞

视频人脸检测是图片人脸检测的高级版本,图片检测详情点击查看我的上一篇《图片人脸检测——OpenCV版(二)》

实现思路:

调用电脑的摄像头,把摄像的信息逐帧分解成图片,基于图片检测标识出人脸的位置,把处理的图片逐帧绘制给用户,用户看到的效果就是视频的人脸检测。

效果预览:

172074-20180424213326812-644948394.gif

实现步骤

使用OpenCV调用摄像头并展示

获取摄像头:

  1. cap = cv2.VideoCapture(0)

参数0表示,获取第一个摄像头。

显示摄像头 逐帧显示,代码如下:

  1. while (1):
  2. ret, img = cap.read()
  3. cv2.imshow("Image", img)
  4. if cv2.waitKey(1) & 0xFF == ord('q'):
  5. break
  6. cap.release() # 释放摄像头
  7. cv2.destroyAllWindows() # 释放窗口资源

cv2.waitKey(1) & 0xFF使用了“&”位元算法,含义是获取用户输入的最后一个字符的ASCII码,如果输入的是“q”,则跳出循环。

视频的人脸识别

这个时候,用到了上一节的《图片人脸检测——OpenCV版(二)》 把人脸识别的代码封装成方法,代码如下:

  1. def discern(img):
  2. gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  3. cap = cv2.CascadeClassifier(
  4. "C:\Python36\Lib\site-packages\opencv-master\data\haarcascades\haarcascade_frontalface_default.xml"
  5. )
  6. faceRects = cap.detectMultiScale(
  7. gray, scaleFactor=1.2, minNeighbors=3, minSize=(50, 50))
  8. if len(faceRects):
  9. for faceRect in faceRects:
  10. x, y, w, h = faceRect
  11. cv2.rectangle(img, (x, y), (x + h, y + w), (0, 255, 0), 2) # 框出人脸
  12. cv2.imshow("Image", img)

再循环摄像头帧图片的时候,调用图片识别方法即可,代码如下:

  1. # 获取摄像头0表示第一个摄像头
  2. cap = cv2.VideoCapture(0)
  3. while (1): # 逐帧显示
  4. ret, img = cap.read()
  5. # cv2.imshow("Image", img)
  6. discern(img)
  7. if cv2.waitKey(1) & 0xFF == ord('q'):
  8. break
  9. cap.release() # 释放摄像头
  10. cv2.destroyAllWindows() # 释放窗口资源

  

完整的代码如下:

  1. # -*- coding:utf-8 -*-
  2. # OpenCV版本的视频检测
  3. import cv2
  4. # 图片识别方法封装
  5. def discern(img):
  6. gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  7. cap = cv2.CascadeClassifier(
  8. "C:\Python36\Lib\site-packages\opencv-master\data\haarcascades\haarcascade_frontalface_default.xml"
  9. )
  10. faceRects = cap.detectMultiScale(
  11. gray, scaleFactor=1.2, minNeighbors=3, minSize=(50, 50))
  12. if len(faceRects):
  13. for faceRect in faceRects:
  14. x, y, w, h = faceRect
  15. cv2.rectangle(img, (x, y), (x + h, y + w), (0, 255, 0), 2) # 框出人脸
  16. cv2.imshow("Image", img)
  17. # 获取摄像头0表示第一个摄像头
  18. cap = cv2.VideoCapture(0)
  19. while (1): # 逐帧显示
  20. ret, img = cap.read()
  21. # cv2.imshow("Image", img)
  22. discern(img)
  23. if cv2.waitKey(1) & 0xFF == ord('q'):
  24. break
  25. cap.release() # 释放摄像头
  26. cv2.destroyAllWindows() # 释放窗口资源

往期目录

视频人脸检测——Dlib版(六)
OpenCV添加中文(五)
图片人脸检测——Dlib版(四)
视频人脸检测——OpenCV版(三)
图片人脸检测——OpenCV版(二)
OpenCV环境搭建(一)
更多更新,欢迎访问我的github:https://github.com/vipstone/faceai

发表评论

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

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

相关阅读