×

使用Google Coral回收分拣机器人

消耗积分:0 | 格式:zip | 大小:0.08 MB | 2022-10-27

李舒桀

分享资料个

描述

您是否知道社区和企业的平均污染率高达 25%?这意味着您丢弃的每四件可回收物品中就有一件不会被回收。这是由于回收中心的人为错误造成的。传统上,工人会根据材料将垃圾分类到不同的垃圾箱中。人类必然会犯错误,最终无法正确分类垃圾,从而导致污染。随着污染和气候变化在当今社会变得更加重要,回收在保护我们的星球方面发挥着重要作用。通过使用机器人分拣垃圾,污染率将大幅下降,更不用说更便宜和更可持续了。为了解决这个问题,我创建了一个回收分拣机器人,它使用机器学习在不同的回收材料之间进行分类。

代码:

请克隆我的 GitHub存储库以跟随本教程。

第 1 步,获取数据:

为了训练可以检测和识别不同回收材料的对象检测模型,我使用了包含 2527 张图像的垃圾网数据集

  • 501玻璃
  • 594 纸
  • 403纸板
  • 482塑料
  • 410金属
  • 137 垃圾

这是一个示例图像:

pYYBAGNYqSSAbMh_AAAf9Dbu6uk026.jpg
 

该数据集非常小,无法训练对象检测模型。只有大约 100 张垃圾图像太少而无法训练准确的模型,所以我决定将其排除在外。

您可以使用此 google drive文件夹下载数据集。确保下载 dataset-resized.zip 文件。它包含已经调整为较小尺寸的图像集,以允许更快的训练。如果您想根据自己的喜好调整原始图像的大小,请随时下载 dataset-original.zip 文件。

第 2 步,标记图像:

接下来,我们需要标记不同回收材料的几张图像,以便我们可以训练对象检测模型。为此,我使用了免费软件labelImg,它允许您在图像中标记对象边界框。

用适当的标签标记每个图像。教程向您展示如何。确保使每个边界框尽可能靠近每个对象的边界,以确保检测模型尽可能准确。将所有 .xml 文件保存到一个文件夹中。

以下是如何标记图像:

pYYBAGNYqSaATSzCAAHa_hw8ZAk592.png
 

这是一个非常乏味和令人麻木的体验。感谢您,我已经为您标记了所有图像!你可以在这里找到它

第三步,训练:

在训练方面,我决定使用 Tensorflow进行迁移学习。这使我们能够在没有大量数据的情况下训练出相当准确的模型。

我们有几种方法可以做到这一点。我们可以在云上的本地桌面计算机上完成。在我们的本地机器上进行训练将需要很长时间,具体取决于您的计算机有多强大以及您是否拥有强大的 GPU。在我看来,这可能是最简单的方法,但同样存在速度的缺点。

关于迁移学习,有一些关键的事情需要注意。您需要确保用于训练的预训练模型与 Coral Edge TPU 兼容。您可以在此处找到兼容的型号我使用了 MobileNet SSD v2 (COCO) 模型。也可以随意尝试其他人。

要在本地机器上进行训练,如果在 Windows 10 上运行,我建议遵循Google 的教程或EdjeElectronics教程。就我个人而言,我已经测试了 EdjeElectronics 教程并在我的桌面上取得了成功。我无法确认 Google 的教程是否有效,但如果没有,我会感到惊讶。

要在云中训练,您可以使用 AWS 或 GCP。我找到了这个教程,你可以试试。它使用谷歌的云 TPU,可以超快速地训练你的对象检测模型。也可以随意使用 AWS。

无论您是在本地机器上还是在云端进行训练,最终都应该得到一个经过训练的 tensorflow 模型。

第 4 步,编译训练模型:

为了使您的训练模型能够与 Coral Edge TPU 一起使用,您需要对其进行编译。

这是工作流程的图表:

pYYBAGNYqSmALlGAAADDtmEOaIE100.png
 

训练后,您需要将其保存为冻结图(.pb 文件)。然后,您需要将其转换为 Tensorflow Lite 模型。请注意它是如何说“训练后量化”的。如果您在使用迁移学习时使用了兼容的预训练模型,则无需这样做。在此处查看有关兼容性的完整文档

使用 Tensorflow Lite 模型,您需要将其编译为 Edge TPU 模型。在此处查看有关如何执行此操作的详细信息

回收检测模型:

如果您不想重复训练、转换和编译对象检测模型的麻烦,请在此处查看我的回收检测模型

第 5 步,部署模型:

下一步是设置 Raspberry Pi (RPI) 和 Edge TPU 以运行经过训练的对象检测模型。

首先,使用本教程设置 RPI 。

接下来,按照本教程设置 Edge TPU 。

最后,将 RPI 摄像头模块连接到树莓派。

您现在已准备好测试您的对象检测模型!

如果您已经克隆了我的存储库,您将需要导航到 RPI 目录并运行test_detection.py文件:

python test_detection.py --model recycle_ssd_mobilenet_v2_quantized_300x300_coco_2019_01_03/detect_edgetpu.tflite --labels recycle_ssd_mobilenet_v2_quantized_300x300_coco_2019_01_03/labels.txt

应该会弹出一个小窗口,如果你放一个塑料水瓶或其他回收材料,它应该像这样检测它:

poYBAGNYqS2AUIsKAAEMRz4kjYw588.png
 

按键盘上的字母“q”结束程序。

第 6 步,构建机械臂:

机械臂是我在这里找到的 3D 打印手臂只需按照教程进行设置即可。

我的手臂是这样的:

poYBAGNYqTCAR38xAAFdn1iwTTw69.jpeg
 

确保将伺服引脚连接到我的代码中根据 Arduino I/O 引脚。从下往上依次连接舵机:3、11、10、9、6、5。不按这个顺序连接会导致舵机移动错误的舵机!

通过导航到 Arduino 目录并运行basicMovement.ino文件来测试它是否正常工作。这将简单地抓住一个放在手臂前面的物体并将其放在后面。

第 7 步,连接 RPI 和机械臂:

我们首先需要将摄像头模块安装到爪子的底部:

pYYBAGNYqTSAI2_PAAJwQMxY8zc06.jpeg
 

尽量将相机对齐,以尽量减少抓取已识别回收材料时的错误。您将需要使用材料列表中显示的长相机模块带状电缆。

接下来,您需要将robotsArm.ino文件上传到 Arduino 板。

最后,我们只需在 RPI 的 USB 端口和 Arduino 的 USB 端口之间连接一根 USB 电缆。这将允许他们通过串行通信。请按照本教程进行设置。

第 8 步,最后润色:

这一步是完全可选的,但我喜欢将我所有的组件放入一个漂亮的小项目框中。

这是它的外观:

pYYBAGNYqTeAQuzSAAF7GqKG7KM09.jpeg
 
poYBAGNYqTqAN1gJAAIGBPl5YyI24.jpeg
 

您可以在材料清单上找到项目框。我刚刚钻了一些孔并使用黄铜支架来安装电子设备。我还安装了 4 个冷却风扇,以在热时保持通过 RPI 和 TPU 的恒定气流。

第 9 步,运行:

您现在可以启动机械臂和 RPI!在 RPI 上,您可以简单地运行recycle_detection.py文件。这将打开一个窗口,机械臂将开始运行,就像在演示视频中一样!按键盘上的字母“q”结束程序。

随意玩弄代码并玩得开心!

未来的工作:

我希望用 ROS 来控制机械臂,动作更精确。这将能够更准确地拾取物体。

问题?

如果您有任何问题,请随时在下面发表评论!


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !