ModelBox
新手入门
【ModelBox客流分析实战营】应用参数配置与HiLens部署

发布于28个月以前

  • 1
  • 0
  • 325

发布于28个月以前

应用参数配置与HiLens部署

区域客流统计 案例中,其中的区域参数(围成区域的顶点坐标)配置在功能单元中,但是在实际场景中其实是不可行的,这种应用的全局参数只有等部署时视频/摄像头画面确定了才能定下来,不可能在开发阶段就配置好了。本文介绍这种全局参数在ModelBox中如何配置与使用,这类应用如何使用HiLens部署与配置。

1. 技能开发

这个应用对应的ModelBox版本已经做成模板放在华为云OBS中,可以用sdk中的solution.bat工具下载,接下来我们给出该应用在ModelBox中的完整开发过程:

1)下载模板

执行.\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目录下。

2)创建工程

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工程,工程结构与 区域客流统计 案例中一致,流程图也是一样的,这里不再赘述。

3)应用参数配置

区域客流统计 案例中,区域参数配置在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 功能单元可以继续使用。

4)用启动脚本执行应用

启动应用前执行.\build_project.sh进行工程构建,该脚本将编译自定义的C++功能单元(本应用不涉及)、将应用运行时会用到的配置文件转码为Unix格式(防止执行过程中的格式错误)、安装第三方依赖库:

PS ███> .\build_project.sh
...
PS ███>

然后执行.\bin\main.bat运行应用:

PS ███> .\bin\main.bat
...

运行结束后在hilens_data_dir目录下生成了passenger_flow_result.mp4文件,可以打开查看:

可以看到,效果与 区域客流统计 案例一致,说明参数配置与获取是正常的。

2. 技能部署

上面介绍的是开发测试阶段的应用参数配置,技能开发好之后,如果想部署到其他设备上运行,不可能事先就得到输入输出和参数,然后配置在技能里。此时可以借助用于端边设备与应用管理的华为云 HiLens 平台,需要注意的是,用于部署的设备必须注册和激活,操作指南可参考 设备注册文档设备激活文档

1)技能打包

首先需要将开发好的技能打包成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 中,记住技能路径。

2)技能部署

打开HiLens管理控制台的 设备管理 页面,选择待部署的设备,点击右侧的 部署 按钮:

在部署页面,首先填写部署名称(自己命名,跟技能包名称无关),设备不需要手动选择,默认会显示上一步待部署的设备:

技能来源选择 自定义,填写技能名称(自己命名,跟技能包名称无关),技能格式选择 技能包,填写版本号,最后选择技能包在OBS中的位置,点击 下一步

3)添加作业

技能部署只是将技能包下发到设备上,启动应用还需要添加作业和配置参数。在HiLens控制台的设备管理页面,点击待部署的设备进入设备详情,在已下发的部署右侧点击 添加作业

在弹出的作业配置页面,首先填写作业名称(自己命名,跟技能包名称无关),在参数配置板块,添加区域参数 area,类型选择 string,值槽填入区域的顶点坐标(使用逗号分隔的8个整数):

接着配置输入源,可以选择某个真实的、与部署设备处于同一局域网的摄像头,也可以选择设备上的视频文件,这里我们用本地视频文件做测试,填入Windows风格的路径;输出可以配置为设备的本地路径,也可以让结果输出到屏幕上直接观看,这里我们配置为屏幕输出,填写显示名称:

4)启动技能

其他配置保持默认,点击作业页面的 确定 按钮,等待一会儿将会弹出本地窗口,看到区域客流统计的效果:

3. 小结

通过本教程,我们学习了应用的全局参数配置,本地测试与远程部署是如何使用的。在实际使用时,很多参数不可能在开发阶段写死,只有到部署阶段才能传入,此时远程管理平台就很有价值,华为云HiLens平台就是为这类场景服务的。

LLM初学者

作者相关内容

【2022 ModelBox实战营】第一个应用
发布于30个月以前
【2022 ModelBox实战营】通用Python功能单元
发布于30个月以前
【ModelBox客流分析实战营】ModelBox端云协同AI开发套件(Windows)SDK安装篇
发布于28个月以前
【2022 ModelBox实战营】推理功能单元
发布于30个月以前
ModelBox开发案例 - 使用YOLO v3做口罩检测
发布于34个月以前

暂无数据

热门内容推荐

ModelArts JupyterLab常见问题解决办法
ModelArts开发者 发布于45个月以前
为医生打造专属数字分身!华为云联合万木健康打造医疗医学科普和患者教育数字人引擎
HWCloudAI 发布于20个月以前
图数据库 | 聊聊超级快的图上多跳过滤查询
弓役是也 发布于23个月以前
ModelArts准备工作_简易版
ModelArts开发者 发布于46个月以前
”智蔗见智·向新而生”广西第二届人工智能大赛baseline使用教程
追乐小王子 发布于31个月以前

暂无数据