目录
前言
1.1 静态识别
1.1.1 原始图像展示
1.1.2 代码
1.1.3 识别效果展示
1.2 动态识别
1.2.1 代码
1.2.2 识别效果展示
开源一个小项目,关于人脸识别,眼睛识别和微笑识别的,识别模型是opencv系统自带的,使用的语言是python,开发环境python3.9,编译器pycharm2022。
静态识别顾名思义,就是对一张图片上的人脸,眼睛和微笑进行识别,废话不多说,直接开始。
# 图片人脸检测,眼睛检测,微笑检测
import cv2
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades +"haarcascade_frontalface_default.xml")
eye_cascade = cv2.CascadeClassifier(cv2.data.haarcascades +"haarcascade_eye.xml")
smile_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_smile.xml')
img = cv2.imread(r'D:\Pythonproject\opencv-python\picture1.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 3)
if len(faces) > 0:
for faceRect in faces:
x, y, w, h = faceRect
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 4)
roi_gray = gray[y:y + h, x:x + w]
roi_color = img[y:y + h, x:x + w]
eyes = eye_cascade.detectMultiScale(roi_gray, 1.1, 3,cv2.CASCADE_SCALE_IMAGE,(100,100),(150,150)) #最小尺寸、最大尺寸排除干扰
for (ex, ey, ew, eh) in eyes:
cv2.rectangle(roi_color, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 4)
smiles = smile_cascade.detectMultiScale(roi_gray, 1.2, 10, cv2.CASCADE_SCALE_IMAGE,(180,60),(200,60))
for (ex, ey, ew, eh) in smiles:
cv2.rectangle(roi_color, (ex, ey), (ex + ew, ey + eh), (0, 0, 255), 4)
cv2.putText(img, 'Smile', (x, y - 6), 3, 1.2, (0, 0, 255), 2, cv2.LINE_AA)
cv2.imshow("img", img)
cv2.waitKey(0)
要想有更好的识别效果可以通过调整以下三个函数的参数,具体用法可自行查找,就不赘述。
face_cascade.detectMultiScale()
eye_cascade.detectMultiScale()
smile_cascade.detectMultiScale()
动态识别,就是利用电脑自带的摄像头进行图像采集,对采集到的图像实时检测人脸,眼睛和微笑,废话不多说,直接开始。
# 电脑摄像头人脸检测,眼睛检测,微笑检测
import cv2
frameWidth = 640
frameHeight = 480
cap = cv2.VideoCapture(0)
#cap.set函数中的3为帧的宽度、4为高度、10为亮度
cap.set(3, frameWidth)
cap.set(4, frameHeight)
cap.set(10,150)
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades +"haarcascade_frontalface_default.xml")
eye_cascade = cv2.CascadeClassifier(cv2.data.haarcascades +"haarcascade_eye.xml")
smile_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_smile.xml')
while True:
success, img = cap.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 3,cv2.CASCADE_SCALE_IMAGE,(200,200),(250,250))
for faceRect in faces:
x, y, w, h = faceRect
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 4)
roi_gray = gray[y:y + h, x:x + w]
roi_color = img[y:y + h, x:x + w]
eyes = eye_cascade.detectMultiScale(roi_gray, 1.25, 3,cv2.CASCADE_SCALE_IMAGE,(40,40),(50,50)) #最小尺寸、最大尺寸排除干扰
for (ex, ey, ew, eh) in eyes:
cv2.rectangle(roi_color, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 4)
smiles = smile_cascade.detectMultiScale(roi_gray, 1.4, 3,cv2.CASCADE_SCALE_IMAGE,(80,40),(100,40))
for (ex, ey, ew, eh) in smiles:
cv2.rectangle(roi_color, (ex, ey), (ex + ew, ey + eh), (0, 0, 255), 4)
cv2.putText(img, 'Smile', (x, y - 6), 3, 1.2, (0, 0, 255), 2, cv2.LINE_AA)
cv2.imshow("img", img)
if cv2.waitKey(1) & 0xFF == ord('q'): # 按下q键结束进程
break
笑的有点僵硬,效果就是这个样子;同静态一样,要想有更好的识别效果可以通过调整以下三个函数的参数,具体用法,自行学习。
face_cascade.detectMultiScale()
eye_cascade.detectMultiScale()
smile_cascade.detectMultiScale()
END