云服务器内容精选

  • 步骤1:准备数据 华为HiLens在公共OBS桶中提供了人脸检测技能的示例模型,命名为“face_detection_model”,因此本文的操作示例使用此示例模型进行技能开发。您需要执行如下操作,将模型文件上传至您的OBS目录下,即准备工作中您创建的OBS目录“hilens-test1/face-detection”。 单击模型下载链接,将人脸检测案例示例模型“face_detection_model”下载至本地,在文件存放目录完成签名校验(Windows系统推荐使用Git工具),验证成功将返回OK。执行命令如下: echo ec5160c48f5ba6025dac696d7ff8b827f1902f6aa712b6969609cb5f290d149a face_detection_model.zip | sha256sum -c 在本地,将“face_detection_model”压缩包解压。例如解压至本地“face_detection_model”文件夹下,包括两个子文件夹“caffemodel+transfer”和“logic_code”。 参考上传文件,将“caffemodel+transfer”文件夹下的3个文件上传至“hilens-test1/face-detection”OBS路径下,包含caffe模型文件“.caffemodel”和“.prototxt”和配置文件“.cfg”。
  • 准备工作 已注册华为云帐号,且在使用华为HiLens前检查帐号状态,帐号不能处于欠费或冻结状态。 已购买HiLens Kit设备,并准备好网线,电脑,路由器,HDMI线,显示屏。 成功注册设备HiLens Kit设备至华为HiLens控制台,详情请参见注册HiLens Kit。 登录OBS服务,创建桶和文件夹,用于存放样例的模型数据。创建名称为“hilens-test1”OBS桶,创建名称为“face-detection”文件夹和名称为“face-detection-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+工具指南。
  • 准备工作 已注册华为云帐号,且在使用华为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。
  • 本地导入模型至HiLens Studio 在HiLens Studio界面单击左上角,左侧将展示开发项目的文件目录。 在开发项目的文件目录区选择文件夹或空白区域,右键单击选择“Upload Files...”,在本地选择已经开发好的模型文件并导入至HiLens Studio。 caffe模型:caffe模型文件“.caffemodel”和“.prototxt”,根据业务选择上传配置文件“.cfg”。 tensorflow模型:“.pb”模型文件,根据业务选择上传配置文件“.cfg”。
  • 导入/转换模型操作 针对本地开发的模型,首先需要导入模型至HiLens Studio。针对非“om”格式的模型,还需要在HiLens Studio进行模型转换。 导入和转换模型的操作流程如图1所示,操作指引如表1所示。 图1 操作流程 表1 导入/转换模型操作 操作 操作方式 操作指引 步骤一:导入模型至HiLens Studio 方式一:从本地导入 本地导入模型至HiLens Studio 方式二:从OBS导入 OBS导入模型至HiLens Studio 步骤二:在HiLens Studio转换模型 方式一:使用命令行转换模型 命令行转换模型 方式二:通过HiLens Studio界面转换模型 界面转换模型
  • 界面转换模型 导入模型至HiLens Studio后,在HiLens Studio界面打开一个技能项目。 单击HiLens Studio界面左侧的。 左侧将显示开发项目的文件目录,详细说明请见项目文件说明。 图3 文件目录 右键单击文件夹“model”,单击“Model Convertion”。 弹出“Model Convertion”对话框。 按表2填写模型转换的信息,单击“OK”。 图4 Model Convertion 表2 Convert Model参数说明 参数 说明 Model Path 待转换的模型文件在技能项目文件中的位置。一般将模型导入至文件夹“model”。 Configuration 待转换模型的配置文件在技能项目文件中的位置。例如“model/aipp_rgb.cfg”。 Output Path 模型转换后输出位置。 Type 模型转换的类型,包括“TF-FrozenGraph-To-Ascend-HiLens”、“Caffe to Ascend”。 “TF-FrozenGraph-To-Ascend-HiLens” 支持将Tensorflow frozen graph模型转换成可在ascend芯片上运行的模型。 “Caffe to Ascend” 支持将Caffe模型转换成可在ascend芯片上运行的模型。 Advanced Options 当模型转换类型为“TF-FrozenGraph-To-Ascend-HiLens”时,可填写高级选项,包括张量形状、转换输出节点等参数选项,详情请见表3。 表3 Advanced Options 参数名称 参数说明 Input Tensor Shape 输入张量形状。若在上文“模型来源”中,选择需要转换格式的模型(非om格式模型),并且转换类型是“Tensorflow frozen graph 转 Ascend”或“Tensorflow SavedModel 转 Ascend”时,需要填写输入张量形状。 张量形状即模型输入数据的shape,输入数据格式为NHWC,如“input_name:1,224,224,3”,必填项。“input_name”必须是转换前的网络模型中的节点名称。当模型存在动态shape输入时必须提供。例如“input_name1:?,h,w,c”,该参数必填,其中“?”为batch数,表示1次处理的图片数量,需要根据实际情况填写,用于将动态shape的原始模型转换为固定shape的离线模型。 如果存在多个输入,请以分号(;)隔开。 out_nodes 转换输出节点,即指定输出节点,例如“node_name1:0;node_name1:1;node_name2:0”,其中“node_name”必须是模型转换前的网络模型中的节点名称,冒号后的数字表示第几个输出,例如“node_name1:0”,表示节点名称为“node_name1”的第0个输出。 input_format 输入数据格式,默认是“NHWC”,如果实际是“NCHW”的话,需要通过此参数指定“NCHW”。 net_format 优选数据格式,即指定网络算子优先选用的数据格式,“ND(N=4)”和“5D”。仅在网络中算子的输入数据同时支持“ND”和“5D”两种格式时,指定该参数才生效。“ND”表示模型中算子按“NCHW”转换成通用格式,“5D”表示模型中算子按华为自研的5维转换成华为格式。“5D”为默认值。 fp16_high_precsion 生成高精度模型,指定是否生成高精度“FP16 Davinci”模型。 0为默认值,表示生成普通“FP16 Davinci”模型,推理性能更好。 1表示生成高精度“FP16 Davinci”模型,推理精度更好。 output_type 网络输出数据类型,“FP32”为默认值,推荐分类网络、检测网络使用;图像超分辨率网络,推荐使用“UINT8”,推理性能更好。
  • 模型要求 导入的模型可为“.om”格式、“.pb”格式或“.caffemodel”格式,其中“.om”格式的模型才可以在HiLens Kit上运行,“.pb”格式或“.caffemodel”格式的模型在导入HiLens Studio之后,需要将模型转换至“.om”格式。 并非所有模型都能转换成功,进行导入(转换)模型操作前,请确认是否为“.om”模型支持的TensorFlow和Caffe算子边界,详情请见附录Caffe算子边界和Tensorflow算子边界。
  • 背景信息 在华为HiLens控制台开发技能时,会占用OBS资源,需要收取一定费用,收费规则请参见对象存储服务 OBS。 算法模型必须是.om格式,且满足华为HiLens的要求,详细可参考开发算法模型。 逻辑代码的存储方式有两种:“在线编辑代码”和“从OBS上传代码”。 如果您的代码逻辑较简单,建议直接在线编辑代码。 如果您的代码结构比较复杂,推荐用本地IDE开发完成后,使用OBS上传代码zip或tar.gz包的方式,上传操作可参见OBS快速入门。上传到OBS需要收取一定费用,收费规则请参见对象存储服务 OBS。 上传文件时,要求此OBS桶与您使用的华为HiLens处于同一区域。 若您从OBS上传代码,需要将所有代码文件压缩后上传,上传的文件必须为“.zip”或“tar.gz”格式,且入口文件必须在一级目录。如下示例所示,入口代码(“main.py”)在一级目录,其它的代码按需求自行设计,您可将模型与代码一起打包上传。 入口代码所在文件(如上面的main.py)通过参数【代码执行文件】进行配置,后面会有说明。 代码目录示例如下所示: skill/ |---main.py #入口文件,名称与新建技能的“代码配置”参数一致 |---depends/ #可选,用于存放模型文件 |---workspace/ #工作空间,用于存放技能生成的数据 |---data/ #用于存放运行时配置
  • 4. 运行时配置(可选) 图4 运行时配置-22 部分技能在运行的时候需要用户配置参数,比如人脸判断类的技能需要用户上传人脸库等。运行时配置就像是一个“钩子”,开发者把“钩子”放出去,用户运行技能的时候设置了这些配置项,HiLens就会帮开发者把“钩子”收回来,这时候在代码里面开发者就可以使用这些用户的设置。您可以在界面中单击添加配置标签,参考表3填写您的配置。 您还可以单击“预览JSON格式”查看“钩子”的格式。开发者通过HiLens Framework提供的get_skill_config接口获取技能配置的JSON格式,读取里面字段的值来使用用户的配置。 运行时配置JSON格式如下所示: { //全局配置 "Language": "enum", //视频分路配置 "multi_camera": [ //该字段key值multi_camera固定,值表示摄像头分路配置 { "camera_names": [ //该字段key值camera_names固定,值表示该分组配置里包含了哪些摄像头 "cameraX", "cameraY" ], "FaceLib": { //配置名 "from": "file source", //文件类型值,表示文件来自哪个服务。比如OBS "path": "file path" //文件类型值,表示文件的路径 } } ], } 表3 运行时配置的参数说明 字段名称 说明 配置名 配置的名称,逻辑代码里面可用该字段获取该配置的值。运行时配置指技能在运行的时候,由用户配置的内容。比如人脸判断技能需要用户上传人脸库等。需要说明的是,整个运行时配置是可选的,但如果添加了一条配置,那么“配置名”、“配置说明”是必填项。 值类型 表示该配置项的值是什么类型的数据。 数值类型(int、float)、枚举类型、字符串和文件类型。 值约束 表示该配置可以设置的范围。跟值类型有关。 数值类型:用开闭区间的表示方法。如[1,100)表示大于等于1小于100。 字符串和文件:该项无需输入。 枚举:集合的表示方式,如{a,b}。 配置说明 说明该配置的作用,以及配置方法。该字段非常重要,用户会根据该字段的说明来配置,所以如果有运行时配置,开发者一定要在这里解释清楚。 配置对象 HiLens Kit可以连接多个(个数不大于设备上所安装技能的支持通道数之和)摄像头,所以可以开发支持多路视频的技能。 选择“视频”,则表示该配置是可以针对设备上每个摄像头视频进行配置的,比如摄像头1和摄像头2采用不同的人脸库。 选择“全局”,则表示设备上所有摄像头都用同一个配置值。
  • 上传数据至OBS 使用 ModelArts Pro 进行应用开发时,您需要将数据上传至OBS桶中。 首先需要获取访问OBS权限,在未进行委托授权之前,无法使用此功能。您需要提前获得OBS授权,详情请见配置访问权限。 已创建用于存储数据的OBS桶及文件夹,且数据存储的OBS桶与ModelArts Pro在同一区域(目前仅支持华为-北京四),详情请见创建OBS桶。 上传数据至OBS,OBS上传数据的详细操作请参见《对象存储服务快速入门》。 您在创建OBS桶时,需保证您的OBS桶与ModelArts Pro在同一个区域。 建议根据业务情况及使用习惯,选择OBS使用方法。 如果您的数据量较小(小于100MB)或数据文件较少(少于100个),建议您使用控制台上传数据。控制台上传无需工具下载或多余配置,在少量数据上传时,更加便捷高效。 如果您的数据量较大或数据文件较多,建议选择OBS Browser+或obsutil工具上传。OBS Browser+是一个比较常用的图形化工具,支持完善的桶管理和对象管理操作。推荐使用此工具创建桶或上传对象。obsutil是一款用于访问管理OBS的命令行工具,对于熟悉命令行程序的用户,obsutil是执行批量处理、自动化任务较好的选择。 如果您的业务环境需要通过API或SDK执行数据上传操作,或者您习惯于使用API和SDK,推荐选择OBS的API或SDK方法创建桶和上传对象。 上述说明仅罗列OBS常用的使用方式和工具,更多OBS工具说明,请参见《OBS工具指南》。
  • 查看数据 您可根据数据输出类型,查看设备数据以及技能的运行效果,技能输出方式请见表1。 视频数据大多数技能通过设备的HDMI接口输出到显示屏,少数视频数据输出到服务器查看。请前往“技能市场”,在“技能详情”页面的“产品描述”中查看此技能的输出设置。例如,明星脸判断技能,其描述为“可以通过HDMI查看”,表示此技能部署后,需通过显示屏查看技能运行效果。 除“HDMI”输出方式以外,其他输出方式的技能存储在OBS中,需根据配置数据存储位置(OBS存储路径)查看数据。 表1 技能输出方式 方式 查看数据说明 HDMI 直接通过设备的HDMI接口输出到显示屏。 RTMP 实时输出到服务器供用户查看,服务器地址请查看技能“产品描述”。 H264_FILE 以文件的方式输出到OBS供用户查看。 OBS文件路径请见配置数据存储位置(OBS存储路径)。
  • 前提条件 普通用户成功将购买的技能安装到设备上,详情请参见安装技能。 开发者成功将技能部署到设备上,详情请参见安装和调试技能。 技能输出模块中定义了将数据输出至OBS的场景,针对此类技能,才能通过数据管理页面查看数据。 如果您的技能开发者,您需要查看自己开发的技能在设备上的运行效果,在开发技能时,您需要指定数据存储至OBS中才能保证可以通过管理控制台下载。 如果您是技能使用者,需要在技能市场中,通过技能详情页面了解此技能是否将数据存储至OBS中。
  • 手动收集日志 当前设备固件版本在1.3.3及以后版本,需要手动收集日志。 在华为HiLens管理控制台,单击左侧导航栏“数据管理(Beta)”,进入“数据管理”页面。 单击选中日志上传失败的设备,然后单击右上角的“保存所有日志”。 弹出“上传日志”对话框。 图2 保存日志 勾选需要上传到OBS的设备日志,单击“确定”。 等待日志收集。 日志按需收集,系统日志文件较大,收集耗时较长。 图3 上传日志 一般5分钟以后,待日志收集完成,在“数据管理”页面单击设备卡片,进入对应文件夹下载日志文件压缩包至本地,即可查看日志。
  • 参数配置 部分技能在运行的时候,需要用户配置相关的参数。比如一般人脸判断的技能都需要用户上传人脸库,运行技能时就需要配置相关的参数。 单击“添加参数”,按表3填写。 表3 参数配置说明 参数 说明 参数名称 参数名。必填参数。技能或容器镜像里可用该参数获取该参数的值。用户在添加技能作业时需要配置参数名称和参数的值。 类型 参数值的类型,表示该参数项的值是什么类型的数据。支持“string”、“int”、“float”、“object”类型。 必填 参数是否必填。 固定值 参数是否为固定值。 默认值 参数的默认值。如果参数为固定值,参数的默认值必填。 最大值 如果参数类型为“int”和“float”,则需要设置参数的最大值。 最小值 如果参数类型为“int”和“float”,则需要设置参数的最小值。 步长 如果参数类型为“int”和“float”,则需要设置参数的步长。 参数说明 填写参数相关说明,比如参数值的范围说明等。