欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

基于python的人脸检测

程序员文章站 2022-05-21 10:51:17
文章简要本文简单介绍使用opencv跨平台计算机视觉和机器学习软件库来进行人脸检测,操作工具:pycharm和opencv资源包。人脸检测代码下面展示 人脸检测代码,首先,这里果粒叔饰演的纪晓岚的剧照作为检测对象。import cv2 as cvdef face_text(img): # 灰度处理 gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) # 加载特征(需要opencv的资源包) facec = cv.CascadeCl...

文章简要

本文简单介绍使用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()#释放内存

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

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