128 lines
5.1 KiB
Markdown
128 lines
5.1 KiB
Markdown
# 视频测试
|
|
该程序用于加载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`复制过来,然后查看是否正常。 |