opencv-python识别人脸

转自:https://www.cnblogs.com/neo-T/p/6430583.html

OpenCV已经帮我们做了,我们只需调用对应的API函数即可,先给出代码:

 1 # -*- coding: utf-8 -*-
 2 
 3 ##关键字无法关闭 摄像头,可能是代码缩进问题。显示图像 在for 里面是无法推出的
 4 import sys
 5 from PIL import Image
 6 import cv2
 7 
 8 def AICatchVideo(v_name, camera_index):
 9     # 打开摄像头 ,视频来源,也可以使用已存的视频
10     cap = cv2.VideoCapture(0)
11     # 创建窗口
12     cv2.namedWindow(v_name)
13     # 加载人脸数据(人脸特征),#告诉OpenCV使用人脸识别分类器
14     face_cascade = cv2.CascadeClassifier('./haarcascade_frontalface_alt2.xml')
15     while True:
16         ret, frame = cap.read()
17         if not ret:
18             # 等待用户操作
19             cv2.waitKey(30)
20         # 得到每一帧-》图像计算
21         # 灰度转换:转换成灰度的图计算强度得以减低
22         gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
23         # 对比 摄像头采集到的数据-》人脸特征训练集
24         faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5,minSize=(32,32))
25         if len(faces)>0:
26 
27             for (x, y, w, h) in faces:
28                 # 在窗口中识别人脸,画一个矩形
29                 frame = cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)
30         #显示图像
31         cv2.imshow(v_name, frame)
32         key = cv2.waitKey(20)
33         if key & 0xFF == ord('q'):
34             break
35 
36     # 窗口释放:缓存-》内存条
37     cap.release()
38     cv2.destroyAllWindows()
39 
40 
41 if __name__ == '__main__':
42     # print(len(sys.argv))
43     # print('内容是'+ sys.argv[0])
44     # if len(sys.argv) != 2:
45     #     print('Usage:%s camera_id:{}'.format(sys.argv[0]))
46     # else:
47     AICatchVideo('识别人脸区域', sys.argv[0])

#告诉OpenCV使用人脸识别分类器
classfier = cv2.CascadeClassifier("./haarcascade_frontalface_alt2.xml")

这行代码指定OpenCV选择使用哪种分类器(注意,一定习惯分类这个说法,ML的监督学习研究的就是各种分类问题),OpenCV提供了多种分类器:

对同一个画面有可能出现多张人脸,因此,我们需要用一个for循环将所有检测到的人脸都读取出来,然后逐个用矩形框框出来,这就是接下来的for语句的作用。Opencv会给出每张人脸在图像中的起始坐标(左上角,x、y)以及长、宽(h、w),我们据此就可以截取出人脸。其中,cv2.rectangle()完成画框的工作,在这里我有意识的外扩了10个像素以框出比人脸稍大一点的区域。cv2.rectangle()函数的最后两个参数一个用于指定矩形边框的颜色,一个用于指定矩形边框线条的粗细程度。  

猜你喜欢

转载自www.cnblogs.com/yexiaoyanzi/p/12595657.html