# 视频测试 该程序用于加载rknn模型,从rtsp视频流或者.h264文件中读取每一帧图像,然后交给mpp解码,rga进行格式和尺寸的转换,然后交给npu进行yolov5的推理。 ## 1. 切换到正确的分支 用yolov5模型进行推理的代码在`yolo-changed`分支上,拉取代码之后,使用以下命令切换到合适的分支 ```shell git checkout -b yolo-changed origin/yolo-changed ``` ## 2. 环境设置 项目使用c/cpp编写,首先需要安装缺少的组件: ```shell apt install cmake make ``` 然后,将`gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu`仓库也克隆下来,打开本项目的`CMakeList.txt`,根据实际情况修改该文件的第7行的tools的编译工具地址。 ## 3. 编译 在本项目的根目录下,执行以下命令: ```shell ## 创建build目录 mkdir build && cd build ## 生成makefile, 注意后面是两个点 cmake .. ## 编译 make ``` 执行完成之后,该目录下应该会有个`efka_flow`程序,该程序就是在1808上运行的模型推理程序。 ## 4. 部署 将`efka_flow`程序复制到开发板的`./models`目录下,同样地,模型推理的模型也需要放到这个目录下。 一般,模型是一个目录,比如老鼠识别叫`mouse_rec`,在在开发板的`./models`目录下常见一个`mouse_rec`目录: ```shell mkdir ./models/mouse_rec ``` 之后,把模型的rknn文件,也该名称`mouse_rec.rknn`,放到该目录下: ```shell 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 ``` 一般,运行的命令如下: ```shell ./efka_flow -s rtsp://127.0.0.1 -m mouse_rec -c camid -t 11 ``` * -s之后,传递rtsp视频流的url,或者也可以传递一个.h264的视频 * -m传递`./models/`目录下的模型的目录名,这里是[`mouse_rec`](https://git2.asxalex.pw/rk1808/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.txt`和`model.txt`三个文件 ## 实际测试 登录开发板,进入到`./models`目录,然后使用 ``` ./efka_flow -s input.h264 -m model -c camid ``` 上面的命令会使用model模型,把识别结果保存在`/usr/data/camera/camid/frames`目录下,每一个识别图片都会有一个`frame.rgb`和`frame.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`复制过来,然后查看是否正常。