cv-detect-ros子項目(四)(yolox-ros-deepstream)
硬件環境
- 英偉達jetson nano 板載計算機(原則上jetson 系列產品都能適配此項目)
- 鼠標鍵盤(推薦使用有線連接方式)
軟件環境
- Jetpack 4.5.1 (ubuntu 18.04)
- TensorRT 7.1
- CUDA 10.2
- cuDNN 8.0
- OpenCV 4.1.1
- deepstream 5.1
相關資源百度雲盤鏈接如下:
鏈接:https://pan.baidu.com/s/1uRdl1Z6jUQXZyhmFKPmj5w 提取碼:3dS0
如下圖所示:

一、安裝ROS操作系統
備注:(以下操作最好在搭建梯子或者更換國內源的情況下進行,否則下載速度很慢)
請參考ROS官方安裝連接: 官方安裝教程
也可按以下步驟安裝:
- sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
- sudo apt install curl
- curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -(**若出現`gpg: no valid OpenPGP data found`可直接跳過 **)
- sudo apt update
- sudo apt install ros-melodic-desktop-full
- echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
- source ~/.bashrc
- source /opt/ros/melodic/setup.bash
- sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential
- sudo apt install python-rosdep
- sudo rosdep init
- rosdep update
- 以上步驟執行完成后,可嘗試在終端運行
roscore命令,若出現下圖所示,說明ros安裝正常:

二、安裝DeepStream on TX2(Jetpack 4.5.1)
(備注):若使用SDKManager軟件對TX2進行刷機,且刷入系統時選擇了DeepStream 5.1選項,便會自動安裝 DeepStream,無需進行以下手動安裝。
1.安裝依賴
執行下面命令來安裝需要的軟件包:
sudo apt install \
libssl1.0.0 \
libgstreamer1.0-0 \
gstreamer1.0-tools \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly \
gstreamer1.0-libav \
libgstrtspserver-1.0-0 \
libjansson4=2.11-1
2.安裝 DeepStream SDK
(1)進入官方DeepStream SDK選擇DeepStream 5.1 for Jetson並下載(Jetpack 4.5.1 向下兼容)
(備注):也可在本人提供相關資源百度雲盤鏈接中下載deepstream_sdk_5.1_jetson.tbz2文件包

(2)下載后得到壓縮文件deepstream_sdk_5.1_jetson.tbz2,輸入以下命令以提取並安裝DeepStream SDK:
sudo tar -xvf deepstream_sdk_5.1_jetson.tbz2 -C /
cd /opt/nvidia/deepstream/deepstream-5.1
sudo ./install.sh
sudo ldconfig
(3) DeepStream測試
- 執行以下命令:
cd /opt/nvidia/deepstream/deepstream-5.1/sources/objectDetector_Yolo
- 執行編譯命令
sudo CUDA_VER=10.2 make -C nvdsinfer_custom_impl_Yolo
出現如下圖所示結果,說明編譯成功:
- 編輯文件prebuild.sh並注釋掉除yolov3-tiny的語句
執行以下命令(下載yolov3-tiny.cfg和yolov3-tiny.weights):
sudo ./prebuild.sh
- 執行命令:
deepstream-app -c deepstream_app_config_yoloV3_tiny.txt
若能生成相關engine引擎並啟動視頻流檢測,則說明DeepStream SDK安裝成功,如下圖所示:


三、安裝onnx2trt(在jetson nano 上完成)
- 查看TensoRT版本
dpkg -l |grep TensorRT
-
安裝cmake
- 刪除原來的cmake
sudo apt remove cmake
sudo apt purge --auto-remove cmake- 下載所需版本,解壓
tar -xzvf cmake-3.21.2.tar.gz
cd ~/cmake-3.21.2- 編譯安裝
執行命令......
./bootstrap
make -j4
sudo make install- 如果編譯安裝cmake時如果出現錯誤:could not find OpenSSL,執行
sudo apt install libssl-dev
- 移動路徑
sudo cp ./bin/cmake /usr/bin/
- 驗證安裝結果
cmake --version
-
安裝protobuf
-
下載protobuf-3.17.3.zip並解壓
unzip protobuf-3.17.3.zip
-
執行以下命令(其中
sudo make install等待時間較長)cd protobuf-3.17.3 ./autogen.sh ./configuremake sudo make install sudo ldconfig protoc --version
-
-
安裝onnx-tensorrt
git clone -b 7.1 https://github.com/onnx/onnx-tensorrt.git
-
克隆后onnx-tensorrt/third_party/onnx中內容是空的,需要下載與tensorrt7.1匹配的onnx1.6
下載地址為:https://github.com/onnx/onnx/releases ,也可在百度網盤中下載。
將下載后的內容,解壓放置到onnx-tensorrt/third_party/tar -xzvf onnx-1.6.0.tar.gz mv onnx-1.6.0 onnx -
執行以下命令
cd onnx-tensorrt mkdir build cd build cmake .. -DTENSORRT_ROOT=/usr/src/tensorrt make -j4 sudo make install onnx2trt -V
-
-
生成yolox的TensorRT engine 文件(必須在同一jetson nano 上完成!!!)
-
從相關資源百度雲盤鏈接中將yolox_s.onnx、yolox_tiny.onnx、yolox_nano.onnx到Jetson Nano上,可放置於home目錄下,並依次執行 以下命令:
onnx2trt yolox_s.onnx -o yolox_s.engine
onnx2trt yolox_tiny.onnx -o yolox_tiny.engine
onnx2trt yolox_nano.onnx -o yolox_nano.engine
若要自己生成.onnx文件,請進入以下鏈接:
yolox導出onnx
-
四、從github克隆cv-detect-ros項目,並將本人設計好的yolox-ros-deepstream子項目的相關子文件夾拷貝到相應目錄下進行編譯
- 從github克隆
cv-detect-ros項目(建議在搭建梯子的環境下進行git clone)
先按
ctrl + alt +t進入終端(默認克隆的文件在家目錄下)
- 首先對我們所要操作的文件夾賦予權限
sudo chmod -R 777 /opt/nvidia/deepstream/deepstream-5.1/sources/
- 再拷貝cv-detect-ros/yolox-ros-deepstream/yolox-ros文件夾到opt/nvidia/deepstream/deepstream-5.1/sources/
yolox-ros中的文件內容如下圖所示:

