亚马逊AWS官方博客

亚马逊云科技工业视觉解决方案落地实践

背景

随着智能芯片算力的不断提高和大规模普及,还有以深度学习为首的人工智能算法的大幅提升和改善,人工智能视觉的各种解决方案在人们生活的各行各业已经越来越普遍。从手机app上面的活体人脸识别和美颜相机,到医疗行业的病症筛查和无人超市货品识别。人工智能视觉正在某些场景下慢慢的替代传统人眼观察,为人们提供更便捷的服务。相比人眼观察,人工智能有着很多优势:配合不同镜头应用场景广;适应各种危险环境;长时间工作依然保持高准确率;数字化程度更高且运营成本更低。

本文旨在介绍使用人工智能视觉在工业领域的一些应用场景;客户在落地工业智能视觉时面临的一些挑战;和基于亚马逊云科技IoT框架下的工业视觉解决方案的落地架构。

工业智能视觉的典型场景和挑战

在工业领域有很多场景可以使用人工智能视觉:

  • 商品外观检测,缺陷检测:通过对商品外观检测找出有质量问题的商品,如外包装破损,掉漆等。
  • 货物分拣:通过识别商品属性(如形状,颜色,文字)等,操控流水线对货物进行自动分拣。
  • 危险区域非法闯入检测:在摄像头视野内对危险区域(如高温区域,轨道区域)进行圈定,并在区域内对人型进行检测报警。
  • 仪表盘读数:工厂内老旧设备无法对接其他系统,使用工业视觉解决方案实时读取仪表盘数据并和其他系统集成。
  • 危险事件/灾难检测:对关键区域的视频进行烟雾/火灾/漏水识别并报警。
  • 个人防护装备检测:在车间内部对人员进行安全帽佩戴,工服穿戴检测;疫情期间,进行口罩佩戴的检测等等。

然而传统企业在落地工业智能视觉的方案时往往也面临挑战:

挑战一:AI模型从哪里来?

AI模型可以简单的理解为一个函数,对于视觉的解决方案来说函数的输入就是来自摄像头的图像信息,输出则是图像中需要识别到的信息,所以说AI模型就是工业智能视觉方案的大脑,对解决方案至关重要。然而这个AI模型不是通过人为编写出来,而是需要使用算法训练出来 – 首先要收集大量数据,然后由专业的数据/机器学习科学家选择算法进行训练,而训练本身也需要耗费很多算力。而传统制造企业IT能力相对薄弱,也不具备专业的机器学习科学家,同时企业内部的算力有限,所以训练和后面优化模型是企业面临的一大挑战。

亚马逊工业视觉解决方案使用云上空间可以存储海量数据,企业无需担心容量和可用性的问题。同时结合All in one AI (AI百宝箱)解决方案,普通IT人员可以很轻松的获得常用工业模型,并且使用低代码平台进行模型训练。模型训练基于亚马逊云科技的Amazon SageMaker服务,短时间可以使用大量算力,训练结束之后自动释放,为企业节约成本。使用All in one AI只需要三步就可以训练模型:数据上传,在线标注,一键训练。

挑战二:AI模型如何使用?

单单只有一个AI模型没有办法解决企业遇到的实际问题,这里我们需要把AI模型部署到服务器上,结合硬件摄像头,并且打通后续的业务逻辑,实现数据保存发送通知等功能。而这个过程也需要大量的开发和维护的工作。

亚马逊云科技的工业视觉方案是一个集硬件,AI,第三方通知的AIOT解决方案。其目的是利用工厂企业中原有的普通监控摄像头或者架设专业摄像头,结合AI技术进行实时推理,在利用第三方工具或与本地系统集成,替代传统人眼观察检查:

通过和本地系统的集成,可以实现更快的决策和实时控制;将数据和文件存储到云端,可以利用云端更大的算力和存储能力进行模型的不断优化,生成数据分析报表;集成邮件系统和第三方推送可以实现实时告警和通知。

亚马逊云科技工业视觉解决方案介绍

架构图

技术细节

