【计算机视觉】CV实战项目- COVID 社交距离检测(covid-social-distancing-detection)

COVID 社交距离检测(covid-social-distancing-detection)

        • 一、项目概述
        • 二、项目架构
        • 三、环境搭建
        • 四、运行项目
        • 五、输出结果
        • 六、常见问题及解决方法
            • [报错1. cv2.error: OpenCV(4.11.0) :-1: error: (-5:Bad argument) in function 'circle'](#报错1. cv2.error: OpenCV(4.11.0) :-1: error: (-5:Bad argument) in function 'circle')
            • [报错2 cv2.circle(bird_view_img, (pair[0][0],pair[0][1]), BIG_CIRCLE, COLOR_RED, 2)](#报错2 cv2.circle(bird_view_img, (pair[0][0],pair[0][1]), BIG_CIRCLE, COLOR_RED, 2))
            • [问题 3:缺少 `requirements.txt` 文件](#问题 3:缺少 requirements.txt 文件)
            • [问题 4:TensorFlow 模型下载失败](#问题 4:TensorFlow 模型下载失败)
            • [问题 5:校准过程中点选择错误](#问题 5:校准过程中点选择错误)
            • [问题 6:运行时出现 `ModuleNotFoundError`](#问题 6:运行时出现 ModuleNotFoundError)
        • 七、实战效果
        • 八、改进建议
一、项目概述

covid-social-distancing-detection 是一个基于深度学习的实时社交距离检测系统,旨在通过视频流检测人员之间的距离,以帮助减少 COVID-19 的传播。该项目使用 OpenCV 和 TensorFlow 实现,能够实时检测视频中人员的位置,并通过鸟瞰图(bird's-eye view)计算人员之间的距离,从而判断是否存在社交距离违规。

二、项目架构
  1. 对象检测:使用预训练的深度学习模型(如 YOLOv3 或 Faster R-CNN)检测视频帧中的人物。
  2. 透视变换:将视频帧转换为鸟瞰图,以便在 2D 平面上测量距离。
  3. 距离计算:计算人员之间的距离,并标记违反社交距离规则的人员对。
  4. 实时监控:对实时视频流进行处理,输出带有标记的视频帧。
三、环境搭建
  1. 安装 Python 库

    • 安装 OpenCV、TensorFlow 和其他依赖项:

      bash 复制代码
      pip install -r requirements.txt
  2. 下载预训练模型

    • 从 TensorFlow 模型库下载 Faster R-CNN Inception V2 COCO 模型:

      bash 复制代码
      wget http://download.tensorflow.org/models/object_detection/faster_rcnn_inception_v2_coco_2018_01_28.tar.gz
      tar -xvzf faster_rcnn_inception_v2_coco_2018_01_28.tar.gz
    • 将解压后的模型文件放在 models/ 目录下。

四、运行项目
  1. 校准
    • 运行校准脚本以确定视频帧的透视变换矩阵:

      bash 复制代码
      python calibrate_with_mouse.py
    • 输入视频文件名和帧大小(默认为 PETS2009.avi 和 800 像素)。

    • 按照提示在视频帧中选择四个点(右上、右下、左下、左上)。

  2. 启动社交距离检测
    • 运行检测脚本:

      bash 复制代码
      python social_distanciation_video_detection.py
    • 输入 TensorFlow 模型名称(默认为 faster_rcnn_inception_v2_coco_2018_01_28)、视频文件名(默认为 PETS2009.avi)和人员之间的最小距离(以像素为单位)。

五、输出结果
  • 处理后的视频帧将存储在 outputs/ 目录中。
  • 视频输出包括正常帧和鸟瞰图,违规的人员对将用红色框和红线标记。
六、常见问题及解决方法
报错1. cv2.error: OpenCV(4.11.0) 👎 error: (-5:Bad argument) in function 'circle'
复制代码
Traceback (most recent call last):
  File "X:\000Project\CVprojects\CVprojects\covid-social-distancing-detection\src\social_distanciation_video_detection.py", line 204, in <module>
    cv2.circle(bird_view_img, (x, y), BIG_CIRCLE, COLOR_GREEN, 2)
cv2.error: OpenCV(4.11.0) :-1: error: (-5:Bad argument) in function 'circle'
> Overload resolution failed:
>  - Can't parse 'center'. Sequence item with index 0 has a wrong type
>  - Can't parse 'center'. Sequence item with index 0 has a wrong type

解决方法

复制代码
# 确保 x 和 y 是整数
x = int(x)
y = int(y)
# 确保 bird_view_img 是有效的图像对象
if bird_view_img is not None:
    # 确保 BIG_CIRCLE 和 COLOR_GREEN 是有效的值
    BIG_CIRCLE = 20
    COLOR_GREEN = (0, 255, 0)
    cv2.circle(bird_view_img, (x, y), BIG_CIRCLE, COLOR_GREEN, 2)
else:
    print("Error: bird_view_img is not initialized properly.")
报错2 cv2.circle(bird_view_img, (pair[0][0],pair[0][1]), BIG_CIRCLE, COLOR_RED, 2)
复制代码
raceback (most recent call last):
  File "X:\000Project\CVprojects\CVprojects\covid-social-distancing-detection\src\social_distanciation_video_detection.py", line 226, in <module>
    change_color_on_topview(pair)
  File "X:\000Project\CVprojects\CVprojects\covid-social-distancing-detection\src\social_distanciation_video_detection.py", line 77, in change_color_on_topview
    cv2.circle(bird_view_img, (pair[0][0],pair[0][1]), BIG_CIRCLE, COLOR_RED, 2)
cv2.error: OpenCV(4.11.0) :-1: error: (-5:Bad argument) in function 'circle'
> Overload resolution failed:
>  - Can't parse 'center'. Sequence item with index 0 has a wrong type
>  - Can't parse 'center'. Sequence item with index 0 has a wrong type

解决方法

复制代码
def change_color_on_topview(pair):
    global bird_view_img, BIG_CIRCLE, SMALL_CIRCLE, COLOR_RED

    # 确保 x 和 y 是整数
    x1 = int(pair[0][0])
    y1 = int(pair[0][1])
    x2 = int(pair[1][0])
    y2 = int(pair[1][1])

    # 确保坐标值在有效范围内
    x1 = max(0, min(width - 1, x1))
    y1 = max(0, min(height - 1, y1))
    x2 = max(0, min(width - 1, x2))
    y2 = max(0, min(height - 1, y2))

    # 确保 bird_view_img 是有效的图像对象
    if bird_view_img is None:
        print("Error: bird_view_img is not initialized properly.")
        return

    # 确保 BIG_CIRCLE 和 SMALL_CIRCLE 是有效的值
    BIG_CIRCLE = 20
    SMALL_CIRCLE = 5
    COLOR_RED = (0, 0, 255)

    # 绘制四个圆
    cv2.circle(bird_view_img, (x1, y1), BIG_CIRCLE, COLOR_RED, 2)
    cv2.circle(bird_view_img, (x1, y1), SMALL_CIRCLE, COLOR_RED, -1)
    cv2.circle(bird_view_img, (x2, y2), BIG_CIRCLE, COLOR_RED, 2)
    cv2.circle(bird_view_img, (x2, y2), SMALL_CIRCLE, COLOR_RED, -1)
问题 3:缺少 requirements.txt 文件
  • 解决方法:确保从 GitHub 仓库克隆了完整的项目代码。
问题 4:TensorFlow 模型下载失败
  • 解决方法:检查网络连接,确保可以从 TensorFlow 模型库下载文件。
问题 5:校准过程中点选择错误
  • 解决方法:确保按照右上、右下、左下、左上的顺序选择点。
问题 6:运行时出现 ModuleNotFoundError
  • 解决方法:确保已安装所有必要的 Python 库,包括 OpenCV 和 TensorFlow。
七、实战效果

该项目能够实时检测视频流中人员之间的距离,并标记违反社交距离规则的人员对。这有助于在公共场所(如火车站、购物中心等)实时监控社交距离规则的遵守情况。

八、改进建议
  • 实时性能优化:进一步优化算法以提高实时处理速度。
  • 多摄像头支持:扩展系统以支持多个摄像头的输入。
  • 隐私保护:确保系统不存储敏感图像数据,仅保留统计信息。

通过上述步骤和建议,你可以成功运行并优化 covid-social-distancing-detection 项目,以应对 COVID-19 疫情中的社交距离监控需求。

相关推荐
宝贝儿好12 分钟前
【LLM】第三章:项目实操案例:智能输入法项目
人工智能·python·深度学习·算法·机器人
AI创界者24 分钟前
【首发】LTX-2.3-10Eros 视频生成本地化部署教程:8G显存流畅运行,支持RTX 50系列(附一键整合包)
人工智能
Elastic 中国社区官方博客29 分钟前
Elastic 的 AI agent skills
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索
容智信息33 分钟前
AI Agent(智能体)的输出格式应该从 Markdown 转向 HTML吗?
前端·人工智能·rust·编辑器·html·prompt
学习论之费曼学习法35 分钟前
AI 入门 30 天挑战 - Day 28 - 前沿技术概览
人工智能
陕西字符37 分钟前
2026 西安小微企业地图与 AI 问答排名优化:专业技术指南与落地方案
大数据·人工智能
TENSORTEC腾视科技1 小时前
腾视科技AI大模型应用:提效、破局与落地,重塑智能新生态
人工智能·科技·安全·ai·ai大模型·无人叉车及智能调度系统解决方案
阿里云大数据AI技术1 小时前
破解 AI 搜索“效果与成本”双重困境:阿里云 Elasticsearch 向量混合检索最佳实践揭秘
人工智能·elasticsearch
仙女修炼史1 小时前
视觉CNN常用基础技术来源:UberNet
人工智能·神经网络·cnn
ishangy1 小时前
皮带撕裂早期特征提取:AI摄像机+深度学习在港口的应用
人工智能·深度学习·智慧港口·港口皮带ai识别·皮带检测识别