基于opencv-python的人脸识别、眼睛识别和微笑识别

目录

前言

1.1 静态识别

1.1.1 原始图像展示

1.1.2 代码

1.1.3 识别效果展示

1.2 动态识别

1.2.1 代码

1.2.2 识别效果展示


前言

开源一个小项目,关于人脸识别,眼睛识别和微笑识别的,识别模型是opencv系统自带的,使用的语言是python,开发环境python3.9,编译器pycharm2022。


1.1 静态识别

静态识别顾名思义,就是对一张图片上的人脸,眼睛和微笑进行识别,废话不多说,直接开始。


1.1.1 原始图像展示

基于opencv-python的人脸识别、眼睛识别和微笑识别_第1张图片


1.1.2 代码

# 图片人脸检测,眼睛检测,微笑检测
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)

1.1.3 识别效果展示

基于opencv-python的人脸识别、眼睛识别和微笑识别_第2张图片

要想有更好的识别效果可以通过调整以下三个函数的参数,具体用法可自行查找,就不赘述。

face_cascade.detectMultiScale()

eye_cascade.detectMultiScale()

smile_cascade.detectMultiScale()


1.2 动态识别

动态识别,就是利用电脑自带的摄像头进行图像采集,对采集到的图像实时检测人脸,眼睛和微笑,废话不多说,直接开始。


1.2.1 代码

# 电脑摄像头人脸检测,眼睛检测,微笑检测  
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



1.2.2 识别效果展示

基于opencv-python的人脸识别、眼睛识别和微笑识别_第3张图片

笑的有点僵硬,效果就是这个样子;同静态一样,要想有更好的识别效果可以通过调整以下三个函数的参数,具体用法,自行学习。

face_cascade.detectMultiScale()

eye_cascade.detectMultiScale()

smile_cascade.detectMultiScale()

END

你可能感兴趣的:(opencv,python,计算机视觉)