物联网设备和制造执行系统(MES)中的MQTT应用

使用MQTT在物联网设备和MES中广播计算机视觉预测

在当今的智能制造环境中,物联网(IoT)设备和制造执行系统(MES)的集成变得越来越重要。通过使用消息队列遥测传输(MQTT)协议,可以在不同的设备或MES之间发送计算机视觉模型的预测结果。例如,可以在一台设备上运行视觉模型,如NVIDIA Jetson,并将结果发送到其他地方进行进一步处理。

本文将通过一个示例,展示如何通过MQTT广播计算机视觉预测。假设有一个瓶盖检查模型,该模型用于确保瓶盖是否正确密封在瓶子上。将在网络摄像头上部署此模型,并使用Roboflow Inference,这是一个开源的计算机视觉推理服务器,每月为企业提供数百万次API调用。

from inference import InferencePipeline from inference.core.interfaces.stream.sinks import render_boxes pipeline = InferencePipeline.init( model_id="bottle-cap-integrity/3", video_reference=0, # 视频路径,设备ID(通常是内置摄像头的0)或RTSP流URL on_prediction=render_boxes, ) pipeline.start() pipeline.join()

在上述代码中,使用InferencePipeline在视频流上运行模型。0值对应于摄像头的ID。0代表设备上的默认摄像头。也可以指定RTSP流URL,如果想在该流上运行推理。

要运行上述代码,需要在名为ROBOFLOW_API_KEY的环境变量中设置Roboflow API密钥:

export ROBOFLOW_API_KEY=""

了解如何检索API密钥。运行上述代码后,模型成功识别出画面中的瓶子是否密封不当。现在,可以开始在MQTT上广播来自模型的信息。

一个最小的MQTT部署包括两个组件:一个接收和处理消息的代理,以及一个向代理发送消息的客户端。在本指南中,假设已经设置了代理。这可能是由制造执行系统提供的代理,或者是使用设施中的另一个系统部署的代理。

import json import paho.mqtt.client as mqtt from inference import InferencePipeline from inference.core.interfaces.stream.sinks import render_boxes client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION1) client.connect( host="localhost", port=1883, ) def on_prediction(predictions, video_frame): render_boxes(predictions=predictions, video_frame=video_frame) predictions = json.dumps(predictions) client.publish( topic="bottle-cap-integrity", payload=predictions, qos=0, retain=False ) pipeline = InferencePipeline.init( model_id="bottle-cap-integrity/7", video_reference=0, on_prediction=on_prediction, confidence=0.3, ) pipeline.start() pipeline.join()

在上述代码中,将localhost替换为代理URL,将1883替换为代理端口。将bottle-cap-integrity替换为想要发送消息的MQTT主题名称。0是视频输入,0是默认摄像头。上述代码没有启用SSL,因为SSL配置会有所不同。在生产环境中部署代码时,请确保与代理启用SSL认证。如有必要,请调整上述代码以进行SSL认证。

在上述代码中,连接到MQTT代理。然后,定义了一个回调函数,该函数将模型的每个预测发送到MQTT。这是通过client.publish()调用完成的。然后,使用Roboflow Inference包中提供的InferencePipeline API在视频流上运行模型。

让运行上述代码。在下面的视频中,有两个流打开:模型的实时预测和代理接收到的消息。在视频的左窗口中,可以看到模型的预测。在右窗口中,每次屏幕上出现瓶子时,预测就会进来。

可以根据业务需求自定义上述代码。例如,只有在画面中出现有缺陷的物体时才发送预测。这可以使用Supervision,一个Python包,它提供了一系列用于构建计算机视觉应用程序的实用工具。使用Supervision,可以使用ByteTrack,一个目标检测跟踪算法,来跟踪物体。然后,当新物体进入视野时,可以触发MQTT消息。这在装配线上非常理想,只想对每个产品(在本例中,是对每个经过摄像头的瓶子)进行一次评估。

结论:MQTT是一种交换数据的标准协议。MQTT通常用于物联网和制造应用中,在本地网络上发送消息。可以使用MQTT广播计算机视觉模型的预测。在本指南中,介绍了如何通过MQTT广播计算机视觉预测。展示了如何在Roboflow上部署训练或上传的模型。使用Roboflow Inference部署了模型,这使能够在自己的设备上运行模型。然后,发送了MQTT消息,用于模型返回的所有预测。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485