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

Python+opencv学习笔记之人脸视频采集及实时检测(树莓派3B+下检测)

程序员文章站 2022-03-23 17:01:50
...

实验目标:
1.首先通过opencv编程写一个可以调用摄像头并且能将摄像头捕捉到的内容进行保存。
2.将视频文件发送到我们的树莓派上,然后再利用Python编写程序对视频进行人脸识别处理,最后将人脸识别后的视频保存。
3.对某一张图片进行处理,让其具有毛玻璃效果,并将处理后的图片保存。
接下来就是实际的操作了
ps:一定要确保树莓派上的Python能够导入cv2这个模块,也就是你在交互式的环境下输出import cv2不会出现错误。最开始我就遇到了这个错误,后来查找解决方法发现是我的树莓派上有一些依赖库未安装。

这是在PyCharm上调用摄像头录制视频的程序
import cv2
if __name__ == '__main__':
    cap=cv2.VideoCapture(0)
    fourcc=cv2.VideoWriter_fourcc(*'XVID')
    out=cv2.VideoWriter('test001.avi',fourcc,20.0,(640,480))
    while cap.isOpened():
        ret,frame=cap.read()
        if ret==True:
            frame=cv2.flip(frame,1)
            out.write(frame)
            cv2.imshow('frame',frame)
            if cv2.waitKey(1)&0xff==ord('q'):
                break
    cap.release()
    out.release()
    cv2.destroyAllWindows()

录制视频后我们将视频传到树莓派上。(可以用TeamViewer直接传到指定文件夹下。如果是用的远程桌面连接或是其他没有上传文件的工具登录到树莓派上的话可以直接用U盘将视频拷到树莓派上)
**接下来我们还需要了解如何用Python对现有视频进行人脸识别。

这里可以参考python&opencv人脸识别及haarcascade_frontalface_alt2.xml文件下载

记下下载的xml文件所在的位置,可以直接放在.py文件所在的目录下。

接下来分享一下haarcascades—各种分类器xml文件下载地址
有关人脸识别的基本原理我也不知道怎么说,大家可以去看一些大神的博客,应该会有详解,这里我就直接开始识别操作了。

import cv2
import sys
if __name__ == '__main__':
    cascPath = "./haarcascade_frontalface_alt2.xml"
    faceCascade = cv2.CascadeClassifier(cascPath)
    cap = cv2.VideoCapture('test1.avi')
    fourcc = cv2.VideoWriter_fourcc(*'XVID')
    out = cv2.VideoWriter('test4.avi', fourcc, 20.0, (640, 480))
    while cap.isOpened():
        ret, frame = cap.read()
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        faces = faceCascade.detectMultiScale(
            gray,
            scaleFactor=1.1,
            minNeighbors=3,
            minSize=(30, 30),
            flags=cv2.ORB_HARRIS_SCORE
        )
        for (x, y, w, h) in faces:
            cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)//在人脸区域画出一个选框
        if ret == True:
            out.write(frame)
            cv2.imshow('frame', frame)
            if cv2.waitKey(1) & 0xff == ord('q'):
                break
    cap.release()
    out.release()
    cv2.destroyAllWindows()

完工。

相关标签: 学习