RK3588跑通YOLOv5+DeepSORT

RK3588跑通YOLOv5+DeepSORT

本帖子用于记录复现时遇到的问题和解决方案


安装ffmpeg

1、安装依赖

sudo apt-get install yasm
sudo apt-get install build-essential
sudo apt-get install -y libass-dev
sudo apt-get install libfreetype6-dev
sudo apt-get install libsdl2-dev
sudo apt-get install libtheora-dev
sudo apt-get install libva-dev
sudo apt-get install libvdpau-dev
sudo apt-get install libvorbis-dev
sudo apt-get install libxcb1-dev
sudo apt-get install libxcb-shm0-dev
sudo apt-get install libxcb-xfixes0-dev
sudo apt-get install texinfo
sudo apt-get install zlib1g-dev
sudo apt-get install git
sudo apt-get install cmake
sudo apt-get install autoconf
sudo apt-get install automake
sudo apt-get install libtool

2、编译安装NASM

https://www.linuxfromscratch.org/blfs/view/svn/general/nasm.html

./configure --prefix=/安装路径
make
make install

3、编译安装x264

https://www.videolan.org/developers/x264.html

./configure --enable-shared --enable-static --prefix=/安装路径
make
make install

4、安装ffmpeg

https://ffmpeg.org/download.html#releases

关于版本选择大家可以参考博客:https://blog.csdn.net/Damon_Sandy/article/details/131995799,在opencv源码文件夹下的3rdparty-ffmpeg中找到cmake文件查看对应版本号

# --extra-cflags和--extra-ldflags指定x264库的位置
./configure --prefix=安装路径 --enable-shared --enable-gpl --enable-libx264 --extra-cflags=-I/home/firefly/Downloads/x264/include --extra-ldflags=-L/home/firefly/Downloads/x264/lib
make 
make install

注意:
如果遇到问题ERROR: libx264 not found,可以参考以下解决方案:

  • http://blog.csdn.net/ljh081231/article/details/7595556
  • http://blog.csdn.net/webdisk008/article/details/6618777
  • http://code.google.com/p/x264-ffmpeg-up-to-date/issues/detail?id=13

我的解决方案:

sudo vi /etc/ld.so.conf
# 将libx264所在的目录,添加到文件ld.so.conf中
sudo ldconfig /etc/ld.so.conf

配置

sudo vi /etc/ld.so.conf.d/ffmpeg.conf
# 加入ffmpeg动态库的路径
sudo ldconfig

安装OpenCV

使用的版本是4.7.0

1、安装依赖

sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
sudo apt-get install cmake-qt-gui

如果libjasper-dev安装遇到问题:

sudo add-apt-repository "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe"
sudo apt update
sudo apt install libjasper1 libjasper-dev

2、下载opencv源码
(1)在opencv官方仓库下载需要版本的opencv源码,并解压
(2)创建两个文件夹分别作为opencv的构建目录和安装目录

mkdir /home/firefly/Downloads/build_opencv //构建路径
mkdir /home/firefly/Downloads/install_opencv //安装路径
# 源码路径 /home/firefly/Downloads/opencv-4.7.0

3、下载Eigen

sudo apt install libeigen3-dev

4、配置cmake

cmake-gui

(1)选择源码目录和build目录,选择默认编码器
在这里插入图片描述

在这里插入图片描述
(2)点击finish,然后再点击configure,配置参数(一定要注意修改CMAKE_INSTALL_PREFIX为安装路径/home/firefly/Downloads/install_opencv),然后点击configure,直到没有红色为止,然后点击generate
在这里插入图片描述
在这里插入图片描述
(3)开始编译
进入/home/firefly/Downloads/build_opencv文件

make -j16     #如果性能不够可以-j4、-j8
make install

配置

sudo vi /etc/ld.so.conf.d/opencv.conf
# 加入opencv动态库的路径
sudo ldconfig

至此编译完成!!!

代码调试

