Files
yolov5-inferrence/docs/doc.md
T
2025-08-22 13:52:24 +08:00

5.1 KiB

视频测试

该程序用于加载rknn模型,从rtsp视频流或者.h264文件中读取每一帧图像,然后交给mpp解码,rga进行格式和尺寸的转换,然后交给npu进行yolov5的推理。

1. 切换到正确的分支

用yolov5模型进行推理的代码在yolo-changed分支上,拉取代码之后,使用以下命令切换到合适的分支

git checkout -b yolo-changed origin/yolo-changed

2. 环境设置

项目使用c/cpp编写,首先需要安装缺少的组件:

apt install cmake make

然后,将gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu仓库也克隆下来,打开本项目的CMakeList.txt,根据实际情况修改该文件的第7行的tools的编译工具地址。

3. 编译

在本项目的根目录下,执行以下命令:

## 创建build目录
mkdir build && cd build

## 生成makefile, 注意后面是两个点
cmake ..

## 编译
make

执行完成之后,该目录下应该会有个efka_flow程序,该程序就是在1808上运行的模型推理程序。

4. 部署

efka_flow程序复制到开发板的./models目录下,同样地,模型推理的模型也需要放到这个目录下。

一般,模型是一个目录,比如老鼠识别叫mouse_rec,在在开发板的./models目录下常见一个mouse_rec目录:

mkdir ./models/mouse_rec

之后,把模型的rknn文件,也该名称mouse_rec.rknn,放到该目录下:

cp ~/mouse_rec.rknn ./models/mouse_rec/mouse_rec.rknn

另外,在该目录下,还需要一个模型类型文件和模型编码文件。模型类型文件名为mouse_rec.txt,里面对应一个类别就是一行,比如,老鼠识别模型只识别老鼠这一类,捺mouse_rec.txt里面就只有mouse一行。

模型编码文件,命名格式为mouse_rec_code.txt,比模型类型文件后面多加一个_code,该文件目前可以不用管,主要用于在模型识别结果往服务端传递的时候指明类别,mouse_rec.txt里面有一行,mouse_rec_code.txt里面就写几行0。

在把推理程序和模型文件都准备好之后,就可以进行推理了,推理程序用法如下:

./efka_flow --help

Usage: ./efka_flow [OPTION]

Getting help:
  -s, -server	rtsp server URL
  -e, -example	show example server
  -m, -model	model name from ./models/
  -c, -camera-id	camera id
  -t, -type-id	type id
  -p, -upload-port	upload port
  -r, -threshold	threshold

一般,运行的命令如下:

./efka_flow -s rtsp://127.0.0.1 -m mouse_rec -c camid -t 11
  • -s之后,传递rtsp视频流的url,或者也可以传递一个.h264的视频
  • -m传递./models/目录下的模型的目录名,这里是mouse_rec
  • -c传递一个摄像头的唯一标识,可以任意起名字,生成的运行信息会存放在/usr/data/camera/camid下面,里面的picsave目录用于存放识别的图片rgb信息。

测试流程

实际测试流程,首先是将需要标注的视频打包发送给智驱力,等待他们训练好模型,然后,会收到他们训练好的模型,然后,在我们的4070台式机上对模型进行预编译,然后使用ffmpeg将需要测试的视频转换成h264格式的,然后部署模型(放到板子上对应的内容),然后运行识别程序(efka_flow),然后获取识别结果,将结果放到4070台式机上,通过台式机上面的程序,将识别结果转换成图片,然后查看图片,看实际运行的结果是否满意。

准备物料

准备物料阶段,主要通过ffmpeg命令,去实际的摄像头上截取视频,然后打包,发给智驱力,实际的ffmpeg命令为:

ffmpeg -i rtsp://dizhi -an -c copy out.mp4

模型预编译

在登录到台式机上之后,首先使用conda activate rknn进入python的rknn环境。

登录4070台式机,进入/home/jihe/work/model_test/pre_compile,将模型上传到这里,然后使用命令:

python rknn_pre_compile.py input.rknn out_compiled.rknn

input.rknn预编译,输出到out_compiled.rknn。完成预编译工作。

准备需要测试的视频

需要测试的视频一般都是mp4格式的,使用如下ffmpeg将mp4格式转换为h264格式:

ffmpeg -i input.mp4 -vcodec copy -f h164 output.h264

部署模型

参考第一部分视频测试的模型部署说明,主要准备model.rknn,model_code.txtmodel.txt三个文件

实际测试

登录开发板,进入到./models目录,然后使用

./efka_flow -s input.h264 -m model -c camid

上面的命令会使用model模型,把识别结果保存在/usr/data/camera/camid/frames目录下,每一个识别图片都会有一个frame.rgbframe.txt,然后将该目录(/usr/local/camera/camid/frames)复制到4070台式机的/home/jihe/work/model_test/result目录下,然后运行

python convert_store.py

之后,在该目录下的frames目录下,会生成对应的frame*.jpg(需要在conda activate rknn进入python rknn环境之后才可以)。

之后,可以将frames目录下的*.jpg复制过来,然后查看是否正常。