Jetson Xavier NX使用yolov5+deepsort实现CSI摄像头的目标跟踪

2023-05-16

文章目录

  • 安装过程
  • 运行效果
  • 用python代码来打开CSI摄像头
  • 实现CSI摄像头目标跟踪
  • 报错: AttributeError: 'NoneType' object has no attribute 'shape'
  • 运行效果

参考文章: 基于YOLOv5和DeepSort的目标跟踪

安装过程

  1. 下载安装包: git clone https://github.com/mikel-brostrom/Yolov5_DeepSort_Pytorch.git
  2. 由于在上一篇文章Jetson Xavier NX使用Yolov5+DeepStream+TensorRT实现CSI摄像头的目标识别及采坑记录中, 已经安装过了torch和torchvision, 因此, 只要下载权重文件即可运行
  3. 参考这一篇文章: 基于YOLOv5和DeepSort的目标跟踪, 下载deepsort的权重文件ckpt.t7, 并放置在deep_sort/deep/checkpoint文件夹下, 而yolov5的权重文件放置在yolov5/weights文件夹下
  4. 下载图示的文件, 然后解压到yolov5的文件夹下即可 (这个可以自动下载yolov5的权重文件)

在这里插入图片描述


运行效果

运行指令:
python3 track.py --source /opt/nvidia/deepstream/deepstream-5.0/samples/streams/sample_1080p_h264.mp4 --show-vid
说明: 在Jetson Xavier NX下, 运行的速度大概在每帧图片0.05秒的样子, 速度还是比较快的

请添加图片描述

用python代码来打开CSI摄像头

新建一个test_csi.py文件, 然后使用python3 test_csi.py来运行下面的程序, 启动CSI摄像头

# coding=utf-8
import cv2
 

def show_camera():
    cap = cv2.VideoCapture("nvarguscamerasrc ! video/x-raw(memory:NVMM), width=1280, height=720, format=(string)NV12, framerate=(fraction)60/1 ! nvvidconv flip-method=0 ! video/x-raw, width=1280, height=720, format=(string)BGRx ! videoconvert ! video/x-raw, format=(string)BGR ! appsink", cv2.CAP_GSTREAMER)
 
    while cap.isOpened():
        flag, img = cap.read()
        cv2.imshow("CSI Camera", img)
        kk = cv2.waitKey(1)
        if kk == ord('q'):  
            break
 
    cap.release()
    cv2.destroyAllWindows()
    
 
if __name__ == "__main__":
    show_camera()

问题: 程序运行之后不报错, 但是没有打开摄像头的界面, 且没有任何输出;

解决方案:

  • 先查看python3对应的opencv版本:
  • python3 -c "import cv2; print(cv2.__version__)"
  • 我一开始的版本是4.5.3, 改为3.3.1的版本就可以了
  • 因此: 用python3 -c "import cv2; print(cv2.__file__)"查看4.5.3的安装路径, 然后直接删除即可 (需确保已经安装过3.3.1版本)

实现CSI摄像头目标跟踪

当用上面的程序可以正常地打开摄像头后, 为了用CSI摄像头实现目标跟踪, 需要将 yolov5/utils/dataset.py文件进行更改, 主要就是将cv2.VideoCapture(0)改为:

cap = cv2.VideoCapture("nvarguscamerasrc ! video/x-raw(memory:NVMM), width=1280, height=720, format=(string)NV12, framerate=(fraction)60/1 ! nvvidconv flip-method=0 ! video/x-raw, width=1280, height=720, format=(string)BGRx ! videoconvert ! video/x-raw, format=(string)BGR ! appsink", cv2.CAP_GSTREAMER)

请添加图片描述

这里为了方便, 给出修改的部分dataset.py文件

