利用Roboflow进行物体堆叠检测与邮件通知

在现代物流、运输、零售、制造、包装和库存管理等领域,计算机视觉技术的应用越来越广泛。本文将介绍如何通过Roboflow平台,结合自定义动作和代码,实现对物体堆叠的检测,并在检测到潜在安全风险时发送邮件通知

首先,需要确定一个具体的应用场景。在本教程中,将关注纸板箱堆叠的安全性。希望在Jetson Nano检测到三个或更多纸板箱堆叠在一起时收到邮件通知,因为这可能是一个安全隐患。当然,应用场景可以是任何其他领域。过去,开发者们已经使用Roboflow进行微生物研究、无人机自动驾驶等。如果需要灵感,可以访问Roboflow Universe,这是一个包含数千个数据集和模型的中心。

接下来,将在Universe中寻找一个模型来使用或训练自己的模型。在RoboflowUniverse上,找到了一个已经训练好的模型的数据集。或者,也可以轻松地上传自己的数据,创建一个数据集,并在Roboflow的端到端平台上一键训练模型。

RoboflowUniverse上,可以通过拖放图片来测试训练好的模型。看起来找到的模型相当准确!

自定义Python动作进行计算机视觉处理

Roboflow使得使用模型变得像API调用一样简单。将基于API代码片段库中的一个片段来构建,该库为Python、Javascript、Go、Java等提供了样板代码。可以在这里找到将要引用的修改后的代码。

如果需要,可以在第31行更改指定的相机——内置摄像头通常索引为0。通过在第27行将"&format=image"更改为"&format=json",要求API返回JSON响应。

编写一个名为process_preds的函数,该函数通过比较每个检测到的盒子的坐标,并判断一个盒子是否似乎“在”另一个盒子的“顶部”,来识别堆叠和每个堆叠中有多少个盒子。

由于告诉API不返回图像,将使用opencv在每个检测到的盒子上绘制边界矩形,以便仍然可以可视化预测。

添加一个名为action.py的文件,定义一个名为execute_trigger的函数,其中包含希望在Jetson Nano看到三个或更多包裹堆叠在一起时执行的自定义代码。使用一个名为simplegmail的库,它将向指定的电子邮件地址发送电子邮件。该函数还保存Jetson Nano正在查看的图像,并将该文件作为附件附加到电子邮件中。这只用了11行Python代码!

import cv2 from simplegmail import Gmail import json gmail = Gmail() # 将打开一个浏览器窗口要求登录并认证 with open('roboflow_config.json') as f: params = json.load(f)['simplegmail_config'] # 定义一个自定义动作,当堆叠的盒子足够多时执行。 # 将发送一封带有堆叠物品照片的电子邮件。 def execute_trigger(overlayed_image, raw_image): cv2.imwrite("overlayed_image.jpg", overlayed_image) cv2.imwrite("raw_image.jpg", raw_image) print("Image successfully saved! Attempting to send email.") message = gmail.send_message(**params)

这是用于发送电子邮件通知的11行自定义Python代码!(在action.py中)

在视频的最后,可以看到“Image successfully saved! Attempting to send email.”一个小测试。当达到某些阈值时,通过电子邮件发送图像的示例。

使用代码构建自己的应用程序

如果想尝试,可以随意复制代码。在roboflow_config.json中,指定模型、API密钥和每个通知电子邮件的详细信息(如发件人、收件人和HTML内容)。可以在Roboflow Universe页面的“Deploy”页面上找到模型ID和API密钥,或者在自己的项目中如果训练了自己的模型。

接下来,按照这里的说明设置simplegmail——需要登录Google Cloud Console,创建一个项目,并创建一个名为client_secret.json的文件,其中包含Google API密钥。将该文件与main.py和action.py保持在同一目录下。

为Roboflow Deploy设置Jetson Nano

而不是使用Roboflow的托管API,也可以在Jetson Nano上运行推理。这是可选的,但可能希望在本地运行推理以获得更低的延迟,并利用Jetson的GPU加速。Roboflow分发了一个简单的Docker容器来处理所有依赖项,并使代码像API调用一样简单。

# pull the container sudo docker pull roboflow/inference-server:jetson # Run it while passing through the Jetson's GPU sudo docker run --net=host --gpus all roboflow/inference-server:jetson

然后,在第23行,可以通过将"https://detect.roboflow.com/"更改为"http://127.0.0.1:9001/",将请求指向本地容器而不是托管的API。

确保将Python代码传输到Jetson,使用pip安装依赖项,并插入一个相机。让运行main.py!

在Jetson Nano上运行main.py。发送到手机的电子邮件附有堆叠的盒子的照片。

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