当前位置: 首页 > news >正文

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

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

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

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

import cv2 as cv

def 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:
        break
    face_detect_demo(frame)
    if ord('q') == cv.waitKey(1):
        break

cv.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:
        break
    face_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:帧

相关文章:

  • Docker 部署 MongoDB | 国内阿里镜像
  • 大模型Deepseek的使用_基于阿里云百炼和Chatbox
  • 全面解析鸿蒙(HarmonyOS)开发:从入门到实战,构建万物互联新时代
  • rabbitmq详解
  • VLLM历次会议(2024.4)
  • vue2老版本 npm install 安装失败_安装卡主
  • 【PL/SQL】常用操作复习20250212
  • 大型语言模型的核心机制解析
  • 随着人们网络安全意识提高,软件架构设计与评估也成为重中之重
  • 新一代SCADA: 宏集Panorama Suite 2025 正式发布,提供更灵活、符合人体工学且安全的应用体验
  • 【工业安全】-CVE-2019-17621-D-Link Dir-859L 路由器远程代码执行漏洞
  • 美团一面,有点难度。
  • verilog练习:i2c slave 模块设计
  • zyNo.22
  • Ansible内置模块之file
  • 从零搭建:Canal实时数据管道打通MySQL与Elasticsearch
  • 在大型语言模型(LLM)框架内Transformer架构与混合专家(MoE)策略的概念整合
  • 数据结构(5)
  • DeepSeek 的含金量还在上升
  • 2025年3月一区SCI-混沌进化优化算法Chaotic evolution optimization-附Matlab免费代码
  • 女外交官郑璇已任中国驻莫桑比克大使
  • 重庆市委原常委、政法委原书记陆克华被决定逮捕
  • 工人日报:“鼠标手”被纳入职业病,劳动保障网越织越密
  • 韩国总统选战打响:7人角逐李在明领跑,执政党临阵换将陷入分裂
  • A股高开高走:沪指涨0.82%,创指涨2.63%,超4100股收涨
  • 国家统计局今年将在全国开展两次人口固定样本跟访调查