使用opencv进行人脸检测(图片&实时)

■ 人脸检测(图片)

原图像:
在这里插入图片描述
        在使用OpenCV的人脸检测之前,需要一个人脸训练模型,格式是xml的,我们这里使用OpenCV提供好的人脸分类模型xml,下载地址:https://github.com/opencv/opencv/tree/master/data/haarcascades, 可全部下载到本地。

代码:

import cv2

# 读取图片
img = cv2.imread("image.jpg")

# 导入人脸级联分类器引擎,‘xml’文件中包含训练出来的人脸特征
face_engine = cv2.CascadeClassifier("opencv-master\data\haarcascades\haarcascade_frontalface_default.xml")
# 转为灰度图,加快检测速度
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 用人脸级联分类器引擎进行人脸识别,返回的faces为人脸坐标列表,1.3是放大比例,5是重复次数(越大精确度越高)
faces = face_engine.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5, minSize=(32, 32))


# 大于0则检测到人脸
if len(faces):
    # 循环每一张人脸
    for face in faces:
        # (x,y)是左下角坐标,w和h是宽和高
        x, y, w, h = face
        # 画出人脸框,绿色(BGR色彩体系),画笔宽度为2
        cv2.rectangle(img, (x, y), (x + h, y + w), (0,255,0), 2)

 # 在"image"窗口中展示效果图
cv2.imshow("image", img)

# 监听键盘上的任何按键,如有按键即退出并关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

# 将图片保存为output.jpg
cv2.imwrite("output.jpg", img)

输出图像:
在这里插入图片描述

■ 实时人脸检测(调用摄像头)

代码:

import cv2

# 获取摄像头
cap = cv2.VideoCapture()

# 打开cap,传入0表示获取系统默认摄像头
cap.open(0)

# 导入人脸级联分类器引擎,‘xml’文件中包含训练出来的人脸特征
face_engine = cv2.CascadeClassifier("opencv-master\data\haarcascades\haarcascade_frontalface_default.xml")

while cap.isOpened():
    # 获取摄像头拍摄到的画面
    # cap.read()返回两个参数。flag:值为true或false,表示获取画面成功或失败, frame:获取到的画面是三维数组
    flag, frame = cap.read()

    # 用人脸级联分类器引擎进行人脸识别,返回的faces为人脸坐标列表,1.3是放大比例,5是重复次数(越大精确度越高)
    faces = face_engine.detectMultiScale(frame, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))
    
    for face in faces:
        x,y,w,h = face
        # 画出人脸框,绿色(BGR色彩体系),画笔宽度为2
        frame = cv2.rectangle(frame, (x,y), (x+w,y+h), (0,255,0), 2)

    # 实时展示效果画面
    cv2.imshow("my_window", frame)

    # 每5毫秒监听一次键盘动作,按q键结束
    if cv2.waitKey(5) & 0xFF == ord("q"):
        break

# 关闭摄像头
cap.release()
# 关闭所有窗口
cv2.destroyAllWindows()

– 以上代码可复制粘贴直接运行。

猜你喜欢

转载自blog.csdn.net/Roaddd/article/details/112041231