sudo cp ~/cv-detect-ros/yolox-ros-deepstream/yolox-ros /opt/nvidia/deepstream/deepstream-5.1/sources/
- 拷貝步驟(三)中生成的yolox、yolox-tiny和yolox-nano的engine文件到opt/nvidia/deepstream/deepstream-5.1/sources/yolox-ros
cp ~/yolox_s.engine /opt/nvidia/deepstream/deepstream-5.1/sources/yolox-ros
cp ~/yolox_tiny.engine /opt/nvidia/deepstream/deepstream-5.1/sources/yolox-ros
cp ~/yolox_nano.engine /opt/nvidia/deepstream/deepstream-5.1/sources/yolox-ros
-
編譯
cd /opt/nvidia/deepstream/deepstream-5.1/sources/yolox-ros CUDA_VER=10.2 make -C nvdsinfer_custom_impl_yolox對於yolox-tiny和yolox-nano的部署, nvdsparsebbox_yolox.cpp中先修改
static const int INPUT_W = 416; //640; static const int INPUT_H = 416; //640;然后在進行編譯
-
搭建自定義的rostpoic話題消息的工作空間boxes_ws,建立ros接口
- 將git clone 的文件夾cv-detect-ros/yolovx-ros-deepstream/boxes_ws復制到home目錄下
sudo cp -r ~/cv-detect-ros/yolox-ros-deepstream/boxes_ws ~/
- 進入boxes_ws文件夾,編譯ros工作空間
cd ~/boxes_ws
- boxes_ws目錄下若有 build和devel文件,則需刪除后再編譯,否則無需執行本步驟
rm -r build devel
- 編譯
catkin_make
- 編譯成功后,需將boxes_ws工作空間添加環境變量
sudo gedit .bashrc
echo "source ~/boxes_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
- 將src下功能包darknet_ros_msgs建立軟連接至/opt/nvidia/deepstream/deepstream-5.1/sources/yolovx-ros/目錄下
cd ~/boxes_ws/src
ln -s ~/boxes_ws/src/ darknet_ros_msgs /opt/nvidia/deepstream/deepstream-5.1/sources/yolovx-ros/
- 測試ros接口是否成功建立
cd /opt/nvidia/deepstream/deepstream-5.1/sources/yolovx-ros/
在當前目錄終端下運行`python2`(一定要python2),並導入以下功能包:
from darknet_ros_msgs.msg import BoundingBox_tensor,BoundingBoxes_tensor
若以上導入沒有報錯,則說明ros接口創建成功!!!
五、落地部署測試
-
測試推理視頻文件
-
啟動檢測程序(啟動成功后會出現檢測畫面)
cd /opt/nvidia/deepstream/deepstream-5.1/sources/yolox-ros deepstream-app -c deepstream_app_config.txt -
將yolox-ros-deepstream中的client_ros.py文件復制到/opt/nvidia/deepstream/deepstream-5.1/sources/yolox-ros/中
cp -r ~/cv-detect-ros/yolox-ros-deepstream/client_ros.py /opt/nvidia/deepstream/deepstream-5.1/sources/yolox-ros/
-
ctrl + alt +t新建終端,啟動roscoreroscore
-
再
ctrl + alt +t新建一個終端,並進入目錄/opt/nvidia/deepstream/deepstream-5.1/sources/yolox-ros/cd /opt/nvidia/deepstream/deepstream-5.1/sources/yolox-ros/
python2 client_ros.py -
client_ros.py文件啟動后,檢測到的目標數據以topic的形式發布出來,可通過訂閱話題
boundingboxes_tensor實時查看目標檢測的數據 -
如下圖所示:

-
-
USB攝像頭視頻測試
-
攝像頭簡單檢測指令(ros的接入與上述一樣):
ls /dev/video* -
安裝v4l-utils工具:
sudo apt install v4l-utils -
檢測攝像頭比較完整信息的指令:
v4l2-ctl --list-devices -
攝像頭更細致規格的查看指令:
v4l2-ctl --device=/dev/video0 --list-formats-ext v4l2-ctl --device=/dev/video1 --list-formats-ext -
yolox usb攝像頭測試指令:
deepstream-app -c source1_usb_dec_infer_yolox.txt
-
-
CSI攝像頭視頻測試(ros的接入與上述一樣):
deepstream-app -c source1_csi_dec_infer_yolox.txt
六、針對自定義數據模型的修改
-
修改config_infer_primary.txt中的參數(num-detected-classes為自定義的類別數)
num-detected-classes=80 -
在labels.txt中修改類別名稱文件,換成自定義的類別名稱