从架构图中可以看到,整个架构分为两个部分:

  • 边缘端:考虑到绝大多数工厂或者企业不会把摄像头暴露在互联网上,而是放在企业内网环境中,我们把边缘端的程序也部署在企业内网当中,其中Greengrass Core Device需要放置在DMZ里面,这样一方面可以连接处于内网的摄像头,取得视频流,一方面可以和云端的IoT服务连接。这样的设计可以使得视频流的采集在企业内网进行,既保证了安全性又避免了网络结构上的改动;同时在距离摄像头很近的内网进行推理,也节省了互联网流量和内容传输时间,在保证了实时性的同时也节约了成本。
  • 云端:云端的服务主要包括和边缘端沟通的IoT框架;用于保存文件和元数据的模块;用于模型优化的模块(All in one AI);数据可视化的用户界面;和通知部分。

这里我会着重介绍边缘端的架构,因为云端的部分根据用户的需求不同会有取舍。

边缘端

边缘端的设备可以是一台电脑,一台服务器或者一台专用的AI Box(包含GPU),这个设备的算力和整个解决方案的实时性要求还有连接的视频流数量相关。本文中选用的是联想的ThinkEdge SE70,运行的是Ubuntu 20.04系统。需要在设备上先安装python 3.8,yolov5模型的各种依赖,AWS CLI,AWS Greengrass SDK。安装好之后,边缘端设备就会注册在AWS账号中成为一台Greengrass Core Device,用于安装Component(组件)。

Greengrass Core Device是边缘端最重要的设备, 它上面运行的Component(组件)负责视 频流的接入,推理和判断三部分内容,分别对应着架构图中三个Component。三个Component相互独立但是可以在设备本地进行沟通,本地沟通的方式是发布/订阅(Pub/Sub)主题的形式:

  • Stream Component:负责从摄像头RTSP地址拉流并将视频流抽帧,将帧的路径发布给Image Topic。之后订阅Result Topic用来接收来自Model Component的推理结果结果,对帧进行绘制并把结果汇总发到Notification Topic。

视频流断线重连代码示例:

cap = cv2.VideoCapture(path)
while cap.isOpened():
   ret, frame = cap.read()
   if not ret:
       # Close and try auto restart cap
       cap.release()
       time.sleep(300)
       cap = cv2.VideoCapture(path)
       continue

发布/订阅本地主题代码示例:

https://docs.amazonaws.cn/greengrass/v2/developerguide/ipc-publish-subscribe.html

在图片上绘制推理结果代码示例:

cv2.rectangle(frame, left_top, right_bottom, (255, 0, 0), 2)
text = ‘person’
color = (0, 255, 0)
cv2.putText(frame, text, left_top, cv2.FONT_HERSHEY_SIMPLEX, 1, color, 1, cv2.LINE_AA)
  • Model Component:负责对图片进行推理并返回结果。Model Component订阅Image Topic并获得推理的图片路径;调用使用Yolov5算法训练的模型对图片进行推理,并将推理的结果(包括目标类别,坐标信息)发送给另外一个主题:Result Topic。
  • Notification组件:负责处理推理的结果,组件订阅Notification Topic,获取退理结果。用户可以根据自己的业务逻辑编码,判断推理结果是否触发通知条件。如果推理结果触发通知,则可以将事件消息发送给云端IoT Core,并将图片和label信息发送到S3,或者调用本地控制系统的接口。

发送图片到S3的代码示例:

import boto3
s3client = boto3.client(“s3”, region_name=region)
try:
        s3client.upload_file(payload_obj[‘labeled_source’], bucket, event_data[“picture_path”])
        s3client.upload_file(payload_obj[‘source’], bucket, event_data[“origin_picture_path”])
        s3client.upload_file(payload_obj[‘labeled_text_source’], bucket, event_data[“label_path”])
except Exception as e:
        print(“Upload file Err: ” + str(e))

发送订阅IoT Core MQTT消息的代码示例:

https://docs.amazonaws.cn/greengrass/v2/developerguide/ipc-iot-core-mqtt.html

下图展示了三个Component之间数据的流转流程:

云端

