【每天进步一点点】HiLens Studio体验第二弹——基于华为HiLens的行人检测与跟踪 Demo(技能已发布)
闲话少说,先上最终效果视频,有视频有真相
附视频链接:https://v.qq.com/x/page/t3117f2u2us.html
先来介绍一下上面的视频。
迎面而来的是画面中间的横线,该横线目前没有什么作用,后期会加入通过该横线的双向人数统计,即从该横线左侧到达右侧的行人数量和从该横线右侧到左侧的人数统计,目前已在Atlas 200 DK实现单向人数统计,正在移植过程中。
每个行人由蓝色方框和随机颜色方框标记出来,方框左上方为该行人的ID,其中蓝色方框是得到的行人检测结果,而随机颜色方框及左上角的ID是跟踪的结果。后期会加入行人运动轨迹的绘制,以及入行人总人数统计、当前画面行人人数统计,这些目前已在Atlas 200 DK实现,正在移植中,敬请期待哦。
进入正题
这是基于华为HiLens的行人检测与跟踪,凭借NPU Ascend 310的16TOPS(INT8)的强大算力,轻松实现对视频中的行人的检测与跟踪。好了好了,知道大家更关心的是如何实现的,不要担心,下面就开始介绍了哦。
对了,这个Demo是基于新近公测的HiLens Studio打造的,不得不说,真是很方便,轻松在线编辑代码,部署到HiLens上,对本地环境要求低。只要配置好HiLens联网、连接HiLens到HDMI显示器(本Demo需要HDMI输出到显示器,直接显示结果,所以有这个要求),凭借HiLens Studio, 即使是远程操作,也是很方便的,任何时间、任何地点,你都可以实现自己的Idea,赞。
1. 准备工作
很简单,只需要一台配置好的HiLens就可以了,对了,还有一根HDMI-HDMI的传输线和HDMI接口显示器。
PS:HiLens目前只支持HDMI-HDMI输出,如果你想HDMI转VGA或HDMI转DVI,从而连接到VGA或DVI显示器输出,是不可以的哦。
2. 在HiLens上安装第三方库
安装scipy库即可。这里提供一种安装方法,可以参考论坛帖子安装,感谢论坛昵称为jixian79开发者的分享。
安装scipy帖子链接:https://bbs.huaweicloud.com/forum/thread-61868-1-1.html
建议直接下载帖子中的编译好的wheel包,传输到HiLens的tmp文件夹中,直接执行命令pip install + 包名 安装即可,比较快,亲测可用哦。
对了,这里还需要numpy库、OpenCV库和一些特别基本的库和内建库,这些库基本HiLens已经自带了,不用担心。如果有问题,参考教程或来到论坛提问解决。
PS:目前HiLens好像只支持与HiLens上tmp文件夹的文件传输哦。如果传输失败或不知道如何传输,可以利用HiLens可联网的特性,直接下载到HiLens上完成安装,偷偷告诉你,HiLens Studio中安装技能的时候,会直接将文件下载到HiLens上哦,可以利用一下。
3. 编写代码
准备工作基本就完成了哦,下面可以编写代码了。这个Demo是基于我以前发的行人检测案例的升级改造,关于行人检测案例,使用的是基于Resnet18的YOLOv3算法进行行人检测,介绍了从数据集、到模型训练、再到模型转换及最后部署的全过程,详情可参考我以前发的博文哦。
博文链接:https://bbs.huaweicloud.com/blogs/178758
简单来讲,就是在行人检测案例基础上加了跟踪,跟踪使用的是简单高效的Sort算法。Sort算法联合使用经典的卡尔曼滤波和匈牙利算法,不依赖于模型,对视野开阔、遮挡情况小的场景下,表现良好,速度很快,可达260Hz。但在行人目标较多的时候,计算量也较大,同时由于纯CPU计算,无法发挥Ascend 310的强大算力,对CPU也是个考验。不过HiLens的CPU是4和Hi3559AV100,辅以4GB运行内存,性能强大,也足够用了。
整体流程大致为
初始化配置,包括对最终HDMI输出的初始化——>读取视频输入——>输入图像预处理——>送入YOLOv3_Resnet18进行模型推理——>根据推理结果,画框——>根据推理结果进行目标跟踪——>HDMI输出到显示器
这一要特别说明的是关于视频输入这一点,HiLens Studio真是很赞呀,可以直接将视频上传到HiLens Studio测试使用,并且安装技能到HiLens的话,视频会应该会自动下载到HiLens使用,真是人性化设计,以前还需要自己传输到HiLens才行。
那怎么上传自己的视频或文件呢?非常简单,两步就行了,上图:
此外,HiLens Studio中代码界面右侧的整体代码概览图也很好用,方便定位代码位置,掌握代码整体架构,赞一下。
在HiLens Studio中主要代码架构为
主体代码为:
# 技能初始化 hilens.init("hello") # 参数要与创建技能时填写的检验值保持一致! # 模型路径设置 model_path = os.path.join(work_path, 'model/yolo3_resnet18.om') model = hilens.Model(model_path) # hilens studio中VideoCapture如果不填写参数,则默认读取test/camera0.mp4文件, # 在hilens kit中不填写参数则读取本地摄像头,这里使用的是test/camera0.mp4文件, # 但这个文件只是和模板文件同名而已,其实是来自MOT多目标挑战赛的视频,如本博文 # 开发所示视频 camera = hilens.VideoCapture("./test/camera0.mp4") display_hdmi = hilens.Display(hilens.HDMI) # 图像通过hdmi输出到屏幕 while True: try: # 1. 读取摄像头输入(yuv nv21) input_nv21 = camera.read() # 2. 转为RGB格式 input_rgb = cv2.cvtColor(input_nv21, cv2.COLOR_YUV2RGB_NV21) img_preprocess, img_w, img_h = utils.preprocess(input_rgb) # 缩放为模型输入尺寸 # 3. 模型推理 output = model.infer([img_preprocess.flatten()]) # 4. 结果输出 bboxes = utils.get_result(output, img_w, img_h) # 获取检测结果 output_rgb = utils.draw_boxes(input_rgb, bboxes) # 在图像上画框 # 5. 目标跟踪 frame = MySort.MySort(bboxes, output_rgb, input_rgb.shape[1], input_rgb.shape[0], writer = True) # 6. 输出图像,必须是yuv nv21形式 output_nv21 = hilens.cvt_color(frame, hilens.RGB2YUV_NV21) display_hdmi.show(output_nv21) except Exception: break
更多具体代码,限于篇幅,就不在此一一展开介绍了。不过也不用担心,我在ModelArts的AI市场已经发布了这个技能,大家可以去体验一下哦。体验链接:
对了,我的云端系统管理台的固件版本是1.0.9哦。
PS:大篇幅代码会导致博文审核不通过,可能误认为是英文广告哦。
4. 测试结果
最终展示在HDMI接口的显示器的结果可以在本文最初的视频看到。在技能运行的时候,我也登陆了智能边缘管理系统看看系统运行情况,如下图所示:
可以看到CPU确实负担较重,达到了90%+的利用率,主要是Sort算法较为消耗资源,如果大家有运行过我前面提到的行人检测案例,会发现行人检测主要是依赖Ascend 310运行模型推理,CPU用的较少,不会有这么大的压力。这里,也能看到在CPU达到90%+利用率的时候,NPU Ascend 310才使用了1.5%,很大算力还未能发挥出来,为了最终跟踪效果,可以换用精度更高、更为复杂的模型,强大算力足以支撑的,即使是很消耗资源的Faster_RCNN 也是可以的,这强大算力足够了,大家可以尽情试试。NPU更为详细的信息如下:
可以看到基于华为自研达芬奇架构的计算核心AI Core还有很大潜力,AI CPU、内存、宽带很富裕,还有很大发挥空间哦。此外,我循环运行程序大概两个小时,HiLens整体温度平稳,性能发挥稳定,两侧温度手感较低,比我的电脑温度要低一些吧。可见,HiLens不仅性能强大,散热也不错呀。
总的来说,代码完成以后直接安装运行就行了,大家可以根据我发布的技能,直接订阅,安装测试。如果出现问题,或者需要研究源代码的同学,可以私信我哦,欢迎大家DIY,进行优化改进,希望大家能一起多多开发技能,充分发挥HiLens的潜力、Ascend 310的强大算力,一起建设开放、开源、共享的良好社区生态。
- 点赞
- 收藏
- 关注作者
评论(0)