一、人脸识别原理
1.1 特征数据介绍:
在Python的Opencv中进行人脸识别,那是需要有特征数据的。在github上可以进行下载:https://github.com/opencv/opencv/tree/master/data。包括HAAR与LBP两类数据,都是XML数据类型:
例如我们打开haarcascades,下载人脸特征文件(下图还包括了很多其它的特征文件):
1.2 人脸检测代码分析:
import cv2 as cv
import numpy as np
def face_detect_demo(image,face_detector): #注:人脸检测必须在灰度图片进行处理,此处传入可为彩色图片
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) #转换为灰度图片
#face_detector = cv.CascadeClassifier("C:\\0-MyWork\\opencv-python\\haarcascade_frontalface_alt_tree.xml")
faces = face_detector.detectMultiScale(gray, 1.1, 2) #表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%; 2:此值越大,对于目标清晰度要求越高,越少时可能会识别错误物体为人脸
for x, y, w, h in faces:
cv.rectangle(image, (x, y), (x+w, y+h), (0, 0, 255), 2) #在图片上画矩阵框架,(x, y)为矩阵起点,(x+w, y+h)为终点, (0, 0, 255)为框的颜色,2为宽度(当为负数时,矩阵框范围全部填充)
cv.imshow("result", image)
print("--------- Python OpenCV Tutorial ---------")
#src = cv.imread("D:/vcprojects/images/topstar.png")
capture = cv.VideoCapture(0)
#cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.namedWindow("result", cv.WINDOW_AUTOSIZE)
face_detector = cv.CascadeClassifier("C:\\0-MyWork\\opencv-python\\haarcascade_frontalface_alt.xml")
while(True):
ret, frame = capture.read()
frame = cv.flip(frame, 1) #水平转置
face_detect_demo(frame,face_detector)
c = cv.waitKey(10)
if c == 27: # ESC
break
#cv.imshow("input image", src)
cv.waitKey(0)
cv.destroyAllWindows()
本程序调用摄像头进行人脸检测,检测到时,标注人脸框,如下图所示:
说明:本无法博文及后续本专栏文章代码与测试文件下载地址为:
链接:https://pan.baidu.com/s/1BeZkXoCAn_AFRkyXcI8dMQ
提取码:aze2