有没有一个命令将多张jpg合成一个tif_一个基于树莓派的边缘视频AI Demo案例

由一个实际问题引发的思考

渣土车在城市运输过程中,存在抛洒滴漏的情况,对城市环境造成很大污染。如下图所示,滴漏的渣土会导致飞尘影响空气质量,还需要环卫工人上路清扫。

e48e1f2d6517e245354425759a47a87b.png

有些严重的渣土抛洒滴漏问题,还会产生交通安全事故。南京出现了首例因渣土抛洒导致交通事故,货车司机被公诉的案例(http://news.jstv.com/a/20171114/1510664243313.shtml)。

c604bf20734a901083886a451639bfb6.png

渣土抛洒是城市环卫管理的一个典型难题,主要体现在以下几个方面:

  • 渣土抛洒发现不及时,大多数情况需要等到路过的群众举报才得以知道具体地点出现了渣土抛洒。

  • 城市道路众多,无法通过实时监视所有道路的方式去发现渣土抛洒问题。

  • 渣土运输车辆多,无法通过云端实时分析车辆上传的道路视频去发现渣土抛洒问题,云端计算处理的视频数据量过于庞大,成本也很高。

有没有一个方案,能够让车辆自己主动发现、主动报告渣土抛洒问题。

基于边缘视频AI的解决方案

上述提到的问题,是一个典型的边缘视频AI的场景,通过边缘视频AI,可以快速发现、定位渣土抛洒问题,并协同城市管理单位进行及时处理。可以考虑通过以下步骤来解决:

  1. 模型训练

  • 百度AI大脑的EasyDL平台(https://ai.baidu.com/easydl/)

  • 微软的认知服务平台(https://www.customvision.ai/)

  • 通过AI模型训练平台生成 渣土抛洒识别模型 ,目前市面上的AI模型训练平台有很多,这里推荐两个平台

边缘环境搭建

  • 在渣土车尾部安装视频摄像头

  • 在渣土车上安装边缘设备AI-BOX,并与车尾摄像头连接。AI-BOX可以使用百度AI市场上的 EdgeBoard边缘AI计算盒(https://aim.baidu.com/product/7040880d-4d04-4667-97b7-ecafdf9b7609)

边缘设备接入BIE

  • 边缘设备部署Baetyl边缘计算框架,并连接百度智能云,可以参考 快速上手智能边缘(https://cloud.baidu.com/doc/BIE/s/Gk2b8fwvz)

云端配置边缘应用模块,各模块在边缘设备上实现以下功能:

  • 接入视频摄像头数据

  • 使用渣土抛洒模型对摄像头数据执行AI推断,判断是否有渣土抛洒

  • 如果有抛洒,则保存抛洒图片,并发送一条消息通知消息说明抛洒情况

模拟场景

前面描述的 渣土抛洒 所使用的渣土抛洒识别模型无法对外公开,本文将使用已经在github开源的 ssd_mobilenet_v1_coco_2017_11_17 作为替代模型,完整演示以下的模拟场景:

  1. 摄像头连接树莓派,实时探测视野范围内的物体

  2. 当检测到目标物体以后,保存抽帧图像,并同步发送一条消息到边缘hub模块。如果没有检测到目标物体,丢弃抽帧图像

  3. 支持检测多目标物体,本场景实验检测的物体包括: 剪刀、 笔记本电脑、 书本、 键盘和 

前提准备

  • 有一个百度智能云账号

  • 有一个树莓派,本实验用的是 Raspberry Pi 4,也可以使用树莓派的其他型号(Raspberry Pi 3 Model B+),或者使用Ubuntu16.04的虚拟机

  • 有一个摄像头,本实验用的是 Raspberry Pi Camera Module v2,也可以使用其他USB摄像头或者IP摄像头

  • 有一个物体识别模型,本实验用的是 ssd_mobilenet_v1_coco_2017_11_17(https://doc.bce.baidu.com/bce-documentation/BIE/ssdmobilenetv1coco20171117.zip),该模型支持检测90种物体,具体清单请参考:mscoco_label_map(https://github.com/tensorflow/models/blob/master/research/objectdetection/data/mscocolabel_map.pbtxt)

  • 树莓派已连接云端BIE

通过本教程你将学习

  1. 搭建边缘AI硬件环境

  2. 配置边缘AI模块

  3. 验证边缘AI检测结果

操作流程

搭建边缘AI硬件环境

摄像头可以使用 树莓派摄像头模块USB摄像头IP摄像头,不同的摄像头有不同的配置方式:

  • 树莓派摄像头模块:针对树莓派摄像头模块的环境搭建,可以参考 树莓派3B摄像头安装与测试

  • USB摄像头:针对USB摄像头的环境搭建,请参考官方文档 使用标准USB摄像头。

默认情况下,在树莓派摄像头模块和USB摄像头连接树莓派以后,系统中会新增了 /dev/video0 这个设备,这个参数 0将在后续的 video-infer模块配置 当中被用到。

  • IP摄像头:树莓派需要通过 rtsp 协议访问IP摄像头,可以先通过 VLC media player 等工具测试IP摄像头是否可以通过 rtsp 协议访问。如下图所示:

  • 708c136d63940ab5baca8d0a1a21e5d5.png

    c672f634c7be80173da2d4544fe59618.png

rtsp协议地址通用格式为 rtsp://:@:/ ,各参数解释如下:

  •  :摄像头登录用户名 ,一般可以在摄像头底座当中找到

  •  :摄像头登录密码,一般可以在摄像头底座当中找到

  •  :路由器/交换机分配给摄像头的IP地址

  •  :RTSP 协议的端口号,一般默认为 554

  •  :摄像头信道

配置边缘AI模块

除了树莓派初始连接BIE建立的agent模块之外,还需要为树莓派这个边缘核心添加额外4个模块:

序号模块名模块类型
1agentbaetyl-agent边缘核心与云端BIE通讯模块
2localhubbaetyl-hub边缘核心本地MQTT Broker消息模块
3function-managerbaetyl-function-manager边缘函数管理模块
4function-pythonbaetyl-function-python36后处理函数,处理AI推断结果
5video-inferbaetyl-video-inferAI推断模块,加载AI模型执行AI推断

每个模块都需要做相应的配置。

模块关系图

各模块之间的调用关系如下图所示:

0359d83362a7c23d2dd8712897270a91.png

模块功能详细说明
  1. video-infer

  • 采集视频数据

  • 对视频抽帧

  • 基于AI模型对抽帧图像进行AI推断

  • 通过GRPC接口调用后处理函数管理器 function-manager

function-manger

  • 接收video-infer模块的调用

  • 为video-infer分配具体的后处理函数 function-python

function-python

  • 真实的后处理函数,对video-infer模块的AI推断结果进行后处理

  • 返回后处理结果给 video-infer模块

video-infer

  • 根据后处理函数的返回结果,决定是否保存抽帧图像,是否发送mqtt消息到hub模块

模块详细配置

模块详细配置请点击“查看原文”(https://cloud.baidu.com/doc/BIE/s/Dk3nv5gum)。

验证边缘AI检测结果

step1:配置下发

云端一切配置完毕,将配置发布为正式版本,下发至边缘核心设备,并检查模块已经正常启动。

在BIE控制台查看下发的版本是否生效,以及当前边缘核心服务模块的状态,如下图所示:

aa30e0b833c23c25f98174852d0e23e6.png

登录到树莓派,通过 docker ps命令检查服务模块运行状态,如下图所示:

6da399d256bc46f7c84bc93faeee5cd3.png

step2:使用MQTTBox订阅localhub

在模拟场景当中提到“当检测到目标物体以后,保存抽帧图像,并同步发送一条消息到边缘hub模块”,为了监测发送到hub模块的消息,我们使用MQTTBox工具提前订阅 video/infer/result 这个topic的消息,如下图所示:

1e6a404d87e043bbf3d68b5e2c5db9dd.png

step3:使用摄像头检测物体
  1. 手持摄像头,旋转一周,让摄像头能够扫描到办公桌上的 剪刀、 笔记本电脑、 书本、 键盘,以及坐在工位上的 

  2. 实时查看订阅了 hub模块的MQTT Box的消息界面,每检测到一个目标物体,MQTT Box就能订阅到一条消息。

a16068890082fc7c2d9fb73ff0b441fc.png

MQTT消息解析

将MQTTBox订阅的消息进行Json格式化,得到如下结果:

{

"imageCaptureTime": "2019-12-05T06:32:01.095503816Z",

"imageDiscard": false,

"imageHight": 480,

"imageInferenceTime": 0.680533552,

"imageLocation": "var/db/baetyl/image/1575527521095503816.jpg",

"imageObjects": [{

"bottom": 0.7979179620742798,

"class": "scissors",

"left": 0.4228750169277191,

"right": 0.7018369436264038,

"score": 0.9887169599533081,

"top": 0.29671576619148254

}],

"imageProcessTime": 0.691838184,

"imageScores": {

"book": 0.0685628280043602,

"cell phone": 0.040239665657281876,

"keyboard": 0.03728525713086128,

"person": 0.037795186042785645,

"scissors": 0.9887169599533081

},

"imageWidth": 640,

"messageTimestamp": 1575527521095,

"publishTopic": "video/infer/result"

}

通过上述消息,可以得出如下结论:

  • 检测到物体是剪刀: "class":"scissors"

  • AI推断为剪刀的得分是0.988: "scissors":0.9887169599533081

  • 图片已保存: "imageLocation":"var/db/baetyl/image/1575527521095503816.jpg"

step4:验证被保存的图片当中的对象
  1. 登录到树莓派,查看已经保存了多张抽帧图片,如下图所示:

    1ed5a1a4df2fb7d1eedd413369e36683.png

  2. 将 1575527521095503816.jpg 下载到本地电脑,确认该图片当中物体是剪刀,与MQTTBox接收到消息一致,如下图所示:

    21a0e777e951795142948a6761a8bd08.png

总结

  1. 通过本文,你可以设计并完成一个典型边缘视频AI解决方案,让你“0门槛”跨入AIoT的领域。

  2. 虽然本文的的模拟场景比较简单,但是视频AI的整体流程已经完全覆盖,你完全可以基于这样的套路去解决真实场景的问题。

最后如果需要查看完整教程,请点击“查看原文”(https://cloud.baidu.com/doc/BIE/s/Dk3nv5gum)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值