for i, s in enumerate(sources):  # index, source
    # Start thread to read frames from video stream
    print(f'{i + 1}/{n}: {s}... ', end='')
    if 'youtube.com/' in s or 'youtu.be/' in s:  # if source is YouTube video
        check_requirements(('pafy', 'youtube_dl'))
        import pafy
        s = pafy.new(s).getbest(preftype="mp4").url  # YouTube URL
    s = eval(s) if s.isnumeric() else s  # i.e. s = '0' local webcam
    
    if s == 0:
        print('\nthis is a CSI camera')
        cap = cv2.VideoCapture("nvarguscamerasrc ! video/x-raw(memory:NVMM), width=1280, height=720, format=(string)NV12, framerate=(fraction)60/1 ! nvvidconv flip-method=0 ! video/x-raw, width=1280, height=720, format=(string)BGRx ! videoconvert ! video/x-raw, format=(string)BGR ! appsink", cv2.CAP_GSTREAMER)
    else:
        cap = cv2.VideoCapture(s)

    assert cap.isOpened(), f'Failed to open {s}'

报错: AttributeError: ‘NoneType’ object has no attribute ‘shape’

请添加图片描述

参考文章: https://blog.csdn.net/weixin_42899627/article/details/115129085

解决方案: 重启 nvargus-daemon

sudo systemctl restart nvargus-daemon

运行效果

由于模型推理速度和准确性之间存在影响, 为了满足推理速度和准确性的需求, 可以选择 Yolov5 合适的模型进行自动下载
执行指令:
python3 track.py --source 0 --yolo_weights yolov5s.pt --img 640 --show-vid       (最小的模型)
python3 track.py --source 0 --yolo_weights yolov5x6.pt --img 1280 --show-vid   (最大的模型)

说明一下:

  • 用yolov5s.pt的话 (最小14.8MB) 大约为20帧每秒
  • 使用yolov5x.pt (178.5MB) 大约9~10帧每秒
  • 而使用yolov5x6.pt (284.5MB) 大约就只有3~4帧每秒了, 且运行比较卡顿
  • 下面的图片, 我采用的是yolov5s.pt这个权重文件
  • 另外, 用CSI摄像头检测的效果没有检测mp4文件的效果好

请添加图片描述



上一篇文章: Jetson Xavier NX使用Yolov5+DeepStream+TensorRT实现CSI摄像头的目标识别及采坑记录

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jetson Xavier NX使用yolov5+deepsort实现CSI摄像头的目标跟踪 的相关文章

