
# 手势识别技能开发（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](https://support.huaweicloud.com/usermanual-hilens/hilens_02_0048.html)。
- 登录OBS服务，创建桶和文件夹，用于存放样例的训练数据。创建名称为"hilens-gesture"OBS桶，区域选择"华北-北京四"，创建如下文件夹：
  - "gesture-data"：用于存放训练模型的数据。
  
  - "gesture-data-output"：用于存放模型输出数据。
  
  - "gesture-data-record"：用于存放日志。
  
  - "gesture-convert-output"：用于存放转换模型后的输出文件。
  
  
  创建OBS桶和文件夹的操作指导请参见[创建桶](https://support.huaweicloud.com/usermanual-obs/zh-cn_topic_0045829088.html)和[新建文件夹](https://support.huaweicloud.com/usermanual-obs/obs_03_0316.html)。为保证模型数据能正常访问，请务必保证创建的OBS桶与华为HiLens在同一区域。
  占用OBS资源的操作均会收取一定费用，收费规则请参见[对象存储服务 OBS](https://www.huaweicloud.com/pricing.html?tab=detail#/obs)。
  
 
 #### 步骤1：准备数据
华为HiLens在公共OBS桶中提供了手势识别技能的用于模型训练的示例数据，命名为"gesture_recognition_data"，因此本文的操作示例使用此示例模型进行技能开发。您需要执行如下操作，将模型文件上传至您的OBS目录下，即准备工作中您创建的OBS目录"hilens-gesture/gesture-recognition"。
1. 单击[示例数据下载链接](https://hilens-guide-cn-north-4.obs.cn-north-4.myhuaweicloud.com/gesture_recognition_data.zip)，将手势识别案例示例数据"gesture_recognition_data"下载至本地，在文件存放目录完成签名校验（Windows系统推荐使用Git工具），验证成功将返回OK。执行命令如下：
   
   ```
   echo 244e86ec55fd54461b5f5eff53a7867f43f72f29778babd3fe89a20e860ca529 gesture_recognition_data.zip | sha256sum -c
   ```
   
   
2. 在本地，将"gesture_recognition_data"压缩包解压。例如解压至本地"gesture_recognition_data"文件夹下，包括1个子文件夹"gesture-data"和1个".py"文件。
3. 参考[上传文件](https://support.huaweicloud.com/browsertg-obs/obs_03_1061.html)，利用OBS Browser+工具将"gesture_recognition_data/gesture-data"文件夹下的所有数据上传至"hilens-gesture/gesture-data"OBS路径下，OBS Browser+使用方法请参见[OBS Browser+工具指南](https://support.huaweicloud.com/browsertg-obs/obs_03_1000.html)。
 
 #### 步骤2：创建数据集
1. 登录[ModelArts管理控制台](https://console.huaweicloud.com/modelarts/)，根据要求完成[访问权限配置](https://support.huaweicloud.com/usermanual-standard-modelarts/umn-standard-modelarts-0003.html)。
2. 在左侧菜单栏中选择"数据管理\>数据集"。
3. 在数据集管理页面，单击"创建数据集"。在"创建数据集"页面，"数据集输入位置"选择[步骤1：准备数据]中上传的数据存储目录（OBS路径），需选择到具体图片存储的父目录。"数据集输出位置"，请指定一个空目录，且此目录不能是数据来源目录下的子目录。"标注类型"选择"图像分类"。
   
   图1创建数据集   
   ![](https://support.huaweicloud.com/bestpractice-hilens/zh-cn_image_0257844015.png "点击放大")
   
   
4. 参数填写完成后，单击"创建"，完成数据集创建。 
   进入数据集管理页面，等待数据同步完毕，您可以单击数据集名称进入概览页面，了解进度。由于提供的样例数据集已完成数据标注，当数据集概览页面显示图片已标注，表示数据已同步完成。
   图2标注进展   
   ![](https://support.huaweicloud.com/bestpractice-hilens/zh-cn_image_0256632369.png)
   
   
5. 发布数据集。 
   在数据集管理页面，单击"发布"，在弹出窗口中，根据界面提示进行配置。由于本示例使用的算法，必须使用切分的数据集进行训练，因此训练验证比例的参数必须设置，建议设置为"0.8"或"0.9"，表示训练集和验证集的比例为"8：2"或"9：1"。
   
   
6. 单击"确定"完成发布数据集。 
   图3发布数据集   
   ![](https://support.huaweicloud.com/bestpractice-hilens/zh-cn_image_0000001129413773.png "点击放大")
   
   
 
 #### 步骤3：订阅算法
ModelArts官方提供了一个"ResNet_v1_50"，算法用途为图像分类，您可以使用此算法训练，得到所需的模型。目前"resnet_v1_50"算法发布在AI Gallery中。您可以前往AI Gallery，订阅此算法，然后同步至ModelArts中。
1. 登录ModelArts管理控制台，在左侧菜单栏中选择"AI Gallery"。进入新版AI Gallery。
2. 单击[图像分类-ResNet_v1_50](https://developer.huaweicloud.com/develop/aigallery/algo/detail?id=40b66195-5bbe-463d-b8a2-03e57073538d)，进入算法详情页。
3. 单击右侧的"订阅"，根据界面提示完成算法订阅。 
   此算法由ModelArts官方提供，目前免费开放。订阅算法完成后，页面的"订阅"按钮显示为"已订阅"。
   
   
4. 单击详情页的"前往控制台"，此时弹出"选择云服务区域"对话框，选择ModelArts对应的区域，然后再单击"确定"。 
   页面将自动跳转至ModelArts的"算法管理\>我的订阅"中同步对应的算法。
   图4前往控制台   
   ![](https://support.huaweicloud.com/bestpractice-hilens/zh-cn_image_0289380587.png "点击放大")
   图5选择云服务区域   
   ![](https://support.huaweicloud.com/bestpractice-hilens/zh-cn_image_0000001082300890.png "点击放大")
   
   
5. 在ModelArts管理控制台的算法管理页面，算法将自动同步至ModelArts中。 
   图6同步算法   
   ![](https://support.huaweicloud.com/bestpractice-hilens/zh-cn_image_0000001187131782.png "点击放大")
   
   
 
 #### 步骤4：使用订阅算法创建训练作业
算法订阅成功后，算法将呈现在"算法管理\>我的订阅"中，您可以使用订阅的"ResNet_v1_50"算法创建训练作业，获得模型。
1. 进入"算法管理\>我的订阅"页面，选择订阅的"ResNet_v1_50"算法，单击左侧的小三角展开算法，在版本列表中，单击"创建训练作业"。 
   图7创建训练作业   
   ![](https://support.huaweicloud.com/bestpractice-hilens/zh-cn_image_0000001232529871.png "点击放大")
   
   
2. 在"创建训练作业"页面，参考如下说明填写关键参数。 
   - "算法\> 我的订阅"：系统默认选择订阅的算法，请勿随意修改。
   
   - "训练输入"：选择数据集，然后从下拉框中选择[步骤2：创建数据集]中创建好的数据集。数据集一定要选择切分训练集比例的版本，否则将会导致训练失败。
   
   - "训练输出"：选择训练结果的存储位置（OBS路径）。为避免出现错误，建议选择一个空目录用作"训练输出"。本样例选择[准备工作]中已创建的OBS桶"hilens-gesture"和文件夹"gesture-data-output"。
   
   - "超参"：建议采用默认值。如需进行调优，可参考[算法详情页](https://developer.huaweicloud.com/develop/aigallery/algo/detail?id=40b66195-5bbe-463d-b8a2-03e57073538d)的训练参数说明。
   
   - "资源类型"：建议选择加速卡规格的资源类型，训练效率会更高一些。
   
   
   
   
3. 参数填写完成后，单击"提交"，确认规格，单击"确定"，完成训练作业创建。
4. 进入"训练管理\>训练作业（New）"页面，等待训练作业完成。 
   训练作业运行需要几分钟时间，请耐心等待。根据经验，选择样例数据集，使用加速卡资源运行，预计3分钟左右可完成。
   当训练作业的状态变更为"已完成"时，表示已运行结束。
   图8查看训练作业状态   
   ![](https://support.huaweicloud.com/bestpractice-hilens/zh-cn_image_0000001186971806.png "点击放大")
   您可以单击训练作业名称，进入详情页面，了解训练作业的"配置信息"、"日志"、"资源占用情况"和"评估结果"等信息。
   您也可以在配置的"训练输出位置"对应的OBS目录下获得训练生成的模型。
   
   
 
 #### 步骤5：转换模型
1. 在ModelArts管理控制台中，选择左侧导航栏的"AI应用管理 \> 模型转换"，进入模型转换列表页面。
2. 单击左上角的"创建任务"，进入任务创建任务页面。
3. 在"创建任务"页面，按[表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"，其他选项均为默认值。                  |
      
   图9创建模型压缩/转换任务   
   ![](https://support.huaweicloud.com/bestpractice-hilens/zh-cn_image_0263663252.png "点击放大")
   
   
4. 任务信息填写完成后，单击右下角"立即创建"。 
   创建完成后，系统自动跳转至"模型压缩/转换列表"中。刚创建的转换任务将呈现在界面中，其"任务状态"为"初始化"。任务执行过程预计需要几分钟到十几分钟不等，请耐心等待，当"任务状态"变为"成功"时，表示任务运行完成并且模型转换成功。
   如果"任务状态"变为"失败"，建议单击任务名称进入详情页面，查看日志信息，根据日志信息调整任务的相关参数并创建新的转换任务。
   
   
 
 #### 步骤6：导入模型至华为HiLens
1. 登录[华为HiLens管理控制台](https://console.huaweicloud.com/hilens/)，在左侧导航栏中选择"技能开发\>模型管理"，进入"模型管理"页面。
   
   ![](https://support.huaweicloud.com/bestpractice-hilens/public_sys-resources/note_3.0-zh-cn.png)
   华为HiLens控制台技能开发所在的区域应和在ModelArts AI Gallery订阅算法的区域[图4]一致。
   
   
2. 在"模型管理"页面，单击右上角的"导入（转换）模型"。
3. 在"导入模型"页面，然后参考[表2]填写参数，信息确认无误后单击"确定"完成导入，如[图10]所示。
   
    表2导入模型参数 
   | 参数     | 推荐填写                                                                                                                                 |
   |:---|:---|
   | "名称"   | 输入"gesture-recognition"。                                                                                                             |
   | "版本"   | 输入"1.0.0"。                                                                                                                           |
   | "描述"   | 输入导入模型的描述。                                                                                                                           |
   | "模型来源" | 单击"从ModelArts导入"，在右侧下拉框中选择"OM（从转换任务中获取）"，然后在下方转换任务列表中勾选之前在[步骤5：转换模型]转换的模型"gesture-recognition"。 |
      
   图10导入模型   
   ![](https://support.huaweicloud.com/bestpractice-hilens/zh-cn_image_0256632383.png "点击放大")
   模型导入后，将进入"模型管理"页面，您导入的模型可从列表中查看模型状态，导入成功后模型"状态"为"导入成功"。
   
   
 
 #### 步骤7：新建技能
1. 在华为HiLens管理控制台的左侧导航栏中选择"技能开发\>技能管理"，进入技能列表。
2. 在"技能管理"页面，单击右上角"新建技能"，进入"创建技能"页面。
3. 在"创建技能"页面，在"技能模板"中选择"使用空模板"后，填写基本信息和技能内容。 
   **基本信息**
   按[表3]填写技能的基本信息，如[图11]所示。
    表3技能基本信息参数 
   | 参数     | 推荐填写                                                                                                                                  |
   |:---|:---|
   | "技能模板" | 选择"使用空模板"。                                                                                                                            |
   | "技能名称" | 输入"Gesture_Recognition"。                                                                                                              |
   | "技能版本" | 输入"1.0.0"。                                                                                                                            |
   | "适用芯片" | 默认为"Ascend310"。                                                                                                                       |
   | "检验值"  | 根据[步骤1：准备数据]所下载的"手势识别案例"文件夹中的"main.py"文件中init函数参数的值的代码，这里检验值应输入"gesture"。此处的检验值和init函数参数值应保持一致。 |
   | "应用场景" | 选择"其他"，文本框中输入"手势识别"。                                                                                                                  |
   | "技能图标" | 上传技能图标。                                                                                                                               |
   | "技能图片" | 用来向用户介绍技能的使用或技能的效果，可不上传。                                                                                                              |
   | "OS平台" | 选择"Linux"系统。                                                                                                                          |
   | "描述"   | 输入技能的描述。                                                                                                                              |
      
   图11填写基本信息   
   ![](https://support.huaweicloud.com/bestpractice-hilens/zh-cn_image_0257820477.png "点击放大")
   **技能内容**
   根据您的模型和逻辑代码情况，按[表4]填写技能内容，详细参数说明请参见[技能内容](https://support.huaweicloud.com/usermanual-hilens/hilens_02_0022.html#section4)。
    表4技能内容参数 
   | 参数       | 推荐填写                                                                                                                                                                                                                                                                                                               |
   |:---|:---|
   | "技能格式"   | 选择"技能包"格式。                                                                                                                                                                                                                                                                                                         |
   | "运行时语言"  | 选择"Python3.7"。                                                                                                                                                                                                                                                                                                     |
   | "代码执行文件" | 默认输入"index.py"。                                                                                                                                                                                                                                                                                                    |
   | "模型"     | 单击加号，您可以在弹出框中，选择导入的模型"gesture-recognition"。                                                                                                                                                                                                                                                                        |
   | "代码上传方式" | 选择"在线编辑"，在代码编辑框中直接编辑代码，可直接复制[步骤1：准备数据]所下载的"手势识别案例"文件夹中的".py"文件中的代码内容，请核对代码中模型名称，保持代码中的模型名称与[步骤5：转换模型]的模型名称一致。此样例中模型名称应是"gesture-recognition.om"，如下所示。 ``` model   = hilens.Model(hilens.get_model_dir() + "gesture-recognition.om") ``` |
      
   图12技能内容   
   ![](https://support.huaweicloud.com/bestpractice-hilens/zh-cn_image_0257820520.png "点击放大")
   基本信息和技能内容填写完成后，您可以在界面右侧查看其配置参数值，如果某个字段填写错误，在右侧会显示一个小红叉。
   
   
4. 确认信息无误后，单击"确定"完成技能创建。 
   图13确认信息并完成新建技能   
   ![](https://support.huaweicloud.com/bestpractice-hilens/zh-cn_image_0257820794.png)
   
   
 
创建完成后，您的技能将进入"技能开发\>技能管理"页面，且状态为"未发布"，您可以执行发布操作，将技能发布至技能市场；您也可以安装技能至设备，并查看设备使用技能效果。
 #### 步骤8：（可选）发布技能
1. 在华为HiLens管理控制台，单击左侧导航栏"技能开发\>技能管理"，进入"技能管理"页面。
2. 选择需要发布的技能，单击右边的"发布"。
3. 在弹出的"发布技能到技能市场"对话框中，按[图14]设置相关信息，单击"确定"。
   
   图14发布技能   
   ![](https://support.huaweicloud.com/bestpractice-hilens/zh-cn_image_0257821542.png "点击放大")
   表5发布技能参数说明 
   | 参数字段 | 说明                                                                                                                                                                                                                                                                                           |
   |:---|:---|
   | 发布服务 | 技能发布的服务位置。本样例选择"HiLens技能市场"。                                                                                                                                                                                                                                                                 |
   | 计费策略 | 技能发布在技能市场的计费策略。可选择"免费"和"收费"。                                                                                                                                                                                                                                                                 |
   | 计费模式 | 技能发布后的计费模式。 - 若选择"免费"计费策略，仅可选择"一次性"计费模式。  - 若选择"收费"计费策略，可选择"包年/包月"和"一次性"两种计费模式。   |
   | 计量单位 | 每份License可用在设备上的规格。有"路数"和"并发量"两种计量方式。若以"路数"规格，一份License可安装在设备上使用一路视频。                                                                                                                                                                                                                        |
   | 规格限制 | 技能在同一设备上最多可以处理视频的路数，或最大并发量。                                                                                                                                                                                                                                                                  |
   | 隐私声明 | 技能涉及到的用户隐私声明。                                                                                                                                                                                                                                                                                |
      
   提交之后，将发送至华为HiLens后台，由工作人员进行审核，3个工作日之内完成审核，请您耐心等待。当审核通过后，状态将变更为"审核通过，已发布"。
   
   
 
 #### 步骤9：安装技能
1. 在"技能开发\>技能管理"页面，选择已开发的的技能，单击右侧操作列"安装"。
2. 勾选已注册且状态在线的设备，单击"安装"，安装成功后单击"确定"，完成安装技能操作，如[图15]所示。
   
   安装过程中，华为HiLens管理控制台会将技能包下发到设备。下发技能包需要一段时间，可以从进度条中看到技能安装进度，下发完成后"进度"栏会提示"安装成功"。
   图15安装成功   
   ![](https://support.huaweicloud.com/bestpractice-hilens/zh-cn_image_0257825461.png "点击放大")
   安装成功后，您可以启动技能查看技能输出数据。
   
   
 
 #### 步骤10：启动技能
1. 使用HDMI视频线缆连接HiLens Kit视频输出端口和显示器。
2. 单击左侧导航栏"设备管理\>设备列表"，进入"设备列表"页面。
3. 单击已注册设备的"技能管理"，查看技能状态已安装的手势识别技能状态为"停止"，单击操作列的"启动"，并单击"确定"，确定启动技能运行在端侧设备上。 
   等待一会，当状态变为"运行中"，则技能成功运行在端侧设备上。
   安装技能的状态说明如[图16]所示。
   图16查看技能状态   
   ![](https://support.huaweicloud.com/bestpractice-hilens/zh-cn_image_0257845508.png "点击放大")
   表6安装技能状态 
   | 状态名 | 状态说明               |
   |:---|:---|
   | 停止  | 停止状态，技能停止运行在端侧设备上。 |
   | 运行中 | 运行状态，技能成功安装在端侧设备。  |
      
   技能处于"运行中"状态时，您可以通过显示器查看技能输出的视频数据，此样例所开发的手势识别技能可识别一般的手势，技能输出的视频中会用方框标记出手势，并标记出手势含义。
   
   
 
