上篇说到RK3588编译OpenCV, 这篇记录一下跑通YOLO v5+DeepSORT的愉(chi)快(shi)历程.
如果本身缺少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
, 也是可以的).
采用的代码是Zhou-sx大神的https://github.com/Zhou-sx/yolov5_Deepsort_rknn, 代码到手后, 要跑通自己的视频, 做如下改动:
在./CMakeLists.txt
和./deepsort/CMakeLists.txt
中, 更改
set(OpenCV_DIR /home/wjp/opencv-4.6.0/install/lib/cmake/opencv4) # 填入OpenCVConfig.cmake
后面的路径是OpenCV的OpenCVCondif.cmake的路径
在./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
在./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";
cd build
cmake ..
make
./yolov5_deepsort
原来的代码有输出跟踪框漂移和没有处理检测框异常的功能, 我fork并完善了一下, 改善了这些问题, 减少了报错的可能. 欢迎star: