Press "Enter" to skip to content

在 ARM 盒子上使用 IEF 和 Tensorflow 运行边缘 AI

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

场景介绍

 

由于视频流占用很多网络带宽,越来越多的场景下,希望在视频流产生的地方,对图像进行处理,在节省网络带宽的同时,能够快速处理,也能避免网络延迟和抖动带来的不确定性。典型应用场景为:化工厂内部通过图像检测火情,园区内人脸匹配进行安检,建筑工地施工人员是否佩戴安全帽。

 

在ARM盒子(以atlas500为例,arm64v8架构可以直接使用代码和镜像)上,通过网络接入网络摄像头,使用tensorflow框架对图像进行对象检测模型推理,检测结果通过MQTT协议推送到web页面上进行展示。

 

 

运行环境

 

 

网络摄像头,rtsp协议,ipc网络地址格式

 

智能小站(atlas500),EulerOS

 

tensorflow1.4.0(python2.7)

 

mosquitto 1.6.5

 

python: opencv-python 4.1.1, paho-mqtt 1.4.0

 

nodejs: mqtt 3.0.0, react 16.9.0

我使用atlas500智能小站,性能还是很强大的。

https://e.huawei.com/cn/material/enterprise/030106f2129145efa9c9bb472c7b0058

 

CPU:海思Hi3559A处理器

双核ARM Cortex [email protected],32KB I-Cache,64KB D-Cache /512KB L2 cache

双核ARM Cortex [email protected],32KB I-Cache,32KB D-Cache /256KB L2 cache

 

GPU:双核ARM Mali [email protected],256KB cache

 

处理器内存规格DDR4 4GB,64bit,2400Mbps

 

Atlas 200 AI加速模块

2个DaVinci AI Core

CPU:8核A55,max 1.6GHz

乘加计算性能:8TFLOPS/FP16,16TOPS/INT8

内存规格:LPDDR4X,128bit,容量8GB/4GB,接口

速率3200 Mbps

 

 

安装运行步骤

 

为了构建系统,分步来做

 

通过IEF对智能小站进行纳管

 

连接网络摄像头并测试视频流

 

使用MQTT协议建立消息服务,并测试数据的发布和订阅

 

通过tensorflow对图像进行推理

 

对检测结果进行展示

 

通过IEF对智能小站进行纳管

 