随机推荐

  • java的几种IO

    Java IO方式大体上可以分为三类 xff0c 基于不同的io模型可以简单分为同步阻塞的BIO 同步非阻塞的NIO和异步非阻塞的AIO IO又主要可以分为文件IO和网络IO 针对Java的网络IO模型 xff0c 可以看网络IO模型 xf
  • 哈希冲突和一致性哈希

    文章目录 哈希冲突处理哈希冲突1 开放地址法2 再散列法3 链地址法4 建立一个公共溢出区 一致性哈希普通 hash算法普通 hash 算法的缺陷 一致性哈希算法一致性 hash 算法的优点hash 环的倾斜与虚拟节点 哈希冲突 哈希函数又
  • Redis IO多路复用理解

    IO多路复用在Redis中的应用 Redis 服务器是一个事件驱动程序 xff0c 服务器处理的事件分为时间事件和文件事件两类 文件事件 xff1a Redis主进程中 xff0c 主要处理客户端的连接请求与相应 时间事件 xff1a fo
  • 分布式理论CAP,BASE

    什么是CAP理论 xff1f CAP理论指的是一个分布式系统最多只能同时满足一致性 xff08 Consistency xff09 可用性 xff08 Availability xff09 和分区容错性 xff08 Partition to
  • javaEE接收request参数以及输出结果到html页面

    1 引入需要的类 这里需要注意 xff0c servlet类不是jre自带的 xff0c 需要自己添加 添加相关类主要有以下两种方式 xff1a 下载servlet api jar xff08 tomcat自带 xff09 然后添加到cla
  • 西门子博途数据块(DB块)快速导入导出

    有些人可能会想用查表法计算CRC校验码 查表法效率和速度都很高 但是空间换时间 让你用几秒钟时间 把一张完整的表存入博途里 就算了你单身20年的手速估计也完成不了 想要几秒钟完成也不是不可以 就是导入别人的源文件 拿来主义当然块 继续上图
  • opencv4.0学习笔记

    目录 课程来源 xff1a 哔哩哔哩大学 第一节课 显示第一张图片 环境配置了一个早上 xff0c 到10 48分配置完毕 xff0c 有点难受 还好最后显示出第一张图片 include span class token operator
  • 程序人生

    http zhan renren com itonline from 61 template amp checked 61 true
  • 传感器的使用(一)-火焰传感器

    火焰传感器的介绍 1 工作电压 xff1a DC 3 3V 5V 2 灵敏度可调 xff08 可调电位器 xff09 3 工作温度 xff1a xff0d 10 xff0b 50 4 设有固定螺铨孔 xff0c 方便安装 5 探测角度 60
  • 传感器的使用(二)-温湿度传感器DHT11(HAL库实现)

    温湿度传感器的介绍 DHT11技术性能特征 工作电压范围 xff1a 3 3V 5 5V 工作电流 xff1a 平均0 5mA 输出 xff1a 单总线数字信号 测量范围 xff1a 湿度20 90 xff05 RH xff0c 温度0 5
  • Makefile详解及使用

    内容来自大丙老师的blog Makefile简介 linux环境下 xff0c 当用户编译文件过多的时候 xff0c 使用makefile可以帮助模块化编译文件 xff0c makefile是一个脚本文件 xff0c 根据规则 xff0c
  • QT绘制实时动态曲线——qcustomplot使用(二)

    在QT绘制实时动态曲线 qcustomplot使用 xff08 一 xff09 中 xff0c 介绍使用官方的demo实现动态实时曲线 官方代码移植 针对动态显示数据项目要求 xff0c 移植官方代码demo 开启绘图的函数 span cl
  • QT的多种功能使用记录

    设置控件的边角为圆角 xff1a border top left radius 设置左上角圆角 border top right radius 设置右上角圆角 border bottom left radius 设置左下角圆角 border
  • MYSQL之视图的使用

    视图的使用 使用视图的好处 1 简化select的字段 xff0c 方便管理 2 可以针对不同用户 xff0c 对视图进行不同的查看 也就是说可以做权限管理 3 视图的语法 CREATE VIEW MYTEST AS select 列车号
  • 模糊PID之matlab模糊控制器配置

    前言 使用模糊PID时 xff0c 需要对工具库进行配置 xff0c 模糊PID是由2个输入个3个输出组成 xff0c 输出是E和Ec xff0c 输出是Kp Ki和Kd 打开matlab后 xff0c 需要配置 MATLAB模糊配置 1
  • java url后面带sessionid_url中jsessionid的理解

    1 这是一个保险措施 因为Session默认是需要Cookie支持的 但有些客户浏览器是关闭Cookie的 这个时候就需要在URL中指定服务器上的session标识 也就是5F4771183629C9834F8382E23BE13C4C 用
  • stm32简介+gpio的C语言封装

  • 一些post请求和get请求的调用例子

    目录 post请求 1 http请求 无请求参数 请求包格式为application json 请求包包含若干字段 get请求 1 http请求 响应类型application zip 请求结果为下载一个zip的压缩文件 解压下载的压缩包
  • 80个Python经典资料(教程+源码+工具)汇总——下载目录

    大家好 xff0c 51CTO下载中心根据资料的热度和好评度收集了80个Python资料 xff0c 分享给Python开发的同学 内容包括1个Python专题 66个学习资料 7套Python源码和6个相关软件 附件较多 xff0c 无法
  • Jetson Xavier NX使用yolov5+deepsort实现CSI摄像头的目标跟踪

    文章目录 安装过程运行效果用python代码来打开CSI摄像头实现CSI摄像头目标跟踪报错 AttributeError 39 NoneType 39 object has no attribute 39 shape 39 运行效果 参考文