任务
在Windows10系统下,用python,在jupyter notebook 结合cv2、dlib、face_recognition、matplotlib.pyplot等库通过HOG或CNN算法进行人脸识别,人脸对齐和人脸匹配。
目录
Ⅰ.OpenCV、face_recogniton、dlib安装
Ⅰ.OpenCV、face_recogniton、dlib安装
在左下角搜索中输入cmd,调出命令指示符,分别输入以下几行代码,以安装各库。
pip install opencv-python
pip install dlib
pip install face_recognition
若有报错,根据报错提示进行操作,例如在安装后两个库时,报错提示必须在xx库基础上才能安装,如此,则先安装这个提示的库。
Ⅱ.仅依赖于cv2人脸识别
导入所需各库。
安装时叫做OpenCV,导入时叫cv2。
导入os模块,以修改并判断当前文件所在位置。
os.chdir()修改当前工作路径;os.getcwd()返回当前工作路径。
当前工作路径和当前文件路径无关。
import cv2
import os
import matplotlib.pyplot as plt
os.chdir("G:\大三上\各门课作业\python")
print(os.getcwd())
定义一个函数detect。
cv2.CascadeClassifier()调用人脸识别分类器,根据OpenCV库所在位置找到目标识别依据的Haar特征分类器,包括眼睛、嘴巴、微笑等。此处以正脸为例。
cv2.imread(filepath,flags)读入图片。filepath为图片路径。flags为读入图片的方式,可省略。
flags一般分三种情况:
- cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道
- cv2.IMREAD_GRAYSCALE:读入灰度图片
- cv2.IMREAD_UNCHANGED:读入完整图片,包括alpha通道
cv2.cvtColor()颜色转换:
- 灰度图像转换为彩色图像:cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
- 彩色图像转换为灰度图像:cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
face_cascade.detectMultiScale()参数:
- image:待检测图片(指定要查找人脸位置的图像矩阵,为numpy.ndarray),一般为灰度图像加快检测速度;
- objects:被检测物体的矩形框向量组;
- scaleFactor:在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%;
- **minNeighbors:构成检测目标的相邻矩形的最小个数(默认为3个)。如果组成检测目标的小矩形的个数和小于 min_neighbors - 1 都会被排除。如果min_neighbors 为 0, 则函数不做任何操作就返回所有的被检候选矩形框,这种设定值一般用在用户自定义对检测结果的组合程序上;
- flags:要么使用默认值,要么使用CV_HAAR_DO_CANNY_PRUNING,如果设置为CV_HAAR_DO_CANNY_PRUNING,那么函数将会使用Canny边缘检测来排除边缘过多或过少的区域,因此这些区域通常不会是人脸所在区域;
- minSize和maxSize:限制得到的目标区域的范围。
此处的img_gray即待检测灰度图片;faces为识别出脸部的矩形框向量组,几张脸就有几个矩形框,向量组里就有几组向量。
def detect(filename):
face_cascade=cv2.CascadeClassifier("F:\Python-3.8.2\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml")
img=cv2.imread(filename)
img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
faces=face_cascade.detectMultiScale(img_gray,1.1,3)
print(faces)
for 循环,遍历faces矩形框向量组里每一组矩形(即每一张脸)。faces四个参数,按顺序分别矩形框的上边、后边、下边、左边边界的位置。
cv2.rectangle()各参数含义依次是:图片、矩形左上顶点位置、矩形右上顶点位置、颜色、矩形边框粗细
detect("beauty.jpg")调用函数detect。图片路径应与当前工作路径保持一致。
for(x,y,w