- 资产集市
- 教学
- 实践
- AI说
- 案例库
- 生态合作
- 专区
中国站
简体中文发布于28个月以前
在 区域客流统计 案例中,其中的区域参数(围成区域的顶点坐标)配置在功能单元中,但是在实际场景中其实是不可行的,这种应用的全局参数只有等部署时视频/摄像头画面确定了才能定下来,不可能在开发阶段就配置好了。本文介绍这种全局参数在ModelBox
中如何配置与使用,这类应用如何使用HiLens
部署与配置。
这个应用对应的ModelBox
版本已经做成模板放在华为云OBS中,可以用sdk中的solution.bat
工具下载,接下来我们给出该应用在ModelBox
中的完整开发过程:
执行.\solution.bat -l
可看到当前公开的技能模板:
PS ███> .\solution.bat -l
...
Solutions name:
mask_det_yolo3
...
passenger_flow_person_det_yolo7_HiLens
结果中的passenger_flow_person_det_yolo7_HiLens即为基于人形检测的划区域客流统计应用模板,可使用如下命令下载模板:
PS ███> .\solution.bat -s passenger_flow_person_det_yolo7_HiLens
...
solution.bat
工具的参数中,-l
代表list
,即列出当前已有的模板名称;-s
代表solution-name
,即下载对应名称的模板。下载下来的模板资源,将存放在ModelBox
核心库的solution
目录下。
在ModelBox
sdk目录下使用create.bat
创建passenger_flow_count
工程
PS ███> .\create.bat -t server -n passenger_flow_HiLens -s passenger_flow_person_det_yolo7_HiLens
sdk version is modelbox-xxx
success: create passenger_flow_HiLens in ███\modelbox\workspace
create.bat
工具的参数中,-t
表示创建事务的类别,包括工程(server)、Python功能单元(Python)、推理功能单元(infer)等;-n
代表name
,即创建事务的名称;-s
代表solution-name
,表示将使用后面参数值代表的模板创建工程,而不是创建空的工程。
workspace
目录下将创建出passenger_flow_HiLens
工程,工程结构与 区域客流统计 案例中一致,流程图也是一样的,这里不再赘述。
在 区域客流统计 案例中,区域参数配置在draw_passenger_bbox.toml
文件中,配置的是划定区域的4个顶点坐标,围成一个封闭的四边形:
...
# 自定义的配置项
[config]
area = ["0", "325", "1280", "25", "1280", "360", "0", "720"] # 客流统计的划定区域
...
但是在实际场景中,这个参数在开发阶段是不知道,只有测试和部署阶段,看到了视频/摄像头画面,才知道区域应该如何划定,所以这个参数应该是在配置输入视频源的时候一起设置的,ModelBox
应用在本地测试时是配置在 bin/mock_task.toml
里:
[common]
content = "{\"area\":\"0,325,1280,25,1280,360,0,720\"}" # 客流统计的划定区域,多边形的顶点坐标
可以看到,mock_task.toml
中的 common.content 配置可以添加应用的json格式的全局参数配置,参数读取需要在 stream 功能单元(本应用即为 object_tracker 功能单元)的 data_pre 接口中实现:
def data_pre(self, data_context):
# 视频流开始前的初始化动作,跟踪器的初始化放在此处
self.tracker = EasyTracker(self.init_hits, self.max_age, self.min_iou)
# 获取针对一路视频流的全局配置参数:区域设定
iva_params = data_context.get_session_config().get_string("iva_task_common")
try:
self.area = json.loads(iva_params)['area']
except Exception as ex:
modelbox.error(str(ex))
return modelbox.Status()
可以看到,全局参数可以用数据上下文 data_context 获取,key 值为 iva_task_common,得到的是json格式字符串,开发者根据自己配置的参数再去解析。
本应用将获取到的参数放到输出端口中往后传,后面的 draw_passenger_bbox 功能单元可以继续使用。
启动应用前执行.\build_project.sh
进行工程构建,该脚本将编译自定义的C++功能单元(本应用不涉及)、将应用运行时会用到的配置文件转码为Unix格式(防止执行过程中的格式错误)、安装第三方依赖库:
PS ███> .\build_project.sh
...
PS ███>
然后执行.\bin\main.bat
运行应用:
PS ███> .\bin\main.bat
...
运行结束后在hilens_data_dir
目录下生成了passenger_flow_result.mp4
文件,可以打开查看:
可以看到,效果与 区域客流统计 案例一致,说明参数配置与获取是正常的。
上面介绍的是开发测试阶段的应用参数配置,技能开发好之后,如果想部署到其他设备上运行,不可能事先就得到输入输出和参数,然后配置在技能里。此时可以借助用于端边设备与应用管理的华为云 HiLens 平台,需要注意的是,用于部署的设备必须注册和激活,操作指南可参考 设备注册文档 与 设备激活文档。
首先需要将开发好的技能打包成rpm包,在ModelBox
sdk目录下使用create.bat
的打包命令为:
PS ███> .\create.bat -t rpm -n passenger_flow_HiLens
sdk version is modelbox-xxx
success: create passenger_flow_HiLens.rpm in ███/workspace/passenger_flow_HiLens
create.bat
工具的参数中,-t
表示创建事务的类别,rpm 即表示打rpm包;-n
代表name
,即需要打包的工程名称。
执行打包命令后工程目录下会先创建出 rpm 文件夹,内容如下:
rpm
|--bin
│ |--main.bat:应用执行入口(如果是Linux系统,入口是main.sh)
|--data:存放应用运行所需要的图片、视频、文本、配置等数据
|--dependence
│ |--modelbox_requirements.txt:运行依赖的外部库在此文件定义
|--etc
│ |--flowunit:应用所需的功能单元存放在此目录
│ │ |--cpp:存放C++功能单元编译后的动态链接库
│ │ |--draw_passenger_bbox:客流画图功能单元
│ │ |--object_tracker:目标跟踪功能单元
│ │ |--yolov7_post:头肩部检测使用的是YOLO7模型,此处即为后处理功能单元
|--graph:存放流程图,其中默认流程图与工程同名
│ |--modelbox.conf:modelbox相关配置
│ |--passenger_flow_HiLens.toml:默认流程图,应用启动时将使用该流程图
|--model:推理功能单元目录
|--python-embed:内置的Python运行环境与三方库
|--sdk_modelbox-win10-x64:当前技能使用的ModelBox SDK
│ |--bin:ModelBox SDK依赖的工具与库
│ |--flowunit:ModelBox SDK内置的功能单元
之后就会根据 rpm 文件夹,在工程目录下创建出名为 [project_name].rpm 的rpm包。可以看到,除了应用本身的流程图、功能单元等内容外,还会将当前应用使用的 ModelBox SDK
打包进去,因此,该rpm包可以在其他设备上运行而不需要再安装 ModelBox SDK
。
打包好的技能需要放到华为云 OBS 中,记住技能路径。
打开HiLens
管理控制台的 设备管理 页面,选择待部署的设备,点击右侧的 部署 按钮:
在部署页面,首先填写部署名称(自己命名,跟技能包名称无关),设备不需要手动选择,默认会显示上一步待部署的设备:
技能来源选择 自定义,填写技能名称(自己命名,跟技能包名称无关),技能格式选择 技能包,填写版本号,最后选择技能包在OBS中的位置,点击 下一步:
技能部署只是将技能包下发到设备上,启动应用还需要添加作业和配置参数。在HiLens控制台的设备管理页面,点击待部署的设备进入设备详情,在已下发的部署右侧点击 添加作业:
在弹出的作业配置页面,首先填写作业名称(自己命名,跟技能包名称无关),在参数配置板块,添加区域参数 area,类型选择 string,值槽填入区域的顶点坐标(使用逗号分隔的8个整数):
接着配置输入源,可以选择某个真实的、与部署设备处于同一局域网的摄像头,也可以选择设备上的视频文件,这里我们用本地视频文件做测试,填入Windows风格的路径;输出可以配置为设备的本地路径,也可以让结果输出到屏幕上直接观看,这里我们配置为屏幕输出,填写显示名称:
其他配置保持默认,点击作业页面的 确定 按钮,等待一会儿将会弹出本地窗口,看到区域客流统计的效果:
通过本教程,我们学习了应用的全局参数配置,本地测试与远程部署是如何使用的。在实际使用时,很多参数不可能在开发阶段写死,只有到部署阶段才能传入,此时远程管理平台就很有价值,华为云HiLens
平台就是为这类场景服务的。