python+opencv+百度智能云 人脸识别——视频人脸锁定

一.设计思路
1.导入模块

import sys
import cv2

sys模块:该模块提供对解释器使用或维护的一些变量的访问,以及与解释器强烈交互的函数。
cv2模块:opencv接口模块

2.读取视频

def videocapture():
    cap = cv2.VideoCapture(0)  # 生成读取摄像头对象
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))  # 获取视频的宽度
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))  # 获取视频的高度
    fps = cap.get(cv2.CAP_PROP_FPS)  # 获取视频的帧率
    fourcc = int(cap.get(cv2.CAP_PROP_FOURCC))  # 视频的编码
    # 定义视频对象输出
    writer = cv2.VideoWriter("video_result.mp4", fourcc, fps, (width, height))
    while cap.isOpened():
        ret, frame = cap.read()  # 读取摄像头画面
        cv2.imshow('teswell', frame)  # 显示画面
        key = cv2.waitKey(24)
        writer.write(frame)  # 视频保存
        # 按Q退出
        if key == ord('q'):
            break
    cap.release()  # 释放摄像头
    cv2.destroyAllWindows()  # 释放所有显示图像窗口

如果本地没视频的话,用这个函数调用自己的摄像头,并录制一段视频,保存下来,如果有本地视频,后面主函数中可以把这个函数注释掉,用本地视频

3.人脸检测

def CatchUsbVideo(window_name, camera_idx):
    cv2.namedWindow(window_name)

    # 视频来源,可以来自一段已存好的视频,也可以直接来自USB摄像头
    cap = cv2.VideoCapture("video.mp4")

    # 告诉OpenCV使用人脸识别分类器
    #classfier = cv2.CascadeClassifier(r"./haarcascade_frontalface_alt2.xml")
    classfier = cv2.CascadeClassifier(r"F:\OpenCV\opencv\sources\data\haarcascades\haarcascade_frontalface_default.xml")


    # 识别出人脸后要画的边框的颜色,RGB格式
    color = (0, 255, 0)

    while cap.isOpened():
        ok, frame = cap.read()  # 读取一帧数据
        if not ok:
            break

        # 将当前帧转换成灰度图像
        grey = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

        # 人脸检测,1.2和2分别为图片缩放比例和需要检测的有效点数
        faceRects = classfier.detectMultiScale(grey, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))
        if len(faceRects) > 0:  # 大于0则检测到人脸
            for faceRect in faceRects:  # 单独框出每一张人脸
                x, y, w, h = faceRect
                cv2.rectangle(frame, (x - 10, y - 10), (x + w + 10, y + h + 10), color, 2)

        # 显示图像
        cv2.imshow(window_name, frame)
        c = cv2.waitKey(10)
        if c & 0xFF == ord('q'):
            break

    # 释放摄像头并销毁所有窗口
    cap.release()
    cv2.destroyAllWindows()

这里需要注意,haarcascade_frontalface_alt2.xml文件的路径,在自己的安装路径里,在下图这个位置,记得替换为自己的路径
python+opencv+百度智能云 人脸识别——视频人脸锁定_第1张图片设置完人脸识别分类器,将视频一帧一帧转为图片,并进行灰度处理,调用函数进行人脸检测,框选,执行完将图片显示出来,最后释放摄像头

4.程序测试

if __name__ == '__main__':
    #videocapture()
    try:
        if len(sys.argv) != 1:
            print("Usage:%s camera_id\r\n" % (sys.argv[0]))
        else:
            CatchUsbVideo("识别人脸区域",0)
    except Exception as Error:
        print(Error)

主函数,调用上面所写函数进行测试

二.运行结果
python+opencv+百度智能云 人脸识别——视频人脸锁定_第2张图片结果还算满意
唯一问题是,最后显示名称因为是中文,会出现如图乱码,暂时不知道解决方案

三.总结

本设计需要注意的是:
1.是否需要调用本地摄像头,如果不用,本地应该有需要检测的视频(我试了下,gif也可以)
2.haarcascade_frontalface_alt2.xml文件路径要设置好

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