ModelBox端云协同AI开发套件(RK3568)试用记录(二)

举报
黄生 发表于 2022/07/23 18:11:06 2022/07/23
【摘要】 这一部分用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 --dir...

这一部分用SDK做了2个案例:

  1. 在视频文件/视频流上添加文字

试用首先考虑的效率问题,不考虑安全问题,所以直接用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文字在上面的效果。
image.png

再试一下视频流,把摄像头插上开发板上,用lsusb可以看到系统识别到了:

Bus 007 Device 002: ID 0c45:64ab Microdia HX-USB Camera

hello_world.toml另存为hello_world_camera.toml,在文件里将video_demuxervideo_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

浏览器里自动打开输出实时画面,有添加文字效果。

image.png

  1. 视频文件做车辆检测

用检测模型检测出视频画面中车辆并画框,输入输出都是视频文件。这个应用作为模板案例已内置在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_postdraw_car_bbox,做后处理,然后做画框展示。

工程有3个流程图。默认流程图是car_det.toml,运行它来看看效果,先build_project.shmain.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

image.png

在来看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]]"}

查看生成的结果文件:

image.png

到这里就告一段落。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。