用Python和OpenCV库实现识别人物出现并锁定

简介: 用Python和OpenCV库实现识别人物出现并锁定

1. 安装必要的库

首先,确保您已安装以下库:

  • OpenCV: 用于图像处理和计算机视觉任务
  • imutils: 提供一些实用函数,如图像旋转、裁剪等

安装方法如下:

pip install opencv-python
pip install imutils

2. 加载和显示视频

首先,我们需要导入所需的库,并加载一个视频文件。我们将使用OpenCVVideoCapture类来加载视频。

import cv2
import imutils
video_path = "path/to/your/video.mp4"
# 打开视频
cap = cv2.VideoCapture(video_path)
while True:
    ret, frame = cap.read()
    if not ret:
        break
    # 缩放以提高处理速度
    frame = imutils.resize(frame, width=600)
    cv2.imshow("Input Video", frame)
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break
cap.release()
cv2.destroyAllWindows()

3. 应用预训练的人物检测模型

接下来,我们将使用OpenCV中提供的预训练模型。这里我们使用MobileNet-SSD模型,因为它在速度和准确性之间达到了很好的平衡。

prototxt_path = "path/to/your/MobileNetSSD_deploy.prototxt"
model_path = "path/to/your/MobileNetSSD_deploy.caffemodel"
# 加载预训练模型
net = cv2.dnn.readNetFromCaffe(prototxt_path, model_path)

4. 在检测到的人物周围绘制边界框

现在,我们将使用预训练的模型来检测视频中的人物,并在检测到的人物周围绘制边界框。

# 设置置信度阈值
confidence_threshold = 0.5
while True:
    ret, frame = cap.read()
    if not ret:
        break
    frame = imutils.resize(frame, width=600)
    (h, w) = frame.shape[:2]
    # 将图像转换为blob
    blob = cv2.dnn.blobFromImage(frame, 0.007843, (w, h), 127.5)
    net.setInput(blob)
    detections = net.forward()
    for i in range(detections.shape[2]):
        confidence = detections[0, 0, i, 2]
        if confidence > confidence_threshold:
            idx = int(detections[0, 0, i, 1])
            if idx == 15:  # 15 代表人类
                box = detections[0, 0, i, 3:7] * np.array([w, h, w, h])
                (startX, startY, endX, endY) = box.astype("int")
                # 在检测到的人物周围绘制边界框
                cv2.rectangle(frame, (startX, startY), (endX, endY), (0, 255, 0), 2)
    cv2.imshow("Input Video", frame)
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

5. 保存和显示结果

最后,我们将处理后的视频保存到磁盘,并在程序完成后关闭所有窗口。

# 创建 VideoWriter 对象以保存处理后的视频
fourcc = cv2.VideoWriter_fourcc(*"mp4v")
out = cv2.VideoWriter("output.mp4", fourcc, 30, (w, h))
while True:
    ret, frame = cap.read()
    if not ret:
        break
    frame = imutils.resize(frame, width=600)
    (h, w) = frame.shape[:2]
    blob = cv2.dnn.blobFromImage(frame, 0.007843, (w, h), 127.5)
    net.setInput(blob)
    detections = net.forward()
    for i in range(detections.shape[2]):
        confidence = detections[0, 0, i, 2]
        if confidence > confidence_threshold:
            idx = int(detections[0, 0, i, 1])
            if idx == 15:
                box = detections[0, 0, i, 3:7] * np.array([w, h, w, h])
                (startX, startY, endX, endY) = box.astype("int")
                cv2.rectangle(frame, (startX, startY), (endX, endY), (0, 255, 0), 2)
    # 将帧写入输出视频
    out.write(frame)
    cv2.imshow("Input Video", frame)
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break
cap.release()
out.release()
cv2.destroyAllWindows()

总结:

现在,您应该已经成功地创建了一个可以识别人物出现并将其锁定的项目。通过运行此代码,您将能够在给定的视频中检测到人物,并在检测到的人物周围绘制边界框。此外,该程序将处理后的视频保存到磁盘,以便您以后查看。

本教程展示了如何使用Python和OpenCV库构建一个简单的人物识别和锁定项目。您可以在此基础上进行扩展,以满足您的特定需求。例如,您可以尝试:

  1. 使用其他预训练模型,以提高识别准确性或降低计算复杂性。
  2. 为检测到的人物添加标签,例如显示置信度分数或人物ID。
  3. 跟踪检测到的人物在视频中的移动轨迹。
  4. 将此项目扩展为实时人物识别系统,通过摄像头实时监控人物出现。
目录
相关文章
|
2月前
|
存储 人工智能 测试技术
如何使用LangChain的Python库结合DeepSeek进行多轮次对话?
本文介绍如何使用LangChain结合DeepSeek实现多轮对话,测开人员可借此自动生成测试用例,提升自动化测试效率。
438 125
如何使用LangChain的Python库结合DeepSeek进行多轮次对话?
|
2月前
|
监控 数据可视化 数据挖掘
Python Rich库使用指南:打造更美观的命令行应用
Rich库是Python的终端美化利器,支持彩色文本、智能表格、动态进度条和语法高亮,大幅提升命令行应用的可视化效果与用户体验。
212 0
|
7月前
|
JavaScript 前端开发 Java
通义灵码 Rules 库合集来了,覆盖Java、TypeScript、Python、Go、JavaScript 等
通义灵码新上的外挂 Project Rules 获得了开发者的一致好评:最小成本适配我的开发风格、相当把团队经验沉淀下来,是个很好功能……
1397 103
|
4月前
|
存储 Web App开发 前端开发
Python + Requests库爬取动态Ajax分页数据
Python + Requests库爬取动态Ajax分页数据
|
1月前
|
数据可视化 关系型数据库 MySQL
【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
本文详解基于Python的电影TOP250数据可视化大屏开发全流程,涵盖爬虫、数据存储、分析及可视化。使用requests+BeautifulSoup爬取数据,pandas存入MySQL,pyecharts实现柱状图、饼图、词云图、散点图等多种图表,并通过Page组件拖拽布局组合成大屏,支持多种主题切换,附完整源码与视频讲解。
218 4
【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
|
1月前
|
传感器 运维 前端开发
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
本文解析异常(anomaly)与新颖性(novelty)检测的本质差异,结合distfit库演示基于概率密度拟合的单变量无监督异常检测方法,涵盖全局、上下文与集体离群值识别,助力构建高可解释性模型。
304 10
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
|
3月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
234 18
|
4月前
|
JSON 网络安全 数据格式
Python网络请求库requests使用详述
总结来说,`requests`库非常适用于需要快速、简易、可靠进行HTTP请求的应用场景,它的简洁性让开发者避免繁琐的网络代码而专注于交互逻辑本身。通过上述方式,你可以利用 `requests`处理大部分常见的HTTP请求需求。
489 51
|
3月前
|
机器学习/深度学习 API 异构计算
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
JAX是Google开发的高性能数值计算库,旨在解决NumPy在现代计算需求下的局限性。它不仅兼容NumPy的API,还引入了自动微分、GPU/TPU加速和即时编译(JIT)等关键功能,显著提升了计算效率。JAX适用于机器学习、科学模拟等需要大规模计算和梯度优化的场景,为Python在高性能计算领域开辟了新路径。
378 0
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
|
3月前
|
数据采集 存储 Web App开发
Python爬虫库性能与选型实战指南:从需求到落地的全链路解析
本文深入解析Python爬虫库的性能与选型策略,涵盖需求分析、技术评估与实战案例,助你构建高效稳定的数据采集系统。
364 0

推荐镜像

更多