1.打开华为云网站产品:智能边缘平台( https://www.huaweicloud.com/ ),使用自己账户登入,打开页面后,点击“注册边缘节点”,填写边缘几个信息。在“名称”里面可以填写名字。这次暂时不使用atlas500上AI加速卡。

 

 

2.接下来在“是否启用docker”选择“是”,在“系统日志”和“应用日志”中可以按照自己实际选择。

 

 

3. 第三步由于atlas500芯片是arm64架构,务必选择“arm64”方式,先下载文件。

 

 

下面在atlas500上进行安装

 

1.根据设备上标识的账户和密码,以及设备IP地址,从电脑上使用ssh方式登入到atlas500上。

 

2.在atlas500上,使用命令:docker version,检查docker是否存在,如果未安装,参考arm64版本的docker ce进行安装

 

 

3.根据上述1.3步骤中命令安装,把atlas纳入IEF管理之中

 

 

在华为云智能边缘平台上查看运行状态,状态从“未纳管”显示为“运行中”

 

 

 

在atlas500上安装边缘计算平台,已经完成。

 

连接网络摄像头并测试视频流

 

购买的摄像头为IPC格式,把所有设备接入到同一个路由器下面,通过产品手册提供的内容,查看到摄像头相应的IP地址,可以获取到摄像头RTSP协议的URL为

 

rtsp://admin:[email protected]:554//Streaming/Channels/1

 

在电脑上安装和打开VLC播放器,并点击导航栏“媒体”,“打开网络串流”,填入摄像头的地址

 

rtsp://admin:[email protected]:554//Streaming/Channels/1

 

点击“播放”,就可以看到摄像头拍摄的视频。表面摄像头可以使用,整个RTSP协议也是正常的。

 

 

使用python连接网络摄像头。首先通过命令行安装所需的opencv库。

 

pip install opencv-python

 

确认opencv是否安装正确,启动下面代码后,如果在界面上可以展示视频流,表明安装没有问题。

 

 

也可以通过保存图像,或者录制成视频文件格式,查看摄像头是否工作正常。

 

最后通过web页面查看摄像头是否工作正常,由于浏览器对rtsp协议支持并不好,当前只在IE11浏览器中查看到相应视频流,通过IE11加载下面页面,点击允许控件(根据自己实现情况修改下面的rtsp视频流地址),就可以看到摄像头视频流。

 

 

使用MQTT协议建立消息服务

 

使用mosquitto程序做为mqtt的broker,使用python发布消息,以nodejs订阅消息,为下一步使用tensorflow检测结果并用mqtt发送检测结果,使用nodejs构建前端页面订阅消息并展示,建立消息服务的系统建立基础。

 

使用mosquitto构建消息服务,构建的dockerfile如下,使用主机网络模式,以命令 /usr/sbin/mosquitto 启动,启动后默认使用1883的端口进行通信

 

 

使用nodejs订阅消息,通过mqtt的库,填写默认的端口号1883,订阅“ object_detection”的topic ,参考代码如下

 

 

以此为基础建立docker,dockerfile如下

 

 

使用python发送消息 使用paho.mqtt的库,填写默认的端口号1883,发布“ object_detection ”的topic,参考代码如下:

 

 

以此为基础建立docker,dockerfile如下:

 

 

通过构建和下发镜像,之后可以通过docker logs查看镜像消息,如果能看到相应的log信息,表面整个消息服务已经成功建立。

 

通过tensorflow对图像进行推理

 

使用Opencv,通过RTSP协议连接网络摄像头,再对图像帧进行对象检测,最终通过mqtt协议把检测结果发送到消息服务中。对于连接摄像头,参考上述步骤中的“连接网络摄像头并测试视频流“, 发送检测效果参考”使用MQTT协议建立消息服务”,剩余部分主要针对使用tensorflow对图像进行检测。

 

参考

 

https://github.com/tensorflow/models/tree/master/research/object_detection

 

中的 object_detection_tutorial.ipynb ,添加使用opencv对rtsp协议进行解析,获取每一帧图像,针对图像数据,使用已经训练好的模型,对图像进行推理。

 

检测模型可以从

 

https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md

 

中获取,制作好的镜像中包含了测试模型:ssd_mobilenet_v2_coco。推理的结果最终使用MQTT协议把结果发送出来。

 

推理模型的参数: MODEL_NAME = ‘ssd_mobilenet_v2_coco_2018_03_29 ‘

 

摄像头的参数: RTSP_URI = ‘rtsp://192.168.1.164:554/user=admin&password=&channel=1&stream=1.sdp?’

 

参考代码od_atlas.py如下;

 

 

 

 

 

 

完整的docker image可以参考 braveyuyong/tf_on_atlas:tagname:0.2.1 ,参考dockerfile如下:

 

 

 

通过web页面对结果进行展示

 

使用nodejs订阅主题:object_detection,之后通过websocket把推理结果推送到前端页面。前端页面把推理结果和网络摄像头的视频流在页面上展示出来。

 

关于RTSP协议的插件,当前只支持IE11,注意在public/rtsp.html中设置rtsp地址(<param name=’mrl’/>)

 

在src\components\Visual\index.jsx中设置atlas500的IP参数。

 

代码片段如下:

 

 

最终效果

 

先把eclipse-mosquitto的镜像

 

https://hub.docker.com/_/eclipse-mosquitto

 

下载,并上传到华为云SWR上,并通过IEF新建应用下发到节点上,构建mqtt的broker。整个软件架构图如下:

 

 

把页面展示镜像(已经制作好的镜像参考docker pull braveyuyong/visual_rtsp:0.1)进行同样操作,新建应用。

 

最后把TF推理镜像( docker pull braveyuyong/tf_on_atlas:0.1.2 )进行同样操作,下发应用的时候我选择使用cpu 3core,内存2048M。

 

 

最终的三个应用状态如下:

 

 

通过浏览器IE11打开URL: http://192.168.1.111:3001,如果能看到摄像头视频流和推理结果,表明大功告成!

 

 

 

 

Be First to Comment

发表评论

邮箱地址不会被公开。 必填项已用*标注