first commit

This commit is contained in:
2025-08-22 13:52:24 +08:00
commit 05a551d523
257 changed files with 49217 additions and 0 deletions
+128
View File
@@ -0,0 +1,128 @@
# 视频测试
该程序用于加载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`复制过来,然后查看是否正常。
+5
View File
@@ -0,0 +1,5 @@
模型一般存放在`./`目录下,在该目录下,创建一个模型目录,在该目录下,需要有`模型名称.rknn`, `模型名称.txt`以及`模型名称_code.txt`。三者的说明如下:
* `模型名称.rknn`,训练好的yolov5转换出来的rknn权重文件。
* `模型名称.txt`,记录每一种类型对应的名称,一行一个,表示识别出来的各个类型代表的中文名称
* `模型名称_code.txt`,记录每一种类型对应的typeid,一行一个,表示识别出来的类型要转换成哪一个id
Binary file not shown.
+1
View File
@@ -0,0 +1 @@
mouse
@@ -0,0 +1 @@
20161
+80
View File
@@ -0,0 +1,80 @@
person
bicycle
car
motorcycle
airplane
bus
train
truck
boat
trafficlight
firehydrant
stopsign
parkingmeter
bench
bird
cat
dog
horse
sheep
cow
elephant
bear
zebra
giraffe
backpack
umbrella
handbag
tie
suitcase
frisbee
skis
snowboard
sportsball
kite
baseballbat
baseballglove
skateboard
surfboard
tennisracket
bottle
wineglass
cup
fork
knife
spoon
bowl
banana
apple
sandwich
orange
broccoli
carrot
hotdog
pizza
donut
cake
chair
couch
pottedplant
bed
diningtable
toilet
tv
laptop
mouse
remote
keyboard
cellphone
microwave
oven
toaster
sink
refrigerator
book
clock
vase
scissors
teddybear
hairdrier
toothbrush