工业视觉解决方案的云端部分采用了基于亚马逊云科技的IoT框架与边缘端进行沟通:

  • Amazon IoT Greengrass 将 亚马逊云科技 无缝扩展到边缘设备中,以便它们可以在本地处理其生成的数据,同时仍使用云进行管理、分析和持久存储。借助 Amazon IoT Greengrass,连接的设备可以运行 Amazon Lambda 函数、基于机器学习模型执行预测,保持设备数据同步以及与其他设备安全通信,甚至在没有连接互联网的情况下也可实现这些功能。

利用 Amazon IoT Greengrass,您可以使用熟悉的语言和编程模型在云中创建和测试设备软件,然后将其部署到设备中。您可以对 Amazon IoT Greengrass 进行编程,让其可以筛选设备数据、管理该数据在设备上的生命周期,并仅将必要信息传输回 亚马逊云科技 中。您还可以使用 Amazon IoT Greengrass 连接器连接到第三方应用程序、本地软件和即时可用的 亚马逊云科技 服务。连接器还可以用预先构建的协议适配器集成快速启动设备。

在工业视觉解决方案中,所有在边缘端运行的组件都是由Amazon IoT Greengrass部署到设备中。当应用程序/模型有更新的时候,可以直接使用云端的管理界面对多台边缘端设备进行OTA更新。

  • Amazon IoT Core 是一种托管的云平台,让互联设备可以轻松安全地与云应用程序和其他设备交互。Amazon IoT Core可以支持数十亿台设备和数万亿条消息,并能处理这些消息并将其安全可靠地路由至亚马逊云科技终端节点和其他设备。借助 Amazon IoT Core,您的应用程序可以随时跟踪您的所有设备并与其通信。

在工业视觉解决方案中,我们使用MQTT协议,由边缘端运行的Notification Component将事件信息发送给云端的AWS IoT Core,在通过云端的AWS IoT Core Rule Engine在云端进行处理。处理方式包括把事件的元数据存储到DynamoDB,后面可以回看;可以通过AWS Lambda写入AWS OpenSearch Service,后面使用Kibana方便的做出报表;也可以写入Amazon SQS队列,后面使用Lambda去发送邮件或者IM通知。

模型的准确度对于整个工业视觉解决方案至关重要,准确度低,会出现很多漏检和误检的情况,达不到质量和安全上的要求或者还需要大量人力后期复检,失去了解决方案的意义。然而对于图像检测模型来说,检测准确度和很多因素有关,比如说画面的亮度,画面背景的复杂度,拍摄的角度等等。这个时候往往需要针对真实的场景数据对模型进行优化:由于我们会把模型检测出来的结果(label)和原始图片存储在S3上面,我们可以使用All in one AI或者第三方的标注工具对检测出来的结果进行标注修正,然后使用一键训练启动新的训练任务。训练出来新的模型可以通过IoT Greengrass部署到设备端,提升模型的准确度。

最后,在云端我们也可以增加视频直播的功能,如果在AWS Global Region注册的账号可以使用Amazon Kinesis Vidoe Stream服务,从Stream Component将视频流推送到stream上,实现视频直播和回看;如果在中国区注册的账号,可以通过安装第三方软件(比如说Nginx+rtmp module)实现直播功能。

总结

本文介绍了利用人工智能视觉在工业场景中的优势,着重介绍了亚马逊云科技的工业视觉解决方案的典型场景,云+边的架构,以及关键代码的实现。希望不管您是亚马逊云科技的客户或是合作伙伴,都可以从中获得启发,使用人工智能视觉技术帮助企业解决相关问题。

参考资料

工业视觉解决方案 https://www.amazonaws.cn/en/solutions/industry/manufacturing/guidance/industrial-vision-solution/

AI百宝箱 https://www.amazonaws.cn/en/solutions/horizontal/guidance/all-in-one-ai/#

本篇作者

Fox Qin

AWS快速原型团队解决方案架构师,主要负责IoT和移动端方向的架构设计和原型开发,此外对AWS的无服务器架构,跨地区的多账号Organization,网络管理,解决方案工程化部署等方面也有深入的研究。

李佳

AWS快速原型解决方案研发架构师,主要负责微服务与容器原型设计与研发。