踩坑记录2——RK3588跑通YOLO v5+DeepSORT


上篇说到RK3588编译OpenCV, 这篇记录一下跑通YOLO v5+DeepSORT的愉(chi)快(shi)历程.


1. 保证编译OpenCV时关联了ffmpeg

如果本身缺少ffmpeg而编译了没有ffmpeg版本的OpenCV, 则视频无法读取.

解决方案参照CSDN, 首先安装ffmpeg:

sudo apt install -y ffmpeg

之后安装一堆dev:

libavcodec-dev 、libavformat-dev、libavutil-dev 、libavfilter-dev、 libavresample-dev、 libswresample-dev、 libswscale-dev

这个时候再去编译OpenCV, 可以看到ffmpeg的选项可以检测出版本了. (我没有做原博客将头文件加入/usr/include, 也是可以的).

踩坑记录2——RK3588跑通YOLO v5+DeepSORT_第1张图片

2. 下载代码

采用的代码是Zhou-sx大神的https://github.com/Zhou-sx/yolov5_Deepsort_rknn, 代码到手后, 要跑通自己的视频, 做如下改动:

2.1 更改CMakeLists.txt中OpenCV的位置

./CMakeLists.txt./deepsort/CMakeLists.txt中, 更改

set(OpenCV_DIR /home/wjp/opencv-4.6.0/install/lib/cmake/opencv4)  # 填入OpenCVConfig.cmake

后面的路径是OpenCV的OpenCVCondif.cmake的路径

2.2 更改图像大小和目标类别个数

./include/common.h中修改IMG_WIDTH, IMG_HEIGHT, IMG_PAD, OBJ_CLASS_NUM, 例如:

#define BYTE unsigned char
#define IMG_WIDTH 1024
#define IMG_HEIGHT 540
#define IMG_CHANNEL 3
#define IMG_PAD 640
#define OBJ_CLASS_NUM     1

./yolov5/src/decode.cpp中修改LABEL_NALE_TXT_PATH, 该txt储存的是视频中类别名称, 必须与 OBJ_CLASS_NUM对应:

#define LABEL_NALE_TXT_PATH "../model/hongwai_2_labels_list.txt"

例如只有一类car, 则txt的内容就是

car

2.3 更改主文件中的路径

./yolov5_deepsort.cpp中, 更改模型, 读取视频与写入视频的路径. 模型必须是对应的rknn格式, 如何产生的以后补充.

string PROJECT_DIR = "/home/codes/yolov5_Deepsort_12_28";


string YOLO_MODEL_PATH = PROJECT_DIR + "/model/best.rknn";
string SORT_MODEL_PATH = PROJECT_DIR + "/model/osnet_x0_25_market.rknn";

string VIDEO_PATH = PROJECT_DIR + "/data/M1401.mp4";
string VIDEO_SAVEPATH = PROJECT_DIR + "/data/M1401_results.mp4";

2.4 编译运行

cd build
cmake ..
make
./yolov5_deepsort

3. 优化

原来的代码有输出跟踪框漂移和没有处理检测框异常的功能, 我fork并完善了一下, 改善了这些问题, 减少了报错的可能. 欢迎star:

https://github.com/JackWoo0831/yolov5_Deepsort_rknn

你可能感兴趣的:(其他,RK3588,opencv,人工智能,目标跟踪,目标检测,嵌入式硬件)