-
社区的各位大家好,我想问一下目前HiLens自带的摄像头有更多的说明文档吗?我想尝试修改摄像头的ISO和曝光时间这两个参数
-
ModelBox开发案例 - 使用YOLO v3做口罩检测本案例将使用YOLO v3模型,实现一个简单的口罩检测应用,最终效果如下所示: 本案例所需资源(代码、模型、测试数据等)已做成模板放到华为云上,查看和下载模板可以使用如下命令:Windows PC版本请使用solution.bat工具:PS ███\modelbox>: .\solution.bat -l ... Solutions name: mask_det_yolo3 ...结果中的mask_det_yolo3即为口罩检测模板,可使用如下命令下载模板:PS ███\modelbox>: .\solution.bat -s mask_det_yolo3 ...Linux开发板版本请使用solution.py脚本:rock@rock-3a:~/███/modelbox$ ./solution.py -l ... Solutions name: mask_det_yolo3 ...结果中的mask_det_yolo3即为口罩检测模板,可使用如下命令下载模板:rock@rock-3a:~/███/modelbox$ ./solution.py -s mask_det_yolo3 ...solution.bat/solution.py工具的参数中,-l 代表list,即列出当前已有的模板名称;-s 代表solution-name,即下载对应名称的模板。下载下来的模板资源,将存放在ModelBox核心库的solution目录下。如果对ModelBox AI应用开发还不熟悉,请先阅读ModelBox 端云协同AI开发套件(RK3568)上手指南,或者ModelBox 端云协同AI开发套件(博时特EC02)上手指南。模型准备本案例使用的是YOLOv3_ResNet18模型,在下载的资源包中,已经包含了转换好的rknn模型或者onnx模型,可以在对应的平台上直接使用。 原始模型是通过TensorFlow框架训练得到的,我们可以用AI Gallery中的物体检测YOLOv3_ResNet18算法和口罩检测小数据集,自行训练出该模型。 得到TensorFlow Frozen Graph格式的模型后,如果想体验rknn模型的转换过程,rknpu版本可参考RK1808模型转换验证案例,rknpu2版本可参考RK3568模型转换验证案例。应用开发打开VS Code,连接到ModelBox sdk所在目录或者远程开发板,开始进行口罩检测应用开发。下面以RK3568版本为例进行说明,其他版本与之类似。1)创建工程使用create.py创建mask_det工程(Windows PC版本请使用create.bat):rock@rock-3a:~/███/modelbox$ ./create.py -t server -n mask_det -s mask_det_yolo3 sdk version is modelbox-rk-aarch64 success: create mask_det in /home/rock/███/modelbox/workspace将会用口罩检测模板创建出一个mask_det工程。2)查看推理功能单元AI应用的核心是模型推理部分,mask_det工程的推理功能单元在工程目录下的model/mask_infer文件夹中,目录结构如下(以RK3568开发板版本为例): 其中yolo3_resnet18_mask_det_288x512-rknpu2.rknn是转换好的rknn模型,mask_infer.toml是该模型的ModelBox功能单元配置文件,其内容如下:# Copyright (c) Huawei Technologies Co., Ltd. 2022. All rights reserved. [base] name = "mask_infer" # 功能单元名称 device = "rknpu" # 功能单元运行的设备类型 version = "1.0.0" # 功能单元版本号 type = "inference" # 功能单元类型,推理功能单元此处为固定值inference virtual_type = "rknpu" # 推理引擎类型,RK3399pro/RK1808设备为rknpu,RK3568设备为rknpu2 group_type = "Inference" # 功能单元分组信息, 推理功能单元默认为Inference is_input_contiguous = "false" # rk芯片推理时的固定属性 description = "yolo3 model for mask detection" # 功能单元的描述信息 entry = "./yolo3_resnet18_mask_det_288x512_rknpu.rknn" # 模型文件路径,默认在当前路径下 # 模型输入节点描述:yolo3模型有1个输入,uint8格式的图片数据 [input] [input.input1] name = "data" type = "uint8" device = "rknpu" # 输入数据位于哪种设备 # 模型输出节点描述:yolo3模型有3个输出,不同大小的float类型特征向量 [output] [output.output1] name = "yolo/output1" type = "float" [output.output2] name = "yolo/output2" type = "float" [output.output3] name = "yolo/output3" type = "float"可以看到该模型有3个输出节点,即YOLO v3模型输出的3个feature map,需要从中解码出检测框。3)其他逻辑功能单元后处理功能单元负责从模型推理结果中解码出检测框,在工程目录下的etc/flowunit/yolo3_post文件夹中: 解码过程的核心逻辑在yolo3_utils.py文件中,可以查阅YOLO v3模型细节阅读代码。画图功能单元在工程目录下的etc/flowunit/draw_mask_bbox文件夹中: 画图的核心逻辑在draw_mask_bbox.py文件的draw_mask_info函数中: def draw_mask_info(self, image, bboxes): '''在图中画出口罩佩戴信息''' thickness = 2 font_scale = 1 text_font = cv2.FONT_HERSHEY_SIMPLEX for bbox in bboxes: label_index = int(bbox[5]) # 以头肩部为处理对象 if self.labels[label_index] != 'head': continue x_min, y_min, x_max, y_max = bbox[0], bbox[1], bbox[2], bbox[3] # 根据头肩部找到匹配的人脸框 face_bbox = self.find_max_cover_bbox( bbox, bboxes, 'face', self.face_cover_ratio) if not face_bbox: # 没找到对应的人脸,输出'unknown' yellow = (255, 255, 0) cv2.rectangle(image, (x_min, y_min), (x_max, y_max), yellow, thickness) cv2.putText(image, 'unknown', (x_min, y_min-20), text_font, font_scale, yellow, thickness) continue # 根据人脸框找到匹配的口罩框 mask_bbox = self.find_max_cover_bbox( face_bbox, bboxes, 'mask', self.mask_cover_ratio) if not mask_bbox: # 没找到对应的口罩框,输出'no mask' red = (0, 0, 255) cv2.putText(image, 'no mask', (x_min, y_min-20), text_font, font_scale, red, thickness) cv2.rectangle(image, (x_min, y_min), (x_max, y_max), red, thickness) else: # 找到对应的口罩框,输出'has mask' green = (0, 255, 0) cv2.putText(image, 'has mask', (x_min, y_min-20), text_font, font_scale, green, thickness) cv2.rectangle(image, (x_min, y_min), (x_max, y_max), green, thickness) cv2.rectangle(image, (mask_bbox[0], mask_bbox[1]), (mask_bbox[2], mask_bbox[3]), green, thickness) return image可以看到,针对每个人,该模型会尝试检测出head(头肩部)、face和mask三个检测框。如果face检测框与mask检测框的重合度大于某个阈值,就判为佩戴口罩;否则,就判为没有佩戴口罩;如果没有检测到face检测框,就会显示Unknown,表示未知。4)查看流程图模型推理和配套的功能单元准备好后,我们就可以串联出流程图进行测试了,口罩检测工程的默认流程图为graph/mask_det.toml(以RK3568开发板版本为例):# Copyright (c) Huawei Technologies Co., Ltd. 2022. All rights reserved. [driver] # 功能单元的扫描路径,包含在[]中,多个路径使用,分隔 # ${HILENS_APP_ROOT} 表示当前应用的实际路径 # ${HILENS_MB_SDK_PATH} 表示ModelBox核心库的实际路径 dir = [ "${HILENS_APP_ROOT}/etc/flowunit", "${HILENS_APP_ROOT}/etc/flowunit/cpp", "${HILENS_APP_ROOT}/model", "${HILENS_MB_SDK_PATH}/flowunit", ] skip-default = true [profile] # 通过配置profile和trace开关启用应用的性能统计 profile = false # 是否记录profile信息,每隔60s记录一次统计信息 trace = false # 是否记录trace信息,在任务执行过程中和结束时,输出统计信息 dir = "${HILENS_DATA_DIR}/mb_profile" # profile/trace信息的保存位置 [flow] desc = "mask detection example using yolo3 for local video or rtsp video stream" # 应用的简单描述 [graph] format = "graphviz" # 流程图的格式,当前仅支持graphviz graphconf = """digraph mask_det { node [shape=Mrecord] queue_size = 4 batch_size = 1 # 定义节点,即功能单元及其属性 input1[type=input, flowunit=input, device=cpu, deviceid=0] data_source_parser[type=flowunit, flowunit=data_source_parser, device=cpu, deviceid=0] video_demuxer[type=flowunit, flowunit=video_demuxer, device=cpu, deviceid=0] video_decoder[type=flowunit, flowunit=video_decoder, device=rknpu, deviceid=0, pix_fmt="bgr"] image_resize[type=flowunit, flowunit=resize, device=rknpu, deviceid=0, image_width=512, image_height=288] mask_detection[type=flowunit, flowunit=mask_infer, device=rknpu, deviceid=0] yolo3_post[type=flowunit, flowunit=yolo3_post, device=cpu, deviceid=0] draw_mask_bbox[type=flowunit, flowunit=draw_mask_bbox, device=cpu, deviceid=0] video_out[type=flowunit, flowunit=video_out, device=rknpu, deviceid=0] # 定义边,即功能间的数据传递关系 input1:input -> data_source_parser:in_data data_source_parser:out_video_url -> video_demuxer:in_video_url video_demuxer:out_video_packet -> video_decoder:in_video_packet video_decoder:out_video_frame -> image_resize:in_image image_resize:out_image -> mask_detection:data mask_detection:"yolo/output1" -> yolo3_post:in_feat3 mask_detection:"yolo/output2" -> yolo3_post:in_feat2 mask_detection:"yolo/output3" -> yolo3_post:in_feat1 video_decoder:out_video_frame -> draw_mask_bbox:in_image yolo3_post:out_data -> draw_mask_bbox:in_bbox draw_mask_bbox:out_image -> video_out:in_video_frame }"""该流程图对于某个视频流,经过视频解码、图像缩放、口罩检测推理、检测框后处理、画图等一系列操作后,将结果保存下来。口罩检测工程的任务配置文件bin/mock_task.toml中设置了输入输出源,内容为:# 任务输入配置,当前支持以下几种输入方式: # 1. rtsp摄像头或rtsp视频流:type="rtsp", url="rtsp://xxx.xxx" # 2. 设备自带摄像头或者USB摄像头:type="url",url="${摄像头编号}" (需配合local_camera功能单元使用) # 3. 本地视频文件:type="url",url="${视频文件路径}" (请使用${HILENS_APP_ROOT}宏,表示当前应用的实际路径) # 4. http服务:type="url", url="http://xxx.xxx"(指的是任务作为http服务启动,此处需填写对外暴露的http服务地址,需配合httpserver类的功能单元使用) [input] type = "url" # url = "0" url = "${HILENS_APP_ROOT}/data/mask_test.mp4" # 任务输出配置,当前支持以下几种输出方式: # 1. rtsp视频流:type="local", url="rtsp://xxx.xxx" # 2. 本地屏幕:type="local", url="0:xxx" (设备需要接显示器,系统需要带桌面) # 3. 本地视频文件:type="local",url="${视频文件路径}"(请使用${HILENS_APP_ROOT}宏,表示当前应用的实际路径) # 4. http服务:type="webhook", url="http://xxx.xxx"(指的是任务产生的数据上报给某个http服务,此处需填写上传的http服务地址) [output] type = "local" # url = "0:mask_det" # "rtsp://192.168.2.2:8554/outstream" url = "${HILENS_APP_ROOT}/hilens_data_dir/mask_test_result.mp4"测试视频为data/mask_test.mp4,该流程图使用这一视频进行口罩检测,检测结果绘制后保存为hilens_data_dir/mask_test_result.mp4文件。5)运行应用在mask_det工程路径下执行build_project.sh进行工程构建(以RK3568开发板版本为例):rock@rock-3a:~/███/modelbox/workspace/mask_det$ ./build_project.sh build success: you can run main.sh in ./bin folder rock@rock-3a:~/███/modelbox/workspace/mask_det$然后执行bin/main.sh(Windows PC版本请使用bin\main.bat)运行应用,运行结束后在hilens_data_dir目录下生成了mask_test_result.mp4文件,可以下载到PC端查看。
-
ModelBox 端云协同AI开发套件(RK3568)上手指南开发套件简介ModelBox AI开发套件(RK3568)是一款体积小巧、功能强大的人工智能嵌入式开发板,结合ModelBox开发框架和HiLens管理平台,开发者可以方便快速的进行AI应用的开发部署。开箱配件开发板零配件见下图: RK3568开发板(查看详细硬件配置)电源插头&电源线(type-c接口)散热风扇散热片TF卡(用于安装系统)USB摄像头WIFI模组(带天线)金属外壳、螺丝、支架等开发板详细接口见下图: 另外,还需要准备TF卡读卡器,用于在TF卡上烧录操作系统。环境配置1. 安装系统1)下载系统镜像在github网站下载对应的镜像,镜像版本可以按需选择(本教程基于Ubuntu 20.04),下载的镜像需要是rock-3a开头并以gpt.img.xz结尾的文件。如果github下载较慢,也可以从这个OBS地址下载,目前我们建议下载0320版本,最新的版本在WIFI驱动上还有问题。 2)读写镜像在ROCK 3A官网下载镜像读写工具balenaEtcher,将TF卡接到读卡器上,插入电脑,然后打开balenaEtcher,点击Flash from file选择刚刚下载的固件 3)烧录镜像在Select target里选中读卡器所在的盘符,最后点击Flash进行烧录 4)启动开发板烧录完成之后拔出TF卡,接到板子上(芯片面朝向主板),然后接通电源,开发板正常启动会亮两个灯:绿灯常亮,蓝灯闪烁 5)安装配件WIFI模组:先将天线固定到WIFI模组上,再将WIFI芯片插入主板正面的接口中(接口上印有173004),最后再固定好螺丝即可。散热片:使用散热片可以辅助散热,撕开背部的薄膜将其贴在主板的芯片上: 散热器:如果环境温度较高,可以将散热片换成散热器,撕开散热器背部的薄膜,将其贴在主板的芯片上,然后将风扇的电源线接入下方第二排针脚中,从右往左数,红线接入第二个针脚,黑线接入第三个针脚: 金属外壳:先卸下外壳底板,装上4颗金色螺丝;再将主板固定在底板上;最后根据各个接口在外壳上的开口位置,将底板+开发板装进外壳中 2. 配置网络使用开发板进行ModelBox AI应用开发有两种方式,一是开发板连接显示器和键盘鼠标,安装Ubuntu桌面,直接在开发板上进行开发;二是使用远程连接工具(如VS Code中的Remote-SSH)从PC端登录开发板进行开发。这里我们推荐第二种方式,因为PC端可以使用功能更丰富、界面更友好的IDE。PC连接开发板需要知道开发板的ip,但是开发板默认没有固定ip,此时有两种解决方案:1. 动态ip方式将PC和开发板都连接到同一无线路由器,然后PC登录到该无线路由器主页,通过终端列表查看开发板的ip(下图以华为无线路由器为例,红框中即为开发板ip)。这个ip是无线路由器动态分配给开发板的,下一次连接时可能会变化,需要重新查询。 2. 静态ip方式我们开发了一款小工具:ModelBox PC Tool,其中有个功能是为开发板分配一个固定ip,使用方式如下:1) 安装Python3.8.10PC Tool的运行依赖Python3环境,请先下载Python3.8.10进行安装,注意安装第一步需要勾选“将Python3.8加到环境变量PATH中”: 2) 在HiLens管理控制台专业版的技能开发-工具/插件板块下载Windows ModelBox SDK:3) 解压SDK,使用管理员身份运行connect_wizard.exe(connect_wizard文件夹内):4) 在ModelBox PC Tool界面中选择“使用网线连接开发板”,点击“下一步”:5) 在Step1界面中,点击“打开配置指导”:6) 根据网络配置指导,对PC与开发板连接的以太网进行设置,将其ip设定为192.168.2.2:7) 回到ModelBox PC Tool界面,连续点击“下一步”,将弹出dhcp程序,自动为开发板分配固定ip:8) 当ModelBox PC Tool界面跳转到step2时,表示开发板的有线网ip已经被修改为192.168.2.111,点击“最小化”将工具隐藏到任务栏:9) 打开cmd,使用ping命令进行验证,如果可以ping通即表示开发板的静态ip已经分配成功,PC可以使用192.168.2.111ip连接开发板了:C:\Users\███>ping 192.168.2.111 正在 Ping 192.168.2.111 具有 32 字节的数据: 来自 192.168.2.111 的回复: 字节=32 时间=1ms TTL=64 来自 192.168.2.111 的回复: 字节=32 时间=1ms TTL=64 来自 192.168.2.111 的回复: 字节=32 时间=1ms TTL=64 来自 192.168.2.111 的回复: 字节=32 时间=1ms TTL=64 192.168.2.111 的 Ping 统计信息: 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失), 往返行程的估计时间(以毫秒为单位): 最短 = 1ms,最长 = 1ms,平均 = 1ms C:\Users\███>当然,此时只是实现了PC与开发板的有线连接,开发板自身连接公网还需要进行设置。10) 使用SSH工具(如MobaXterm),通过192.168.2.111ip登录到开发板(默认用户名密码都是rock),使用nmcli命令连接WIFI:查询可以连接的WIFI:sudo nmcli device wifi list连接某个WIFI:sudo nmcli device wifi connect [WIFI名称] password [WIFI密码]11) 为开发板分配的有线网固定ip可能会影响到无线网,因此还需要使用如下命令对路由表进行修改:原始的路由表:rock@rock-3a:~$ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 192.168.2.1 0.0.0.0 UG 203 0 0 eth0 default 192.168.1.1 0.0.0.0 UG 600 0 0 wlan0 link-local 0.0.0.0 255.255.0.0 U 304 0 0 wlan0 192.168.1.0 0.0.0.0 255.255.255.0 U 304 0 0 wlan0 192.168.1.0 0.0.0.0 255.255.255.0 U 600 0 0 wlan0 192.168.2.0 0.0.0.0 255.255.255.0 U 203 0 0 eth0 rock@rock-3a:~$删除有线网关:rock@rock-3a:~$ sudo route del default gw 192.168.2.1修改后的路由表:rock@rock-3a:~$ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default _gateway 0.0.0.0 UG 600 0 0 wlan0 link-local 0.0.0.0 255.255.0.0 U 304 0 0 wlan0 192.168.1.0 0.0.0.0 255.255.255.0 U 304 0 0 wlan0 192.168.1.0 0.0.0.0 255.255.255.0 U 600 0 0 wlan0 192.168.2.0 0.0.0.0 255.255.255.0 U 203 0 0 eth0 rock@rock-3a:~$此时,开发板既可以通过有线与PC连接,又可以通过WIFI连接公网(有些系统还需要配置DNS),网络设置就完成了。3. 安装Ubuntu桌面(可选)登入系统,连接网络,更新软件列表:sudo apt-get update安装桌面:sudo apt install ubuntu-mate-core sudo apt install ubuntu-mate-desktop安装完成,然后重启,就有界面了: 应用开发1. 远程连接开发板我们推荐在PC端使用VS Code远程连接开发板来对设备操作。1)下载VS CodeVS Code官网下载安装Windows x64版本的编辑器。 2)安装Remote-SSH在VS Code中安装Remote-SSH插件,安装完成后侧边栏将出现远程连接Remote Explorer的图标。 3)进入SSH配置文件点击VS Code侧边栏的Remote Explorer图标,在弹出的SSH TARGETS界面中点击齿轮图标,选择一个SSH配置文件路径。 4)配置SSH连接配置SSH连接,参考下图,其中Host是自己设置的盒子名称,HostName是盒子ip地址,User是SSH连接用户名。保存配置文件,SSH TARGETS将出现该Host图标,点击图标后面的连接图标。 5)连接到主机第一次连接时需要选择远程主机的操作系统类型,这里我们选择Linux: 选择Continue: 输入密码: 注意:第一次连接会自动下载VS Code相关软件到远程主机上,耗时较长,且需要多次输入登录密码。6)打开文件夹点击Open Folder。 7)进入开发目录选择一个路径作为ModelBox SDK和应用存放的目录,再次输入密码,即可连接到开发板的该路径下进行应用开发。 2. 注册HiLens设备1)在HiLens管理控制台专业版的设备管理板块点击右上角的“注册设备”按钮:2)参考下图填写注册信息,设置一个设备名称,设备类型选择“RK系列(轻量)”,其他可以保持默认,点击右下角的“下一步”:3)下载固件和证书文件4)安装HiLens Agent(开发板需联网)将上一步下载的HiLens_Device_Agent拷贝到开发板上(拖动文件到VS Code界面中即可),执行命令安装Agent服务:tar -xvf [Agent安装包名称] bash install_manual.sh5)注册设备将第3步下载的与设备名称同名的证书文件拷贝到开发板上(拖动文件到VS Code界面中即可),执行如下注册命令:hdactl register_bind -p [证书文件名称]注册成功后将在HiLens设备列表页面看到该设备: 注:注册成功后设备状态会显示“运行中”,就可以进行ModelBox技能开发了;如果想要安装部署技能市场上的技能,需要付费激活,激活后激活状态才会显示“已激活”3. 下载ModelBox sdk1)在HiLens管理控制台专业版的技能开发-工具/插件板块下载RK系列的ModelBox sdk:2)将sdk拷贝到开发板上(拖动文件到VS Code界面中即可),解压可得到sdk如下:其中modelbox-rk-aarch64文件夹即为ModelBox核心库,包含ModelBox运行环境、内置的功能单元等,create.py为创建ModelBox工程、创建功能单元、编译运行等的辅助工具。进入sdk目录,执行create.py可看到辅助工具的用法介绍(需使用python3.8版本进行编码开发):rock@rock-3a:~/███/modelbox$ ./create.py Usage: Create ModelBox project and flowunit NOTE : you must firstly use bellow cmd to create a project in workspace create.py -t server -n your_proj_name {option: -s name, create this project from a solution}, support hilens deployment or create.py -t project -n your_proj_name {option: -s name, create this project from a solution} AND : use bellow cmd to create [c++|python|infer] flowunit in this project create.py -t c++ -n your_flowunit_name -p your_proj_name AND : call workspace/your_proj_name/build_project.sh to build your project, call bin/main.sh[bat] to run FINAL: create.py -t rpm -n your_proj_name to package your project (the same folder with create.py) if upload to hilens NOTE: create.py -t editor -n your_proj_name to start web ui editor to edit your graph -h or --help:show help -t or --template [c++|python|infer|project|server|rpm|editor] create a template or package to rpm -n or --name [your template name] -p or --project [your project name when create c++|python|infer] -s or --solution [the solution name when create project] create a project from solution -v or --version:show sdk version rock@rock-3a:~/███/modelbox$4. 开发Hello World应用接下来我们用Python开发一个最简单的ModelBox应用:打开一个视频文件,在画面左上方写上“Hello World”,再输出到另一个视频文件中。1)创建工程使用create.py创建hello_world工程rock@rock-3a:~/███/modelbox$ ./create.py -t server -n hello_world sdk version is modelbox-rk-aarch64 success: create hello_world in /home/rock/███/modelbox/workspace build success: you can run main.sh in ./bin folder可以看到,第一次创建工程时,在ModelBox sdk目录下,自动生成了workspace文件夹,此文件夹将作为ModelBox应用的默认目录。workspace目录下创建了hello_world工程: 2)创建功能单元为hello_world工程创建python的draw_text功能单元:rock@rock-3a:~/███/modelbox$ ./create.py -t python -n draw_text -p hello_world sdk version is modelbox-rk-aarch64 success: create python draw_text in /home/rock/███/modelbox/workspace/hello_world/etc/flowunit/draw_text可以看到,在hello_world工程的etc/flowunit目录(此目录将作为Python功能单元的默认存放目录)下,生成了draw_text文件夹,其中自动生成了Python功能单元所需的py文件和toml配置文件: 3)修改功能单元draw_text.toml中配置该功能单元的名称、类别、输入输出端口等信息,当前不用修改;draw_text.py中描述了该功能单元的处理逻辑,这里我们增加OpenCV与NumPy包的引用(需要事先用pip install opencv-python命令安装OpenCV与NumPy的Python库),修改其中的process函数如下:import cv2 import numpy as np import _flowunit as modelbox … def process(self, data_context): # Process the data in_data = data_context.input("in_1") out_data = data_context.output("out_1") # draw_text process code. # Remove the following code and add your own code here. for buffer_img in in_data: width = buffer_img.get('width') height = buffer_img.get('height') channel = buffer_img.get('channel') img_data = np.array(buffer_img.as_object(), copy=False) img_data = img_data.reshape((height, width, channel)) cv2.putText(img_data, 'Hello World', (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2) out_buffer = self.create_buffer(img_data) out_buffer.copy_meta(buffer_img) out_data.push_back(out_buffer) return modelbox.Status.StatusCode.STATUS_SUCCESS4)修改流程图hello_world工程graph目录下默认生成了一个hello_world.toml流程图,修改其中的流程定义graphconf如下:graphconf = """digraph hello_world { node [shape=Mrecord]; queue_size = 4 batch_size = 1 input1[type=input] data_source_parser[type=flowunit, flowunit=data_source_parser, device=cpu, deviceid=0] video_demuxer[type=flowunit, flowunit=video_demuxer, device=cpu, deviceid=0] video_decoder[type=flowunit, flowunit=video_decoder, device=rknpu, deviceid=0, pix_fmt=bgr] draw_text[type=flowunit, flowunit=draw_text, device=cpu, deviceid=0] video_out[type=flowunit, flowunit=video_out, device=rknpu, deviceid=0] input1:input -> data_source_parser:in_data data_source_parser:out_video_url -> video_demuxer:in_video_url video_demuxer:out_video_packet -> video_decoder:in_video_packet video_decoder:out_video_frame -> draw_text:in_1 draw_text:out_1 -> video_out:in_video_frame }"""5)配置输入和输出我们需要准备一个mp4文件拷贝到hello_world工程中,将sdk目录下的solution/car_det/common/data/car_test_video.mp4拷贝到hello_world工程目录的data文件夹下,然后打开工程目录下bin/mock_task.toml文件,修改其中的任务输入和任务输出配置为如下内容:# 任务输入,mock模拟目前仅支持一路rtsp或者本地url # rtsp摄像头,type = "rtsp", url里面写入rtsp地址 # 其它用"url",比如可以是本地文件地址, 或者httpserver的地址,(摄像头 url = "0") [input] type = "url" url = "../data/car_test_video.mp4" # 任务输出,目前仅支持"webhook", 和本地输出"local"(输出到屏幕,url="0", 输出到rtsp,填写rtsp地址) # (local 还可以输出到本地文件,这个时候注意,文件可以是相对路径,是相对这个mock_task.toml文件本身) [output] type = "local" url = "../hilens_data_dir/hello.mp4"6)构建工程在hello_world工程路径下执行build_project.sh进行工程构建:rock@rock-3a:~/███/modelbox/workspace/hello_world$ ./build_project.sh build success: you can run main.sh in ./bin folder rock@rock-3a:~/███/modelbox/workspace/hello_world $如果执行过程中dos2unix报错,请使用sudo apt-get install dos2unix安装:./build_project.sh: line 26: dos2unix: command not found7)运行应用执行bin/main.sh运行应用(如果执行过程中报错,可用sudo su切换到root用户再运行):rock@rock-3a:~/███/modelbox/workspace/hello_world$ ./bin/main.sh [2022-05-17 08:59:55,009][ INFO][ main.cc:369 ] modelbox config path : /home/rock/███/modelbox/workspace/hello_world/bin/../graph/modelbox.conf ... [2022-05-17 08:59:55,184][ INFO][ iva_config.cc:146 ] load config success [2022-05-17 08:59:55,184][ INFO][ iva_manager.cc:168 ] grap path : /home/rock/███/modelbox/workspace/hello_world/bin/../graph/hello_world.toml … [2022-05-17 08:59:57,949][ INFO][ iva_task.cc:230 ] source_type: url [2022-05-17 08:59:57,951][ INFO][ iva_task.cc:231 ] input_cfg: {"url":"/home/rock/███/modelbox/workspace/hello_world/bin/../bin/../data/car_test_video.mp4","url_type":"file"} [2022-05-17 08:59:57,952][ INFO][ iva_task.cc:263 ] output_cfg: {"brokers":[{"cfg":"{\"headers\":null,\"url\":\"/home/rock/███/modelbox/workspace/hello_world/bin/../bin/../hilens_data_dir/hello.mp4\"}","name":"webhook","type":"webhook"}]} … [2022-05-17 09:00:10,052][ INFO][mock_communicate.cc:483 ] Task SUCCEEDED, Mock will exit application [2022-05-17 09:00:10,052][ INFO][iva_task_manager.cc:788 ] task finish. f79b102f-7bb4-43a7-a324-47a8601bf52b … [2022-05-17 09:00:10,054][ INFO][session_context.cc:41 ] session context finish se id:09a7d8b0-e883-4513-8981-b745e5ce7c15 ... [2022-05-17 09:00:10,064][ INFO][ main.cc:382 ] exit modelbox process出现Task SUCCEEDED日志即表示这个图运行结束了,工程目录下的hilens_data_dir文件夹下将会生成视频文件hello.mp4,可以下载到PC端查看。 注意:如果没有为系统安装桌面环境,运行应用时可能会报错缺少某些库,可以先安装对应的库再运行。缺少libatomic.so.1库:rock@rock-3a:~/███/modelbox/workspace/hello_world$ ./bin/main.sh debain os need load libgomp modelbox: error while loading shared libraries: libatomic.so.1: cannot open shared object file: No such file or directory rock@rock-3a:~/███/modelbox/workspace/hello_world$ sudo apt-get update && sudo apt-get install -y libatomic1 Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: gcc-10-base libgcc-s1 libgcc1 libgomp1 libstdc++6 The following NEW packages will be installed: libatomic1 The following packages will be upgraded: gcc-10-base libgcc-s1 libgcc1 libgomp1 libstdc++6 5 upgraded, 1 newly installed, 0 to remove and 247 not upgraded. Need to get 654 kB of archives. After this operation, 75.8 kB of additional disk space will be used. ... Setting up libgcc1 (1:10.3.0-1ubuntu1~20.04) ... Setting up libgomp1:arm64 (10.3.0-1ubuntu1~20.04) ... Setting up libatomic1:arm64 (10.3.0-1ubuntu1~20.04) ... Processing triggers for libc-bin (2.31-0ubuntu9) ... rock@rock-3a:~/███/modelbox/workspace/hello_world$缺少libcurl.so.4库:rock@rock-3a:~/███/modelbox/workspace/hello_world$ ./bin/main.sh ... [2022-07-17 03:52:25,091][ERROR][ server_plugin.cc:79 ] Open library /home/rock/███/modelbox/workspace/hello_world/bin/../../../modelbox-rk-aarch64/lib/modelbox-iva-plugin.so failed, libcurl.so.4: cannot open shared object file: No such file or directory ... rock@rock-3a:~/███/modelbox/workspace/hello_world$ sudo apt-get install -y libcurl4 Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: libcurl4 0 upgraded, 1 newly installed, 0 to remove and 247 not upgraded. Need to get 215 kB of archives. After this operation, 660 kB of additional disk space will be used. ... Setting up libcurl4:arm64 (7.68.0-1ubuntu2.12) ... Processing triggers for libc-bin (2.31-0ubuntu9) ... rock@rock-3a:~/███/modelbox/workspace/hello_world$缺少libGL.so.1库:rock@rock-3a:~/███/modelbox/workspace/hello_world$ ./bin/main.sh ... [2022-07-17 03:52:25,085][ WARN][flowunit_group.cc:388 ] draw_car_bbox: open failed: code: Invalid argument, errmsg: import draw_car_bbox@draw_car_bboxFlowUnit failed: ImportError: libGL.so.1: cannot open shared object file: No such file or directory ... rock@rock-3a:~/███/modelbox/workspace/hello_world$ sudo apt-get install -y libgl1 Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: libdrm-amdgpu1 libdrm-nouveau2 libdrm-radeon1 libgl1-mesa-dri libglapi-mesa libglvnd0 libglx-mesa0 libglx0 libllvm12 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-present0 libxcb-sync1 libxcb-xfixes0 libxshmfence1 The following NEW packages will be installed: libdrm-amdgpu1 libdrm-nouveau2 libdrm-radeon1 libgl1 libgl1-mesa-dri libglapi-mesa libglvnd0 libglx-mesa0 libglx0 libllvm12 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-present0 libxcb-sync1 libxcb-xfixes0 libxshmfence1 0 upgraded, 17 newly installed, 0 to remove and 247 not upgraded. Need to get 24.1 MB of archives. After this operation, 1004 MB of additional disk space will be used. ... Setting up libgl1:arm64 (1.3.2-1~ubuntu0.20.04.2) ... Processing triggers for libc-bin (2.31-0ubuntu9) ... rock@rock-3a:~/███/modelbox/workspace/hello_world$另外,如果运行日志中有类似下面这样的报错,可以忽略,这是应用在尝试与云侧通信校验license,但当前我们是在本地测试,不需要这类校验:rock@rock-3a:~/███/modelbox/workspace/hello_world$ ./bin/main.sh ... [2022-07-17 03:52:25,091][ERROR][iva_auth_info_updater.cc:29 ] IvaManager::SetIAMAuthInfo Not enough meassage. userId and (domain_id or vas_x_role_name) is empty. ... [2022-07-17 03:52:25,091][ERROR][ iva_io.cc:118 ] tempAuthInfo is nullptr ...8)生成视频流应用的流程图除了使用视频文件进行测试,ModelBox还支持输入实时视频流,接下来我们试试在USB摄像头的实时画面上写“Hello World”,这个功能需要用到上面介绍的ModelBox PC Tool工具。使用cp graph/hello_world.toml graph/hello_world_camera.toml命令生成新的流程图,修改hello_world_camera.toml中的流程定义graphconf如下,可以对比它与hello_world.toml的区别:graphconf = """digraph hello_world { node [shape=Mrecord]; queue_size = 4 batch_size = 1 input1[type=input] data_source_parser[type=flowunit, flowunit=data_source_parser, device=cpu, deviceid=0] local_camera[type=flowunit, flowunit=local_camera, device=rknpu, deviceid=0, pix_fmt=bgr, cam_width=1280, cam_height=720] draw_text[type=flowunit, flowunit=draw_text, device=cpu, deviceid=0] video_out[type=flowunit, flowunit=video_out, device=rknpu, deviceid=0] input1:input -> data_source_parser:in_data data_source_parser:out_video_url -> local_camera:in_camera_packet local_camera:out_camera_frame -> draw_text:in_1 draw_text:out_1 -> video_out:in_video_frame }"""9)修改输入和输出配置打开工程目录下bin/mock_task.toml文件,修改其中的任务输入和任务输出配置为如下内容:# 任务输入,mock模拟目前仅支持一路rtsp或者本地url # rtsp摄像头,type = "rtsp", url里面写入rtsp地址 # 其它用"url",比如可以是本地文件地址, 或者httpserver的地址,(摄像头 url = "0") [input] type = "url" url = "0" # 任务输出,目前仅支持"webhook", 和本地输出"local"(输出到屏幕,url="0", 输出到rtsp,填写rtsp地址) # (local 还可以输出到本地文件,这个时候注意,文件可以是相对路径,是相对这个mock_task.toml文件本身) [output] type = "local" url = "rtsp://192.168.2.2:8554/outstream"注意,output条目下url配置中的ip是PC的ip地址,如果之前是用ModelBox PC Tool配置静态ip的方式设置的网络,那PC的ip地址就是192.168.2.2,否则需要做相应修改。10)运行应用将USB摄像头插到开发板上,双击任务栏上的ModelBox PC Tool工具图标弹出主界面,在Step2界面上选择“使用开发板侧视频流”,点击“启动推流”,推流服务将启动,ModelBox PC Tool工具也会再次最小化到任务栏上: 在VS CodeTerminal中执行bin/main.sh camera运行应用:rock@rock-3a:~/███/modelbox/workspace/hello_world$ ./bin/main.sh camera [2022-05-17 08:59:55,009][ INFO][ main.cc:369 ] modelbox config path : /home/rock/███/modelbox/workspace/hello_world/bin/../graph/modelbox.conf ... [2022-05-17 08:59:55,184][ INFO][ iva_config.cc:146 ] load config success [2022-05-17 08:59:55,184][ INFO][ iva_manager.cc:168 ] grap path : /home/rock/███/modelbox/workspace/hello_world/bin/../graph/hello_world_camera.toml … [2022-05-17 09:00:10,054][ INFO][video_out_flowunit.cc:304 ] video_out url is rtsp://192.168.2.2:8554/outstream [2022-05-17 09:00:10,064][ INFO][ ffmpeg_writer.cc:55 ] Open url rtsp://192.168.2.2:8554/outstream, format rtsp success此时,浏览器将会自动打开,网页中的视频窗口将输出应用的实时画面: 5. 开发第一个AI应用接下来我们开发一个车辆检测应用:打开一个视频文件,使用检测模型检测出画面中车辆并画框,再输出到另一个视频文件中。本应用作为模板案例已内置在sdk中,不需要另外下载。1)创建工程使用车辆检测模板创建car_det工程(注意与创建hello_world工程的区别):rock@rock-3a:~/███/modelbox$ ./create.py -t server -n car_det -s car_det sdk version is modelbox-rk-aarch64 success: create car_det in /home/rock/███/modelbox/workspace2)查看推理功能单元这个应用使用到了模型推理,需要用到推理功能单元,可以看到,在car_det工程目录的model文件夹下,存在yolox_infer推理功能单元文件夹,里面有yolox模型文件(yolox_nano_288x512.rknn)和模型配置文件(yolox_infer.toml),模型配置文件内容如下:# Copyright (C) 2022 Huawei Technologies Co., Ltd. All rights reserved. [base] name = "yolox_infer" device = "rknpu" version = "1.0.0" description = "car detection" entry = "./yolox_nano_288x512.rknn" # model file path, use relative path type = "inference" virtual_type = "rknpu2" # inference engine type: rockchip now support rknpu, rknpu2(if exist) group_type = "Inference" # flowunit group attribution, do not change is_input_contiguous = "false" # input data attribution, do not change # input port description, suporrt multiple input ports [input] [input.input1] name = "input" type = "uint8" device = "rknpu" # output port description, suporrt multiple output ports [output] [output.output1] name = "output" type = "float"可以看到该模型有1个输入节点,1个输出节点。需要注意其中的virtual_type配置与npu类别有关,RK3568需配置为rknpu2;输入节点的device配置建议设为与该推理功能单元的上一个功能单元相同。 ModelBox内置了rknn推理引擎和推理逻辑,开发者只需要准备好模型、编辑好配置文件,即可使用该模型进行推理,无需编写推理代码。如果想要创建另外的推理功能单元,可以使用如下命令,推理功能单元默认创建在工程目录的model文件夹下:rock@rock-3a:~/███/modelbox$ ./create.py -t infer -n my_model -p car_det sdk version is modelbox-rk-aarch64 success: create infer my_model in /home/rock/███/modelbox/workspace/car_det/model/my_model另外,本案例使用的车辆检测模型是由PyTorch框架训练得到,我们事先使用rknn-toolkit2工具将它转换为RK3568支持的模型格式,感兴趣的话可以在RK3568模型转换验证案例中查看模型转换过程。3)查看其他功能单元车辆检测模型推理后需要做一些后处理操作得到检测框,再把检测框添加到原始画面中,我们已经准备好了对应的功能单元yolox_post和draw_car_bbox: 4)查看执行脚本car_det工程graph目录下带有多个流程图,配置文件modelbox.conf中的flow_path参数指定了技能运行时的流程图路径:flow_path = "${APP_ROOT}/graph/car_det${HILENS_GRAPH_TYPE}.toml"其中环境变量${APP_ROOT}在运行技能时将自动替换为当前工程的实际路径,而${HILENS_GRAPH_TYPE}可以在执行bin/main.sh脚本时输入流程图后缀名作为参数指定当前运行哪个图,打开该脚本看到相关参数内容为:if [ "$1" = "default" -o "$1" = "" ]; then export HILENS_GRAPH_TYPE= else export HILENS_GRAPH_TYPE=_$1 fi默认执行与工程同名的流程图car_det.toml,如果输入bin/main.sh http即执行car_det_http.toml。5)查看默认流程图与工程同名的car_det.toml流程图中的流程定义graphconf如下:graphconf = """digraph car_det { node [shape=Mrecord]; queue_size = 4 batch_size = 1 input1[type=input] data_source_parser[type=flowunit, flowunit=data_source_parser, device=cpu, deviceid=0] video_demuxer[type=flowunit, flowunit=video_demuxer, device=cpu, deviceid=0] video_decoder[type=flowunit, flowunit=video_decoder, device=rknpu, deviceid=0, pix_fmt=bgr] image_resize[type=flowunit, flowunit=resize, device=rknpu, deviceid=0, image_width=512, image_height=288] car_detection[type=flowunit, flowunit=yolox_infer, device=rknpu, deviceid=0] yolox_post[type=flowunit, flowunit=yolox_post, device=cpu, deviceid=0] draw_car_bbox[type=flowunit, flowunit=draw_car_bbox, device=cpu, deviceid=0] video_out[type=flowunit, flowunit=video_out, device=rknpu, deviceid=0] input1:input -> data_source_parser:in_data data_source_parser:out_video_url -> video_demuxer:in_video_url video_demuxer:out_video_packet -> video_decoder:in_video_packet video_decoder:out_video_frame -> image_resize:in_image image_resize:out_image -> car_detection:input car_detection:output -> yolox_post:in_feat video_decoder:out_video_frame -> draw_car_bbox:in_image yolox_post:out_data -> draw_car_bbox:in_bbox draw_car_bbox:out_image -> video_out:in_video_frame }"""查看任务配置文件bin/mock_task.toml,可以看到其中的任务输入和任务输出配置为如下内容:# 任务输入,mock模拟目前仅支持一路rtsp或者本地url # rtsp摄像头,type = "rtsp", url里面写入rtsp地址 # 其它用"url",比如可以是本地文件地址, 或者httpserver的地址,(摄像头 url = "0") [input] type = "url" url = "../data/car_test_video.mp4" # 任务输出,目前仅支持"webhook", 和本地输出"local"(输出到屏幕,url="0", 输出到rtsp,填写rtsp地址) # (local 还可以输出到本地文件,这个时候注意,文件可以是相对路径,是相对这个mock_task.toml文件本身) [output] type = "local" url = "../hilens_data_dir/car_test_result.mp4"该流程图使用data/car_test_video.mp4文件进行车辆检测,检测结果绘制后保存为hilens_data_dir/car_test_result.mp4文件。6)运行默认应用在car_det工程路径下执行build_project.sh进行工程构建:rock@rock-3a:~/███/modelbox/workspace/car_det$ ./build_project.sh build success: you can run main.sh in ./run folder rock@rock-3a:~/███/modelbox/workspace/car_det$切换到root账号,执行bin/main.sh运行应用,运行结束后在hilens_data_dir目录下生成了car_test_result.mp4文件,可以下载到PC端查看。 7)查看HTTP流程图除了开发视频推理类应用,我们还可以使用ModelBox开发HTTP服务类应用,打开car_det/graph/car_det_http.toml,看到流程定义graphconf如下:graphconf = """digraph car_det { node [shape=Mrecord]; queue_size = 4 batch_size = 1 input1[type=input] httpserver_sync_receive[type=flowunit, flowunit=httpserver_sync_receive_v2, device=cpu, deviceid=0, time_out_ms=5000, endpoint="http://0.0.0.0:8083/v1/car_det", max_requests=100] image_decoder[type=flowunit, flowunit=image_decoder, device=rknpu, deviceid=0, key="image_base64"] image_resize[type=flowunit, flowunit=resize, device=rknpu, deviceid=0, image_width=512, image_height=288] car_detection[type=flowunit, flowunit=yolox_infer, device=rknpu, deviceid=0] yolox_post[type=flowunit, flowunit=yolox_post, device=cpu, deviceid=0] httpserver_sync_reply[type=flowunit, flowunit=httpserver_sync_reply_v2, device=cpu, deviceid=0] input1:input -> httpserver_sync_receive:in_url httpserver_sync_receive:out_request_info -> image_decoder:in_encoded_image image_decoder:out_image -> image_resize:in_image image_resize:out_image -> car_detection:input car_detection:output -> yolox_post:in_feat yolox_post:out_data -> httpserver_sync_reply:in_reply_info }"""该流程图从HTTP请求中接收一张图片进行车辆检测,并返回检测结果。8)运行HTTP应用我们使用root账号运行car_det_http.toml流程图(注意命令后的http参数):root@rock-3a:/home/rock/███/modelbox/workspace/car_det# ./bin/main.sh http [2022-05-17 10:20:47,315][ INFO][ main.cc:369 ] modelbox config path : /home/rock/███/modelbox/workspace/car_det/bin/../graph/modelbox.conf ... [2022-05-17 10:20:47,444][ INFO][ iva_config.cc:146 ] load config success [2022-05-17 10:20:47,444][ INFO][ iva_manager.cc:168 ] grap path : /home/rock/███/modelbox/workspace/car_det/bin/../graph/car_det_http.toml ... [2022-05-17 10:20:49,800][ INFO][httpserver_sync_receive.cc:188 ] Start server at http://0.0.0.0:8083/v1/car_det看到Start server at http...字样的日志即表示HTTP服务已启动,等待调用。9)调用HTTP服务在car_det/data目录下我们准备了HTTP调用的测试脚本test_http.py和测试图片car_test_pic.jpg,可以看到默认是在本机发起调用请求:… if __name__ == "__main__": port = 8083 ip = "127.0.0.1" url = "/v1/car_det" img_path = "./car_test_pic.jpg" test_image(img_path, ip, port, url)我们在VS Code中打开另一个终端,执行该脚本,将在car_det/data下生成测试图片的推理结果car_test_pic.jpg: 当然,也可以将测试脚本和图片拷贝到PC上,并将test_http.py中的ip变量修改为开发板的ip进行远程调用测试。至此,我们的第一个AI应用就已经开发好了。 有关ModelBox核心概念、功能单元和流程图开发的更多介绍,可查看ModelBox手册。
-
1.环境准备收起1.1 进入HiLens控制台华为云控制台服务列表搜索“hilens”:点击进入HiLens控制台,如下图所示: 2.技能开发部署收起2.1 进入HiLens StudioHiLens控制台点击“技能开发”,“HiLens Studio (Beta)”进入HiLens Studio 等待几秒后进入HiLens Studio界面 2.2 创建项目单击“New Project” 按钮, 弹出“选择技能模板”对话框: 选择Python语言实现的“Mask_Detection_C76”模板: 填写技能名称、检验值,其他保持默认,点击“确定”,完成项目创建: 点击项目名称进入项目,可以看到HiLens Studio主页: 左边菜单栏中分别包含数据文件夹、模型文件夹以及测试文件夹,用户可以通过自己实际需求将其中文件进行替换,本实验只是演示作用,因此使用模板中自带数据以及模型。2.3 准备测试数据test目录用来存放测试视频。环境里面预置了一段测试视频,用户也可以自己上传,在左侧边栏右键点击“Upload Files”即可上传。在此实验中,我们使用环境里面预置的测试视频。 2.4 启动推理查看src/yolo3.py文件的代码,可以看出该口罩识别技能的实现逻辑。针对每个人,它会尝试检测出person、face和mask三个检测框,检测规则是: (1)如果mask检测框位于face检测框的重合度大于一个阈值,就判断已佩戴口罩; (2)如果mask检测框位于face检测框的重合度小于这个阈值或者没有检测到mask检测框,就判断没有佩戴口罩; (3)如果没有检测到face,也没有检测到mask,就会显示Unknown,表示未知。 打开“src>main>python”下的main.py文件,往下翻找到run函数中的flag_obs参数,将其改为True,如下图所示: 再依次点击Debug > Start Without Debugging,执行推理代码: 可以在右边看到视频的推理结果: 实验成功后, 需要点击右上角Basic Edition Log Out退出hilens。 本实验展示了利用Hilens Studio中预置的口罩检测技能模板来开发口罩检测应用的过程,模板已提供了算法代码和模型,我们可以在此基础上进行二次开发,提高AI开发的效率,也可以直接上传自己的视频来测试该模型的口罩检测效果,如果检测效果达到预期,则可以在Hilens平台直接将该模型部署到边缘设备或智能摄像头上,欲了解详细的部署方法,请查看此文档Hilens Studio安装技能,或者学习AI开发者认证工作级中Hilens部分的内容。
-
Hilens Kit在网管注册时,通过华为云账号注册一直失败,请问要怎么解决?
-
请问遇到这个情况怎么办啊?有没有大佬知道,访问不了ip
-
【功能模块】【操作步骤&问题现象】1、2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
、hilens studio与手机摄像头实现视频流显示的时候,请问出现这个要怎么办啊?
-
【功能模块】【操作步骤&问题现象】1、2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
【功能模块】hilens【操作步骤&问题现象】1、检测结果能显示,不知如何保存,用什么保存,sd卡,还是上传云端2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
【功能模块】HiLens【操作步骤&问题现象】1、HiLens如何用HDMI来连接显示屏2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
【功能模块】【操作步骤&问题现象】1、在技能开发时,为什么导入自己模型就不能在摄像头上看到结果了2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
【功能模块】【操作步骤&问题现象】1、2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
我进入Hilens Studio->新建Project->选Mask_Detection_C76模板->Hilens Studio中可以运行,然后直接从右下方部署安装到自己的Hilens kit上,Hilens kit没反应,接了HDMI的屏幕黑屏这怎么解决啊?
-
求助各位大神!【功能模块】Hilens平台-Hilens Studio【操作步骤&问题现象】用Hilens Studio模拟调试代码,报错:加载模型失败1.模型用的是AI Gallary里的YoloV3Resnet,在ModelArts训练完毕,可以成功在线部署测试图片。2.通过Hilens平台模型管理,转换Tensorflow_FrozenGraph为Ascend_Hilens模型3.上传到Hilens Studio中,运行代码时,就报错:加载模型失败【截图信息】【日志信息】(可选,上传日志内容或者附件)
上滑加载中
推荐直播
-
TinyEngine低代码引擎系列第2讲——向下扎根,向上生长,TinyEngine灵活构建个性化低代码平台
2024/11/14 周四 16:00-18:00
王老师 华为云前端开发工程师,TinyEngine开源负责人
王老师将从TinyEngine 的灵活定制能力出发,带大家了解隐藏在低代码背后的潜在挑战及突破思路,通过实践及运用,帮助大家贴近面向未来低代码产品。
回顾中 -
华为云AI入门课:AI发展趋势与华为愿景
2024/11/18 周一 18:20-20:20
Alex 华为云学堂技术讲师
本期直播旨在帮助开发者熟悉理解AI技术概念,AI发展趋势,AI实用化前景,了解熟悉未来主要技术栈,当前发展瓶颈等行业化知识。帮助开发者在AI领域快速构建知识体系,构建职业竞争力。
去报名 -
华为云软件开发生产线(CodeArts)10月新特性解读
2024/11/19 周二 19:00-20:00
苏柏亚培 华为云高级产品经理
不知道产品的最新特性?没法和产品团队建立直接的沟通?本期直播产品经理将为您解读华为云软件开发生产线10月发布的新特性,并在直播过程中为您答疑解惑。
去报名
热门标签