Skip to content

CDR x86 docker镜像使用及测试教程

jianyang edited this page Jul 20, 2022 · 7 revisions

一、CDR-x86-docker镜像使用及测试教程:

(备注):强烈推荐使用docker pull拉取镜像,有问题可联系微信群主(17370042325),x_86版本的镜像需配合安培(Ampere)架构NVIDIA显卡使用(30系列显卡均属安培架构),需先在x_86宿主机上安装显卡驱动。

1.根据如下链接下载CDR-v4.0.tar镜像文件:

  • 链接:http://112.74.111.51:1212/down/Dcyn8UvJ81Lg 提取码:Z78Din,如下图: 在这里插入图片描述

2.将下载的CDR-v4.0.tar镜像文件导入docker:

(备注):在镜像导入docker前,需在ubuntu_x86平台安装dockernvidia-docker2,可参考如下链接: ubuntu安装docker ubuntu安装nvidia-docker2

  • 在镜像文件所在目录下,右键打开终端命令行

  • 运行docker镜像加载命令(大致需5分钟左右加载完成):

    docker load -i CDR-v4.0.tar

    -(备注): 若使用docker pull拉取的镜像,以上步骤省略!!!

    • 加载完成后可通过在终端输入docker images查看已加载的镜像,如下图: 在这里插入图片描述
  • 在终端输入以下命令创建CDR-x86容器:

    • 命令如下:

    sudo docker run -it --net=host --device=/dev/video0 -e QT_X11_NO_MITSHM=1 --gpus '"'device=0'"' --name="guo02" --privileged=true -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY -w /opt/nvidia/deepstream/deepstream-6.0 cv-detect-robot:v4.02 /bin/bash

    • 指令解释:

      --net=host -----------------------------生成的容器与宿主机使用同一网络

      --device=/dev/video0 ---------------video0表示摄像头ID,指将宿主机摄像头接入容器(需在宿主机上插上USB摄像头)

      QT_X11_NO_MITSHM=1 ------------容器图形化界面设置

      --gpus '"'device=0'"' -----------------指定容器所使用的gpu

      --name="guo02 " ----------------------自定义容器名称guo18

      --privileged=true ----------------------使容器内的root拥有真正的root权限

      -v /tmp/.X11-unix:/tmp/.X11-unix --------------- 容器图形化界面设置

      -e DISPLAY=$DISPLAY ---------------容器图形化界面设置

      -w /opt/nvidia/deepstream/deepstream-6.0 ---------- 刚进入容器时所在的目录

      cv-detect-robot:v4.02 ----------------cv-detect-robot为镜像仓库名称,v4.02为镜像标签(tag)

      /bin/bash --------------------------------启动容器后启动bash(docker后台必须运行一个进程,否则容器就会退出)

    • 运行以上指令后可从终端进入容器。如下图所示: 在这里插入图片描述

3.安装x86版本的vscode(基于CDR的二次开发及子项目测试均可在vscode中进行)

  • 在vscode官方网站下载amd64版本

  • 通过以下命令安装vscode(在安装包所在目录下打开终端):

    sudo dpkg -i code_1.62.3-1637137107_amd64.deb

    安装完成后,在应用程序中可看到vscode图标

  • 打开vscode,并在扩展栏里面安装dockerremote-container插件,安装成功后重启vscode,进入docker图标,可在容器(containers)目录栏查看到步骤2中建立的容器cv-detect-robot:v4.02,光标移至该处并点击右键进入Attach Visual Studio Code后(会自动新建一窗口),便可远程连接该容器(container)。

4.在vscode中测试deepstream-test7相关功能

(注意):deepstream_test7文件夹在以下路径:

~/opt/nvidia/deepstream/sources/deepstream_python_apps/deepstream_test7/

  • 运行如下命令,测试视频文件检测功能:

    python3 deepstream-test_7_file.py /opt/nvidia/deepstream/deepstream-6.0/samples/streams/sample_qHD.mp4

  • 运行如下命令,测试usb摄像头实时检测功能:

    python3 deepstream-test_7_cam.py /dev/video0

  • 运行如下命令,测试rtsp流实时检测功能:

    python3 deepstream-test_7_rtsp_osd.py rtsp://admin:[email protected]:554/ch1/main/av_stream

  • 以上三种检测模式都配置了跟踪器(默认为deepsort跟踪器),检测框右上角显示跟踪ID号, 可通过共享内存(internal_memory.txt)方式获得跟踪ID及跟踪目标的像素坐标.读取共享内存内部动态数据方式有三种:rostopic形式读取、python 接口读取,c++接口读取,下面对三种读取方式进行介绍。

    • rostopic 读取方式: 在三种检测模式其中一种运行的情况下,检测数据会动态写入internal_memory.txt所指向的内存中,首先新建一终端运行roscore,再新建终端运行client_ros.py(完成内存数据读取和数据topic发布功能),最后新建一终端运rostopic echo /BoundingBoxes_tensor实时查看话题(topic)内容。
    • python接口读取: 在三种检测模式其中一种运行的情况下,检测数据会动态写入internal_memory.txt所指向的内存中,通过python直接循环读取内存动态数据的方式获取实时检测数据,运行client.py即可实现。
    • c++接口读取方式: 在三种检测模式其中一种运行的情况下,检测数据会动态写入internal_memory.txt所指向的内存中,通过cpp程序直接循环读取内存动态数据的方式获取实时检测数据,编译运行cpp_io文件夹下的test_7.cpp程序