参考代码:https://github.com/Zhou-sx/yolov5_Deepsort_rknn

1、修改CMakeLists

在./CMakeLists.txt和./deepsort/CMakeLists.txt中
更改set(OpenCV_DIR /home/wjp/opencv4.6.0/install/lib/cmake/opencv4) # 填入OpenCVConfig.cmake
后面的路径是OpenCV的OpenCVCondif.cmake的路径

2、替换项目第三方库或修改cmakelist中第三方库引用位置

由于项目使用的rga和librknn版本可能与板卡不一样,所以需要用find命令找到板卡上的librknn_api.so、librknnrt.so、librga.so进行替换

3、修改yolov5_deeposort.cpp文件中的一系列地址

项目里的rknn模型感觉有问题,这里我是换成了官方给的yolov5s.rknn

4、修改./include/common.h文件

(1)修改IMG_WIDTH, IMG_HEIGHT, IMG_PAD, OBJ_CLASS_NUM为视频大小等参数
(2)在./yolov5/src/decode.cpp中修改LABEL_NALE_TXT_PATH, 该txt储存的是视频中类别名称, 必须与 OBJ_CLASS_NUM对应

5、编译运行

# 进入到build文件夹
cmake ..
make -j8
./yolov5_deepsort

注意:
(1)在make阶段可能遇到的报错
eigen在头文件中的位置有问题,使用find命令找到板卡eigen所在的位置,并根据报错提示修改相应头文件
(2)视频编码错误(这是我本人花最长时间解决的错误!!!!!)
报错示例:
在这里插入图片描述

关于opencv视频编码的几种类型大家可以去自行查阅
修改./yolov5/src/videoio.cpp文件,在videowrite函数中,修改video_probs.Video
_fourcc为CV_FOURCC(‘M’,‘J’,‘P’,‘G’)
代码如下:

void videoWrite(const char* save_path,int cpuid) 
{
	 cpu_set_t mask;
	 CPU_ZERO(&mask);
	 CPU_SET(cpuid, &mask);
	if (pthread_setaffinity_np(pthread_self(), sizeof(mask), &mask) < 0)
  cerr << "set thread affinity failed" << endl;
	printf("Bind videoWrite process to CPU %d\n", cpuid); 
	cv::VideoWriter vid_writer;
    while(1)
    {
	    if(queueInput.size() > 0)
	    {
	    	cout << save_path << " "  << endl;
	    	
	    	# 增加这一句!!!!
	       video_probs.Video_fourcc = CV_FOURCC('M','J','P','G');
	       
	       vid_writer  = cv::VideoWriter(save_path, video_probs.Video_fourcc, video_probs.Fps, 
	       cv::Size(video_probs.Video_width, video_probs.Video_height));
	       break;
      }
    }
		while (1) 
		{  
			// queueOutput 就尝试写
			if (queueOutput.size() > 0) {
				mtxQueueOutput.lock();
				imageout_idx res_pair = queueOutput.front();
				queueOutput.pop();
				mtxQueueOutput.unlock();
				draw_image(res_pair.img, res_pair.dets);
				vid_writer.write(res_pair.img); // Save-video
			}
			// 最后一帧检测/追踪结束 bWriting置为false 此时如果queueOutput仍存在元素 继续写
			else if(!bTracking){
				vid_writer.release();
				break;
			}
		}
	cout << "VideoWrite is over." << endl;
}

最终结果

在这里插入图片描述
参考文章:

  1. http://runxinzhi.com/gjianw217-p-3228455.html
  2. https://blog.csdn.net/weixin_55015419/article/details/131021128?ydreferer=aHR0cHM6Ly9tcC5jc2RuLm5ldC9tcF9ibG9nL21hbmFnZS9hcnRpY2xlP3NwbT0xMDEwLjIxMzUuMzAwMS41NDQ4
  3. https://blog.csdn.net/Zhang_Chen_/article/details/86769552
  4. https://blog.csdn.net/Damon_Sandy/article/details/131995799
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值