欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 建筑兔零基础自学python记录18|实战人脸识别项目——视频检测07

建筑兔零基础自学python记录18|实战人脸识别项目——视频检测07

2025/2/13 12:02:54 来源:https://blog.csdn.net/tzcnancy/article/details/145586615  浏览:    关键词:建筑兔零基础自学python记录18|实战人脸识别项目——视频检测07

   本次要学视频检测,我们先回顾一下图片的人脸检测建筑兔零基础自学python记录16|实战人脸识别项目——人脸检测05-CSDN博客

    我们先把上文中代码复制出来,保留红框的部分。

 然后我们来看一下源代码:

import cv2 as cvdef face_detect_demo(img):gary = cv.cvtColor(img,cv.COLOR_BGR2GRAY)face_detect = cv.CascadeClassifier('M:/python/pythoninstall/Lib/site-packages/cv2/data/haarcascade_frontalface_alt.xml')face = face_detect.detectMultiScale(gary)for x,y,w,h in face:cv.rectangle(img,(x,y),(x+w,y+h),color=(0,0,255),thickness=2)cv.imshow('result',img)#读取摄像头
cap = cv.VideoCapture(0)
#循环
while True:flag,frame = cap.read()if not flag:breakface_detect_demo(frame)if ord('q') == cv.waitKey(1):breakcv.destroyAllWindows()#释放摄像头
cap.release()

依次进行解读:

(1)cv.VideoCapture()

      可以接受一个参数,用于指定视频源:

  • 整数类型:表示摄像头设备的编号,从 0 开始。例如,cv.VideoCapture(0) 表示打开默认的摄像头。
  • 字符串类型:表示本地视频文件的路径或网络视频流的 URL。例如,cv.VideoCapture('video.mp4') 表示打开名为 video.mp4 的本地视频文件。
#举例:
#(1)导入视频路径
cap = cv.VideoCapture('http://example.com/stream.m3u8')
cap = cv.VideoCapture('path/to/your/video.mp4')
#(2)导入摄像头
cv.VideoCapture(0)

 (2)flag,frame=cap.read()

   从指定的视频源(可以是摄像头、本地视频文件或者网络视频流)中读取一帧图像

         每次调用时它会尝试从视频源中获取当前的视频帧,并将其作为一个图像对象返回。

该方法返回两个值,通过元组解包的方式分别赋值给 flagframe

flag:一个布尔类型的值,用于指示是否成功读取到视频帧

           如果成功读取到帧,flag 的值为 True

           如果失败(例如视频结束、视频源断开连接等情况),flag 的值为 False

frame:一个 NumPy 数组,表示读取到的视频帧图像。

            该数组的形状通常为 (高度, 宽度, 通道数),通道数一般为 3(代表 RGB 三个颜色通道),图像的像素值范围通常是 0 到 255。

补充:在这里我们会发现flag,frame两个值不是写在括号里的,反而是在=之前的。这和我们之前熟悉的cv.cvtColor(img,cv.COLOR_BGR2GRAY)这样括号里的写法有什么区别呢?

括号里的值=x,例如数学里见过的sin(x)。

    所以 cv.cvtColor(img,cv.COLOR_BGR2GRAY)中我们可理解为:    x1=img,x2=cv.COLOR_BGR2GRAY

等于号左边的值=y,例如数学里见过的y=sin(x)

 所以flag,frame=cap.read()我们可理解为:

y1=flag,y2=frame

(3)解读循环代码

#本次视频识别代码
while True:flag,frame = cap.read()if not flag:breakface_detect_demo(frame)if ord('q') == cv.waitKey(1):break#对比:之前图像识别代码
while True:if ord('q') == cv.waitKey(0):break

     对比之后可以看到增加的代码主要是关于flag和frame的,其中flag:读帧与否,frame:帧。这一段代码其实执行了两个循环命令,即下图中的蓝框和红框。

     由此可以看到两个循环:

    1.持续读帧

    2.对帧检测人脸

    在这段循环中还有两个调用,如下图:

   1.调用摄像头

   2.调用人脸识别参数

    综上我们可以对整个代码有了整体的结构掌握:

 让我们打开屏幕摄像头试试~

 可以看到已经可以识别屏幕中手机中的人脸照片了,并且随着移动可以动态识别。

   接着我们尝试导入一段视频试一下~

首先获取一段视频,然后保存到py的workspace

将路径输入代码,运行即可。

 可以看到成功识别了节目中的人物~可以点击视频进行观看~

人脸识别测试

(4)总结:

cv.VideoCapture()视频路径

flag,frame=cap.read()读取视频,flag:读帧与否,frame:帧

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com