ModelBox端云协同AI开发套件(RK3568)试用记录(二)
这一部分用SDK做了2个案例:
- 在视频文件/视频流上添加文字
试用首先考虑的效率问题,不考虑安全问题,所以直接用root用户操作。
后面会用到一些库,所以先apt安装dos2unix
,pip3安装numpy opencv-python
将SDK modelbox-rk-aarch64-1.0.9.6.tar.gz
解压后,内容如下
root@rock-3a:~/sdk# tree -L 2 --dirsfirst
|-- modelbox-rk-aarch64
| |-- bin/
| |-- doc/
| |-- etc/
| |-- flowunit/
| |-- include/
| |-- lib/
| |-- solution/
| |-- template/
| |-- www/
| |-- Third_Party_Open_Source_Software_Notice
| |-- modelbox-1.0.0-py3-none-any.whl
| `-- version
|-- create.py
|-- env_set.sh
|-- mb-pkg-tool
|-- obsutil
`-- solution.py
使用 create.py
创建hello_world工程后,目录是这样的
`-- hello_world
|-- CMake
| |-- FindFFMPEG.cmake
| `-- Function.cmake
|-- bin
| |-- main.sh
| `-- mock_task.toml
|-- data/
|-- dependence
| |-- modelbox_requirements.txt
| `-- readme.txt
|-- etc
| `-- flowunit/
|-- flowunit_cpp
| `-- CMakeLists.txt
|-- graph
| |-- hello_world.toml
| `-- modelbox.conf
|-- hilens_data_dir/
|-- model/
|-- CMakeLists.txt
|-- build_project.sh
`-- rpm_copyothers.sh
在工程中创建一个叫做draw_text的 python flowunit
后,在etc/flowunit下新增了draw_text目录,是这样的:
|-- etc
| `-- flowunit
| |-- cpp
| |-- draw_text
| | |-- draw_text.py
| | `-- draw_text.toml
| `-- readme.txt
然后修改功能单元的处理逻辑
,即draw_text.py
里的process
函数,加上在视频帧上打出文字hello world的动作。
修改hello_world.toml
流程图的配置。
将SDK里自带的一个mp4文件car_test_video.mp4
拷贝到data目录中。
修改mock_task.toml
里面的任务的输入输出配置
,为使用本地mp4文件。输入文件为../data/car_test_video.mp4
,输出文件为../hilens_data_dir/hello.mp4
执行build_project.sh
进行工程构建。很快,不知道构建了个啥。
执行 main.sh
运行应用。
输出有些报错,可以不用管,
[2022-07-23 04:31:28,100][ WARN][ timer.cc:208 ] Schedule timer failed, timer is not running.
[2022-07-23 04:31:28,100][ERROR][iva_auth_info_updater.cc:29 ] IvaManager::SetIAMAuthInfo Not enough meassage. userId and (domain_id or vas_x_role_name) is empty.
[2022-07-23 04:31:28,100][ INFO][iva_auth_info_updater.cc:63 ] IvaManager::SetIAMAuthInfo Not enough meassage. ak is empty.
[2022-07-23 04:31:47,109][ INFO][flow_scheduler.cc:397 ] shutdown flow scheduler.
[2022-07-23 04:31:47,109][ERROR][flow_scheduler.cc:377 ] the scheduler caught an error : Stop operation
[2022-07-23 04:31:47,115][ INFO][ job_manager.cc:82 ] delete job : IVA_JOB
因为目标文件生成了,播放时有Hello World文字在上面的效果。
再试一下视频流,把摄像头插上开发板上,用lsusb
可以看到系统识别到了:
Bus 007 Device 002: ID 0c45:64ab Microdia HX-USB Camera
将hello_world.toml
另存为hello_world_camera.toml
,在文件里将video_demuxer
和video_decoder
去掉,改为local_camera
。
再修改mock_task.toml
里面的任务的输入输出配置
,输入使用摄像头,输出到rtsp,地址为PC上的推流服务。然后在PC上启动windows下的SDK里的connect_wizard
,使用开发板侧视频流
启动推流。
执行 main.sh camera
指定使用配置文件hello_world_camera.toml
来运行应用:
[2022-07-23 08:04:25,931][ INFO][video_out_flowunit.cc:305 ] video_out url is rtsp://192.168.3.8:8554/outstream
[2022-07-23 08:04:25,931][ INFO][video_out_flowunit.cc:266 ] videoout url=rtsp://192.168.3.8:8554/outstream
[2022-07-23 08:04:25,946][ INFO][ ffmpeg_writer.cc:55 ] Open url rtsp://192.168.3.8:8554/outstream, format rtsp success
浏览器里自动打开输出实时画面,有添加文字效果。
- 视频文件做车辆检测
用检测模型检测出视频画面中车辆并画框
,输入输出都是视频文件。这个应用作为模板案例已内置在sdk中,不需要另外下载。
先用create.py
创建car_det
工程,这次加了一个选项 -s car_det
,代表使用这个solution
来创建。可以看到工程目录如下:
root@rock-3a:~/sdk/workspace/car_det# tree -L 4 --dirsfirst
.
|-- CMake
| |-- FindFFMPEG.cmake
| `-- Function.cmake
|-- bin
| |-- main.sh
| `-- mock_task.toml
|-- data
| |-- car_test_pic.jpg
| |-- car_test_video.mp4
| `-- test_http.py
|-- dependence
| |-- modelbox_requirements.txt
| `-- readme.txt
|-- etc
| `-- flowunit
| |-- cpp
| |-- draw_car_bbox
| | |-- draw_car_bbox.py
| | `-- draw_car_bbox.toml
| |-- yolox_post
| | |-- yolox_post.py
| | |-- yolox_post.toml
| | `-- yolox_utils.py
| `-- readme.txt
|-- flowunit_cpp
| `-- CMakeLists.txt
|-- graph
| |-- car_det.toml
| |-- car_det_http.toml
| |-- car_det_server.toml
| `-- modelbox.conf
|-- hilens_data_dir
|-- model
| `-- yolox_infer
| |-- yolox_infer.toml
| `-- yolox_nano_288x512.rknn
|-- CMakeLists.txt
|-- build_project.sh
`-- rpm_copyothers.sh
目录中有模型推理单元yolox_infer
,包含yolox模型文件和模型配置文件。ModelBox内置了rknn推理引擎和推理逻辑,开发者不需编写推理代码。此模型由PyTorch框架训练得到,事先使用rknn-toolkit2工具将它转换为RK3568支持的模型格式,可以在RK3568模型转换验证案例中查看模型转换过程。
推理后的后处理在flowunit里,有yolox_post
和draw_car_bbox
,做后处理,然后做画框展示。
工程有3个流程图。默认流程图是car_det.toml
,运行它来看看效果,先build_project.sh
再main.sh
运行,12秒的视频,处理耗时48秒:
[2022-07-23 09:26:55,104][ INFO][ ffmpeg_writer.cc:55 ] Open url /root/sdk/workspace/car_det/bin/../hilens_data_dir/car_test_result.mp4, format mp4 success
[2022-07-23 09:27:43,049][ INFO][ffmpeg_video_demuxer.cc:147 ] Stream /root/sdk/workspace/car_det/bin/../data/car_test_video.mp4 is end
在来看http服务,输入一个图片,给出检测结果图片的。运行main.sh http
指定使用car_det_http.toml
流程图:
[2022-07-23 09:52:01,939][ INFO][httpserver_sync_receive.cc:188 ] Start server at http://0.0.0.0:8083/v1/car_det
使用test_http.py
调用这个http服务:
root@rock-3a:~/sdk/workspace/car_det/data# python test_http.py
test_http.py:33: DeprecationWarning: tostring() is deprecated. Use tobytes() instead.
img_str = cv2.imencode('.jpg', img_data)[1].tostring()
response: {"det_result": "[[0.07672460377216339, 0.3569239377975464, 0.2763637900352478, 0.7063356041908264, 0.7665719985961914, 2.0], [0.6121819615364075, 0.09047098457813263, 0.7309271693229675, 0.28249451518058777, 0.72760009765625, 2.0], [0.38874685764312744, 0.17702166736125946, 0.4968656301498413, 0.36404821276664734, 0.6740775108337402, 2.0], [0.2635308504104614, 0.0011769375996664166, 0.3374212980270386, 0.02468840591609478, 0.34745872020721436, 2.0]]"}
查看生成的结果文件:
到这里就告一段落。
- 点赞
- 收藏
- 关注作者
评论(0)