最近看了一下人脸识别的案例,一直想做一个。 其实正真做起来没有那么难,主要是调试,毕竟人脸识别的过程haarcascade_frontalface_alt.xml 都帮我们做了,知道怎么用他就行了。重点是faces得到脸的位置。
下面是代码:
import cv2 as cv
import numpy as np
def face_detect_demo(image):
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) #把图形转换成灰度值比 CV_RGB2GRAY 更细致 像素被分为了3组
face_detector = cv.CascadeClassifier("C:/dirop/haarcascade_frontalface_alt.xml")#级联分类器 分辨出是否为人脸
eye_cas = cv.CascadeClassifier("C:/dirop/haarcascade_eye.xml")# 检测眼睛
#检测多尺度 gray 待检测的图形 前后两次扫描中搜索窗口的比例系数 默认为1.1即每次搜索窗口依次扩大10%
#构成检测目标的相邻矩形的最小个数(2)----->人脸的特征
faces = face_detector.detectMultiScale(gray, 1.1, 2)
for x, y, w, h in faces:
#画矩形框 参数(目标图像 矩形的一个顶点 对角线的另一个顶点 线条颜色/亮度 线条的粗细程度[负数时填充框内])
cv.rectangle(image, (x, y), (x+w, y+h), (0, 0, 255), 2)
'''眼睛检测'''
#f=cv.resize(gray[y:y+h,x:x+w],(200,200))
eyes=eye_cas.detectMultiScale(gray,1.03,5,0,(40,40))
for (ex,ey,ew,eh) in eyes:
cv.rectangle(image,(ex,ey),(ex+ew,ey+eh),(255,0,255),2)
'''end '''
#cv.imshow("camera",frame) #这2个方法都可以
cv.imshow("result", image)
print("--------- Python OpenCV Tutorial ---------")
capture = cv.VideoCapture(0) #调用相机
cv.namedWindow("result", cv.WINDOW_AUTOSIZE) #显示窗口 autosize不能手动调整窗口大小
while(True):
ret, frame = capture.read() #读取摄像头的帧数
frame = cv.flip(frame, 1) #图形的镜像翻转
face_detect_demo(frame) #相机帧数传递----->显示/检测人脸图形
c = cv.waitKey(10) #等待按键的按下 10ms
if c == 27: # ESC
break
cv.waitKey(0)
cv.destroyAllWindows()