一、基本理论
OpenCV(Open Source Computer Vision)是一个开源的计算机视觉和机器学习软件库,其中包含了众多计算机视觉和图像处理相关的算法。在OpenCV中,可以使用Haar特征或者深度学习模型来进行人脸检测。
Haar特征是一种基于图像局部特征的描述子,它通过比较相邻区域的像素强度来描述图像的特征。在人脸检测中,可以使用Haar特征来描述眼睛、鼻子、嘴巴等脸部特征,然后通过级联分类器来实现人脸检测。OpenCV提供了基于Haar特征的人脸检测器,可以在程序中直接使用。
另外,深度学习模型也可以用于人脸检测。OpenCV中提供了预训练的深度学习模型,例如MTCNN、MobileNet等,可以直接用于人脸检测。相比于Haar特征,深度学习模型具有更高的准确度和更快的速度。
二、人脸检测开发
2.1、程序开发

# -*- coding: utf-8 -*-
import cv2
# ===============1 原始图像处理====================
image = cv2.imread('friends.jpg')
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
# ================2 加载分类器========================
faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# =================3 人脸检测========================
faces = faceCascade.detectMultiScale(
    gray,
    scaleFactor = 1.04,
    minNeighbors = 18,
    minSize = (8,8))
# ===============4 打印输出的实现=====================
print("发现{0}张人脸!".format(len(faces)))
print("其位置分别是:")
print(faces)
# ==================5 标注人脸及显示=======================
for(x,y,w,h) in faces:
  cv2.rectangle(image,(x,y),(x+w,y+h),(0,255,0),2)
cv2.imshow("result",image)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.2、上传图片测试运行情况
1、框选标注人脸
2、输出检测到的人脸数量
3、输出检测到的位置坐标
图片1.png 图片2.png


三、人脸识别开发

3.1、程序开发
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import cv2
import numpy as np
# 读取训练图像
images=[]
images.append(cv2.imread("e01.png",cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread("e02.png",cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread("e11.png",cv2.IMREAD_GRAYSCALE))
images.append(cv2.imread("e12.png",cv2.IMREAD_GRAYSCALE))
# 给训练图像贴标签
labels=[0,0,1,1]
# 读取待识别图像
predict_image=cv2.imread("etest.png",cv2.IMREAD_GRAYSCALE)
# 识别
recognizer = cv2.face.EigenFaceRecognizer_create()
recognizer.train(images, np.array(labels))  
label,confidence= recognizer.predict(predict_image)
# 打印识别结果
print("识别标签label=",label)
print("置信度confidence=",confidence)
# 可视化输出
name=["first","second"]  
font=cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(predict_image,name[label],(0,30), font, 0.8,(255,255,255),2)
cv2.imshow("result",predict_image)
cv2.waitKey()
cv2.destroyAllWindows()
3.2、图片收集和图片命名标注
图片3.png

3.3、程序运行
第五张图片是指定图片,根据此图片的相关信息,在其他图片中进行比对
图片4.png