基于python的人脸检测

2022-08-07,,

文章简要

本文简单介绍使用opencv跨平台计算机视觉和机器学习软件库来进行人脸检测,操作工具:pycharm和opencv资源包。

人脸检测代码

下面展示 人脸检测代码,首先,这里果粒叔饰演的纪晓岚的剧照作为检测对象。

import cv2 as cv

def face_text(img):
    # 灰度处理
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    # 加载特征(需要opencv的资源包)
    facec = cv.CascadeClassifier("F:/tools/opencv/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml")
    # 检测人脸,放入图片,返回人脸区域
    faces = facec.detectMultiScale(gray)
    for x, y, w, h in faces:
        cv.rectangle(img, (x, y), (x + w, y + h), color=(0, 255, 0), thickness=2)
    # 显示
    cv.imshow("result", img)#注意:这里的两个参数都不能省略,尤其是第一个--输出标题

# 加载图片
a = cv.imread("D:\pycharm\local img\jixiaol.jpg")
b = cv.resize(a, dsize=(500, 300))

#调用检测函数
face_text(b)

cv.waitKey(0)#等待处理,按任意键继续,“0”为时长无限
cv.destroyAllWindows()#释放内存

下面,就可以尝试检测视频中的人脸,代码如下:

import cv2 as cv

def face_text(img):
    # 灰度处理
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    # 加载特征
    facec = cv.CascadeClassifier("F:/tools/opencv/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml")
    # 检测人脸,放入图片,返回人脸区域
    faces = facec.detectMultiScale(gray,minNeighbors=3)
    for x, y, w, h in faces:
        cv.rectangle(img, (x, y), (x + w, y + h), color=(0, 255, 0), thickness=2)
    # 显示
    cv.imshow("result", img)

cap = cv.VideoCapture(0,cv.CAP_DSHOW)#调用自己摄像头,注意,这里会因为python不同版本参数表达意会有差别,有的版本直接传入参数0即可
#cap = cv.VideoCapture(“___”)调用视频
#利用循环对每一帧进行检测,并使其检测到输入“q“后停止检测
while True:
    flag, frame = cap.read()
    face_text(frame)
    cv.imshow("result", frame)
    if ord("q") == cv.waitKey(10):
        break
#释放内存
cv.destroyAllWindows()
cap.release()

对摄像头进行镜像处理

while True:
    flag, frame = cap.read()
    face_text(frame)
    frame2 = cv.flip(frame,1)#镜像处理
    cv.imshow("result", frame2)
    if ord("q") == cv.waitKey(10):
        break

当然,如果画质不清晰或者光线较暗,机器检测就会有偏差。

本文地址:https://blog.csdn.net/decent2/article/details/107022763

《基于python的人脸检测.doc》

下载本文的Word格式文档,以方便收藏与打印。