600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Jetson Xavier NX使用yolov5+deepsort实现CSI摄像头的目标跟踪

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

时间:2024-04-12 22:19:16

相关推荐

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

文章目录

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

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

安装过程

下载安装包:git clone /mikel-brostrom/Yolov5_DeepSort_Pytorch.git由于在上一篇文章Jetson Xavier NX使用Yolov5+DeepStream+TensorRT实现CSI摄像头的目标识别及采坑记录中, 已经安装过了torch和torchvision, 因此, 只要下载权重文件即可运行参考这一篇文章: 基于YOLOv5和DeepSort的目标跟踪, 下载deepsort的权重文件ckpt.t7, 并放置在deep_sort/deep/checkpoint文件夹下, 而yolov5的权重文件放置在yolov5/weights文件夹下下载图示的文件, 然后解压到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-8import cv2def 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'): breakcap.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 streamprint(f'{i + 1}/{n}: {s}... ', end='')if '/' in s or 'youtu.be/' in s: # if source is YouTube videocheck_requirements(('pafy', 'youtube_dl'))import pafys = pafy.new(s).getbest(preftype="mp4").url # YouTube URLs = eval(s) if s.isnumeric() else s # i.e. s = '0' local webcamif 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’

参考文章: /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摄像头的目标识别及采坑记录

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。