haar的简单应用(2)
上次对图片进行了人脸识别,这次对摄像头捕获的内容进行识别
直接写注释来解释
import cv2
def CatchUsbVideo(window_name, camera_idx): #定义一个函数来实现人脸识别
cv2.namedWindow(window_name) #参数window_name给创建的窗口命名
# 读取视频,可以来自一段已存好的视频,也可以直接来自摄像头,通过0,1参数配置本机或usb摄像头
cap = cv2.VideoCapture(camera_idx)
# 告诉OpenCV使用人脸识别分类器,还是那个opencv自带的分类器,目录结构和《haar的简单应用》一样
classfier = cv2.CascadeClassifier("../cascades/haarcascade_frontalface_default.xml")
# 绿色勾边,RGB格式
color = (0, 255, 0)
while cap.isOpened(): #循环检测每一帧
ok, frame = cap.read() # 读取一帧数据
if not ok:
break
# 将当前帧转换成灰度图像
grey = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 人脸检测,1.2和2分别为图片缩放比例和需要检测的有效点数
faceRects = classfier.detectMultiScale(grey, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))
if len(faceRects) > 0: # 大于0则检测到人脸
for faceRect in faceRects: # 单独框出每一张人脸
x, y, w, h = faceRect
cv2.rectangle(frame, (x - 10, y - 10), (x + w + 10, y + h + 10), color, 3) #5控制绿色框(勾边)的粗细
# 显示图像
cv2.imshow(window_name, frame)
c = cv2.waitKey(10)
if c & 0xFF == ord('q'): #按"q"退出
break
# 释放摄像头并销毁所有窗口
cap.release()
cv2.destroyAllWindows()
if __name__ == '__main__': #Make a script both importable and executable 让你写的脚本模块既可以导入到别的模块中用,另外该模块自己也可执行,注意前后各有有两个下划线
CatchUsbVideo("FaceRect", 0)
运行结果截图。嗯...摄像头像素有点低,而且还不会聚焦...凑活看吧,篮框是图片识别的,绿框是摄像头识别的
我又对动图进行了识别,将CatchUsbVideo第二个参数更改为视频文件的路径
我试了半天.mp4不知道怎么上传
这个简单的人脸识别只适用于正脸清晰的