手势识别技能开发(ModelArts+华为HiLens)
ModelArts是面向AI开发者的一站式开发平台,您可以使用ModelArts开发一个用于华为HiLens平台的算法模型,然后基于您自定义的算法模型和逻辑代码新建技能。
本章节提供了一个手势识别技能的样例,介绍从模型训练到查看技能效果,新建一个全新技能的全流程,帮助您快速熟悉华为HiLens技能开发的使用过程。
开始使用样例前,请仔细阅读准备工作罗列的要求,提前完成准备工作。具体技能开发的步骤如下所示:
- 步骤1:准备数据
- 步骤2:创建数据集
- 步骤3:订阅算法
- 步骤4:使用订阅算法创建训练作业
- 步骤5:转换模型
- 步骤6:导入模型至华为HiLens
- 步骤7:新建技能
- 步骤8:(可选)发布技能
- 步骤9:安装技能
- 步骤10:启动技能
准备工作
- 已注册华为云帐号,且在使用华为HiLens前检查帐号状态,帐号不能处于欠费或冻结状态。
- 已购买HiLens Kit设备,并准备好网线,电脑,路由器,HDMI线,显示屏。
- 成功注册设备HiLens Kit设备至华为HiLens控制台,详情请参见注册HiLens Kit。
- 登录OBS服务,创建桶和文件夹,用于存放样例的训练数据。创建名称为“hilens-gesture”OBS桶,区域选择“华北-北京四”,创建如下文件夹:
- “gesture-data”:用于存放训练模型的数据。
- “gesture-data-output”:用于存放模型输出数据。
- “gesture-data-record”:用于存放日志。
- “gesture-convert-output”:用于存放转换模型后的输出文件。
创建OBS桶和文件夹的操作指导请参见创建桶和新建文件夹。为保证模型数据能正常访问,请务必保证创建的OBS桶与华为HiLens在同一区域。
占用OBS资源的操作均会收取一定费用,收费规则请参见对象存储服务 OBS。
步骤1:准备数据
华为HiLens在公共OBS桶中提供了手势识别技能的用于模型训练的示例数据,命名为“gesture_recognition_data”,因此本文的操作示例使用此示例模型进行技能开发。您需要执行如下操作,将模型文件上传至您的OBS目录下,即准备工作中您创建的OBS目录“hilens-gesture/gesture-recognition”。
- 单击示例数据下载链接,将手势识别案例示例数据“gesture_recognition_data”下载至本地,在文件存放目录完成签名校验(Windows系统推荐使用Git工具),验证成功将返回OK。执行命令如下:
echo 244e86ec55fd54461b5f5eff53a7867f43f72f29778babd3fe89a20e860ca529 gesture_recognition_data.zip | sha256sum -c
- 在本地,将“gesture_recognition_data”压缩包解压。例如解压至本地“gesture_recognition_data”文件夹下,包括1个子文件夹“gesture-data”和1个“.py”文件。
- 参考上传文件,利用OBS Browser+工具将“gesture_recognition_data/gesture-data”文件夹下的所有数据上传至“hilens-gesture/gesture-data”OBS路径下,OBS Browser+使用方法请参见OBS Browser+工具指南。
步骤2:创建数据集
- 登录ModelArts管理控制台,根据要求完成访问权限配置。
- 在左侧菜单栏中选择“数据管理>数据集”。
- 在数据集管理页面,单击“创建数据集”。在“创建数据集”页面,“数据集输入位置”选择步骤1:准备数据中上传的数据存储目录(OBS路径),需选择到具体图片存储的父目录。“数据集输出位置”,请指定一个空目录,且此目录不能是数据来源目录下的子目录。“标注类型”选择“图像分类”。
图1 创建数据集
- 参数填写完成后,单击“创建”,完成数据集创建。
进入数据集管理页面,等待数据同步完毕,您可以单击数据集名称进入概览页面,了解进度。由于提供的样例数据集已完成数据标注,当数据集概览页面显示图片已标注,表示数据已同步完成。图2 标注进展
- 发布数据集。
在数据集管理页面,单击“发布”,在弹出窗口中,根据界面提示进行配置。由于本示例使用的算法,必须使用切分的数据集进行训练,因此训练验证比例的参数必须设置,建议设置为“0.8”或“0.9”,表示训练集和验证集的比例为“8:2”或“9:1”。
- 单击“确定”完成发布数据集。
图3 发布数据集
步骤3:订阅算法
ModelArts官方提供了一个“ResNet_v1_50”,算法用途为图像分类,您可以使用此算法训练,得到所需的模型。目前“resnet_v1_50”算法发布在AI Gallery中。您可以前往AI Gallery,订阅此算法,然后同步至ModelArts中。
- 登录ModelArts管理控制台,在左侧菜单栏中选择“AI Gallery”。进入新版AI Gallery。
- 单击图像分类-ResNet_v1_50,进入算法详情页。
- 单击右侧的“订阅”,根据界面提示完成算法订阅。
此算法由ModelArts官方提供,目前免费开放。订阅算法完成后,页面的“订阅”按钮显示为“已订阅”。
- 单击详情页的“前往控制台”,此时弹出“选择云服务区域”对话框,选择ModelArts对应的区域,然后再单击“确定”。
页面将自动跳转至ModelArts的“算法管理>我的订阅”中同步对应的算法。
图5 选择云服务区域
- 在ModelArts管理控制台的算法管理页面,算法将自动同步至ModelArts中。
图6 同步算法
步骤4:使用订阅算法创建训练作业
算法订阅成功后,算法将呈现在“算法管理>我的订阅”中,您可以使用订阅的“ResNet_v1_50”算法创建训练作业,获得模型。
- 进入“算法管理>我的订阅”页面,选择订阅的“ResNet_v1_50”算法,单击左侧的小三角展开算法,在版本列表中,单击“创建训练作业”。
图7 创建训练作业
- 在“创建训练作业”页面,参考如下说明填写关键参数。
- 参数填写完成后,单击“提交”,确认规格,单击“确定”,完成训练作业创建。
- 进入“训练管理>训练作业(New)”页面,等待训练作业完成。
训练作业运行需要几分钟时间,请耐心等待。根据经验,选择样例数据集,使用加速卡资源运行,预计3分钟左右可完成。
当训练作业的状态变更为“已完成”时,表示已运行结束。
图8 查看训练作业状态
您可以单击训练作业名称,进入详情页面,了解训练作业的“配置信息”、“日志”、“资源占用情况”和“评估结果”等信息。
您也可以在配置的“训练输出位置”对应的OBS目录下获得训练生成的模型。
步骤5:转换模型
- 在ModelArts管理控制台中,选择左侧导航栏的“AI应用管理 > 模型转换”,进入模型转换列表页面。
- 单击左上角的“创建任务”,进入任务创建任务页面。
- 在“创建任务”页面,按表1填写相关信息,如图9所示。
表1 创建任务参数 参数
推荐填写
“名称”
输入“gesture-recognition”。
“描述”
输入判断手势技能的简短描述,如:将判断手势技能模型转换为“.om”格式。
“输入框架”
选择“TensorFlow”。
“转换输入目录”
选择转换输入目录为“hilens-gesture/gesture-data-output/frozen_graph”。
“输出框架”
选择“MindSpore”。
“转换输出目录”
选择转换输出目录为“hilens-gesture/gesture-convert-output”。
“转换模板”
选择“TF-FrozenGraph-To-Ascend-HiLens”。
“高级选项”
“输入张量形状”设置为“images:1,224,224,3”,其他选项均为默认值。
- 任务信息填写完成后,单击右下角“立即创建”。
创建完成后,系统自动跳转至“模型压缩/转换列表”中。刚创建的转换任务将呈现在界面中,其“任务状态”为“初始化”。任务执行过程预计需要几分钟到十几分钟不等,请耐心等待,当“任务状态”变为“成功”时,表示任务运行完成并且模型转换成功。
如果“任务状态”变为“失败”,建议单击任务名称进入详情页面,查看日志信息,根据日志信息调整任务的相关参数并创建新的转换任务。
步骤6:导入模型至华为HiLens
- 登录华为HiLens管理控制台,在左侧导航栏中选择“技能开发>模型管理”,进入“模型管理”页面。
华为HiLens控制台技能开发所在的区域应和在ModelArts AI Gallery订阅算法的区域图4一致。
- 在“模型管理”页面,单击右上角的“导入(转换)模型”。
- 在“导入模型”页面,然后参考表2填写参数,信息确认无误后单击“确定”完成导入,如图10所示。
表2 导入模型参数 参数
推荐填写
“名称”
输入“gesture-recognition”。
“版本”
输入“1.0.0”。
“描述”
输入导入模型的描述。
“模型来源”
单击“从ModelArts导入”,在右侧下拉框中选择“OM(从转换任务中获取)”,然后在下方转换任务列表中勾选之前在步骤5:转换模型转换的模型“gesture-recognition”。
模型导入后,将进入“模型管理”页面,您导入的模型可从列表中查看模型状态,导入成功后模型“状态”为“导入成功”。
步骤7:新建技能
- 在华为HiLens管理控制台的左侧导航栏中选择“技能开发>技能管理”,进入技能列表。
- 在“技能管理”页面,单击右上角“新建技能”,进入“创建技能”页面。
- 在“创建技能”页面,在“技能模板”中选择“使用空模板”后,填写基本信息和技能内容。
基本信息
按表3填写技能的基本信息,如图11所示。表3 技能基本信息参数 参数
推荐填写
“技能模板”
选择“使用空模板”。
“技能名称”
输入“Gesture_Recognition”。
“技能版本”
输入“1.0.0”。
“适用芯片”
默认为“Ascend310”。
“检验值”
根据步骤1:准备数据所下载的“手势识别案例”文件夹中的“main.py”文件中init函数参数的值的代码,这里检验值应输入“gesture”。此处的检验值和init函数参数值应保持一致。
“应用场景”
选择“其他”,文本框中输入“手势识别”。
“技能图标”
上传技能图标。
“技能图片”
用来向用户介绍技能的使用或技能的效果,可不上传。
“OS平台”
选择“Linux”系统。
“描述”
输入技能的描述。
技能内容
根据您的模型和逻辑代码情况,按表4填写技能内容,详细参数说明请参见技能内容。
表4 技能内容参数 参数
推荐填写
“技能格式”
选择“技能包”格式。
“运行时语言”
选择“Python3.7”。
“代码执行文件”
默认输入“index.py”。
“模型”
单击加号,您可以在弹出框中,选择导入的模型“gesture-recognition”。
“代码上传方式”
图12 技能内容
基本信息和技能内容填写完成后,您可以在界面右侧查看其配置参数值,如果某个字段填写错误,在右侧会显示一个小红叉。
- 确认信息无误后,单击“确定”完成技能创建。
图13 确认信息并完成新建技能
创建完成后,您的技能将进入“技能开发>技能管理”页面,且状态为“未发布”,您可以执行发布操作,将技能发布至技能市场;您也可以安装技能至设备,并查看设备使用技能效果。
步骤8:(可选)发布技能
- 在华为HiLens管理控制台,单击左侧导航栏“技能开发>技能管理”,进入“技能管理”页面。
- 选择需要发布的技能,单击右边的“发布”。
- 在弹出的“发布技能到技能市场”对话框中,按图14设置相关信息,单击“确定”。
表5 发布技能参数说明 参数字段
说明
发布服务
技能发布的服务位置。本样例选择“HiLens技能市场”。
计费策略
技能发布在技能市场的计费策略。可选择“免费”和“收费”。
计费模式
技能发布后的计费模式。
- 若选择“免费”计费策略,仅可选择“一次性”计费模式。
- 若选择“收费”计费策略,可选择“包年/包月”和“一次性”两种计费模式。
计量单位
每份License可用在设备上的规格。有“路数”和“并发量”两种计量方式。若以“路数”规格,一份License可安装在设备上使用一路视频。
规格限制
技能在同一设备上最多可以处理视频的路数,或最大并发量。
隐私声明
技能涉及到的用户隐私声明。
提交之后,将发送至华为HiLens后台,由工作人员进行审核,3个工作日之内完成审核,请您耐心等待。当审核通过后,状态将变更为“审核通过,已发布”。
步骤9:安装技能
- 在“技能开发>技能管理”页面,选择已开发的的技能,单击右侧操作列“安装”。
- 勾选已注册且状态在线的设备,单击“安装”,安装成功后单击“确定”,完成安装技能操作,如图15所示。
安装成功后,您可以启动技能查看技能输出数据。
步骤10:启动技能
- 使用HDMI视频线缆连接HiLens Kit视频输出端口和显示器。
- 单击左侧导航栏“设备管理>设备列表”,进入“设备列表”页面。
- 单击已注册设备的“技能管理”,查看技能状态已安装的手势识别技能状态为“停止”,单击操作列的“启动”,并单击“确定”,确定启动技能运行在端侧设备上。
等待一会,当状态变为“运行中”,则技能成功运行在端侧设备上。
安装技能的状态说明如图16所示。
表6 安装技能状态 状态名
状态说明
停止
停止状态,技能停止运行在端侧设备上。
运行中
运行状态,技能成功安装在端侧设备。
技能处于“运行中”状态时,您可以通过显示器查看技能输出的视频数据,此样例所开发的手势识别技能可识别一般的手势,技能输出的视频中会用方框标记出手势,并标记出手势含义。