使用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消息,用于模型返回的所有预测。