基于OpenCV的视频人脸检测

前言

设备使用带摄像头的笔记本与下载好IP摄像头软件的手机

 Python版本为3.8

本人的OpenCV版本为4.5.1.48

本文人脸检测使用的是CV封装好的

haarcascade_frontalface_default.xml  和  haarcascade_eye.xml

分别是检测人脸和检测人眼的两个文件


一、使用步骤

1.引入库

首先导入OpenCv库,然后将下载好的haarcascade_frontalface_default.xml  和  haarcascade_eye.xml 放在和代码同一个目录下

import cv2
face_xml =cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_xml =cv2.CascadeClassifier('haarcascade_eye.xml')

2.调用摄像头

这里使用了两种摄像头打开方式:

第一种是笔记本自带的摄像头

第二种是手机充当摄像头

if __name__ == "__main__":

    # 调用笔记本自带摄像头
    # video_capture = cv2.VideoCapture(0)  # 调用笔记本自带摄像头

    #调用IP摄像头
    video = "http://admin:[email protected]:8081/video"
    video_capture = cv2.VideoCapture(video)

*此处的192.168.0.105:8081/video需要改为手机上IP摄像头提供的IP地址*

具体使用IP摄像头的方法可百度,下方链接供参考

https://www.cnblogs.com/suanai/p/14901290.html

3.使用文件进行检测

将其写入一个循环,设置退出条件,一直进行,达成视频效果

    while True:
        ret, draw = video_capture.read()

        # 人脸检测
        # 参数1.表示的是要检测的灰度图像
        # 参数2.表示图像缩放系数
        # 参数3.目标大小,人脸最小不得小于5peix
        faces = face_xml.detectMultiScale(draw, 1.3, 5)

        # 绘制方框
        # 参数1:需要绘制的数据
        # 参数2,绘制的起始坐标
        # 参数3,绘制的高度和宽度
        # 参数4,颜色
        # 参数5,线条宽度
        for (x, y, w, h) in faces:
            cv2.rectangle(draw, (x, y), (x + w, y + h), (255, 0, 0), 2)

        #眼睛检测
        eyes = eye_xml.detectMultiScale(draw, 1.2, 5)
        for (eye_x, eye_y, eye_w, eye_h) in eyes:
            cv2.rectangle(draw, (eye_x, eye_y), (eye_x + eye_w, eye_y + eye_h), (255, 255, 0), 3)

        #展示
        cv2.imshow('live camera', draw)
        # cv2.waitKey(100)
        #退出循环
        if cv2.waitKey(20) & 0xFF == ord('q'):
            break

4.完整代码

import cv2
face_xml =cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_xml =cv2.CascadeClassifier('haarcascade_eye.xml')

if __name__ == "__main__":

    # 调用笔记本自带摄像头
    # video_capture = cv2.VideoCapture(0)  # 调用笔记本自带摄像头

    #调用IP摄像头
    video = "http://admin:[email protected]:8081/video"
    video_capture = cv2.VideoCapture(video)



    while True:
        ret, draw = video_capture.read()

        # 人脸检测
        # 参数1.表示的是要检测的灰度图像
        # 参数2.表示图像缩放系数
        # 参数3.目标大小,人脸最小不得小于5peix
        faces = face_xml.detectMultiScale(draw, 1.3, 5)

        # 绘制方框
        # 参数1:需要绘制的数据
        # 参数2,绘制的起始坐标
        # 参数3,绘制的高度和宽度
        # 参数4,颜色
        # 参数5,线条宽度
        for (x, y, w, h) in faces:
            cv2.rectangle(draw, (x, y), (x + w, y + h), (255, 0, 0), 2)

        #眼睛检测
        eyes = eye_xml.detectMultiScale(draw, 1.2, 5)
        for (eye_x, eye_y, eye_w, eye_h) in eyes:
            cv2.rectangle(draw, (eye_x, eye_y), (eye_x + eye_w, eye_y + eye_h), (255, 255, 0), 3)

        #展示
        cv2.imshow('live camera', draw)
        # cv2.waitKey(100)
        #退出循环
        if cv2.waitKey(20) & 0xFF == ord('q'):
            break

总结

本人第一次尝试的视频流的人脸检测尝试,分享供给大家参考

你可能感兴趣的:(python,opencv,人脸识别)