5.在vscode中测试deepstream-yolov5相关功能

(注意):deepstream-yolo5文件夹在以下路径:

~/opt/nvidia/deepstream/sources/deepstream_python_apps/deepstream-yolov5/

  • 运行如下命令,测试视频文件检测功能:

    python3 deepstream_yolov5_file.py file:///opt/nvidia/deepstream/deepstream-6.0/samples/streams/sample_qHD.h264

  • 运行如下命令,测试usb摄像头实时检测功能:

    python3 deepstream_yolov5_cam.py /dev/video0

  • 运行如下命令,测试rtsp流实时检测功能:

    python3 deepstream_yolov5_rtsp.py rtsp://admin:[email protected]:554/ch1/main/av_stream

  • 以上三种检测模式都配置了跟踪器(默认为deepsort跟踪器),检测框右上角显示跟踪ID号, 可通过共享内存(internal_memory.txt)方式获得跟踪ID及跟踪目标的像素坐标.读取共享内存内部动态数据方式有三种:rostopic形式读取、python 接口读取,c++接口读取,下面对三种读取方式进行介绍。

    • rostopic 读取方式: 在三种检测模式其中一种运行的情况下,检测数据会动态写入internal_memory.txt所指向的内存中,首先新建一终端运行roscore,再新建终端运行client_ros.py(完成内存数据读取和数据topic发布功能),最后新建一终端运rostopic echo /BoundingBoxes_tensor实时查看话题(topic)内容。
    • python接口读取: 在三种检测模式其中一种运行的情况下,检测数据会动态写入internal_memory.txt所指向的内存中,通过python直接循环读取内存动态数据的方式获取实时检测数据,运行client.py即可实现。
    • c++接口读取方式: 在三种检测模式其中一种运行的情况下,检测数据会动态写入internal_memory.txt所指向的内存中,通过cpp程序直接循环读取内存动态数据的方式获取实时检测数据,编译运行cpp_io文件夹下的testv5.cpp程序。

6.在vscode中测试deepstream-yolox需相关功能

(注意):deepstream-yolox文件夹在以下路径:

~/opt/nvidia/deepstream/sources/deepstream_python_apps/deepstream-yolox/

  • 运行如下命令,测试视频文件检测功能:

    python3 deepstream_yolox_file.py file:///opt/nvidia/deepstream/deepstream-6.0/samples/streams/sample_qHD.h264

  • 运行如下命令,测试usb摄像头实时检测功能:

    python3 deepstream_yolox_cam.py /dev/video0

  • 运行如下命令,测试rtsp流实时检测功能:

    python3 deepstream_yolox_rtsp.py rtsp://admin:[email protected]:554/ch1/main/av_stream

  • 以上三种检测模式都配置了跟踪器(默认为deepsort跟踪器),检测框右上角显示跟踪ID号, 可通过共享内存(internal_memory.txt)方式获得跟踪ID及跟踪目标的像素坐标.读取共享内存内部动态数据方式有三种:rostopic形式读取、python 接口读取,c++接口读取,下面对三种读取方式进行介绍。

    • rostopic 读取方式: 在三种检测模式其中一种运行的情况下,检测数据会动态写入internal_memory.txt所指向的内存中,首先新建一终端运行roscore,再新建终端运行client_ros.py(完成内存数据读取和数据topic发布功能),最后新建一终端运rostopic echo /BoundingBoxes_tensor实时查看话题(topic)内容。
    • python接口读取: 在三种检测模式其中一种运行的情况下,检测数据会动态写入internal_memory.txt所指向的内存中,通过python直接循环读取内存动态数据的方式获取实时检测数据,运行client.py即可实现。
    • c++接口读取方式: 在三种检测模式其中一种运行的情况下,检测数据会动态写入internal_memory.txt所指向的内存中,通过cpp程序直接循环读取内存动态数据的方式获取实时检测数据,编译运行cpp_io文件夹下的yolox.cpp程序。