方案介绍
本方案可使用经过培训的边缘设备警告驾驶员轮胎压力过低,该设备可以查看汽车轮胎是满还是漏气。
该项目演示了如何构建一个电池供电的边缘设备,该设备使用机器视觉测量汽车轮胎的压力水平,并在轮胎不安全行驶时提醒用户。
当汽车在设备前行驶时,其轮胎的图像会被捕获并分类为“满载”或“爆胎”。设备顶部的指示灯会改变颜色以通知用户结果。任何显示“红色”的轮胎都处于非常低的压力下,应在继续行驶之前将其固定。
Edge Impluse 用于设计和训练图像分类模型,该模型可准确区分正常压力(满)和低压(扁平)级别的轮胎图像。该模型部署到设备内的 OpenMV Cam 并在其上运行。
该原型作为概念证明,可以被任何定期检查车辆的行业采用,以减少检查时间并提高安全性。
背景
车辆安全对任何在道路上行驶的人来说都是最重要的。司机每天都依靠妥善保养的汽车和卡车将他们从一个地方送到另一个地方而不会受到伤害。
多个行业的任务是确保对大量车辆进行例行审查,确保道路安全:
卡车称重站:由 DOT 运营,这些站验证高速公路上的卡车是否符合安全规定。检查员对卡车进行物理检查,以确保它们符合要求的标准。
自主轿车舰队:自主汽车的大型船队将在集中仓库进行维修。定期维护可确保汽车系统准确校准并按预期运行。
租车归还:租车公司需要确保汽车处于安全工作状态,然后再借给下一位客户。在汽车再次可用之前,必须进行多点安全检查。
虽然必须涵盖整个检查清单才能验证车辆的安全性,但一项至关重要的检查是轮胎压力。
在车辆的每个轮胎中保持正确的气压对于安全驾驶至关重要。充气不足或漏气的轮胎会影响车辆的整体操控性,使其响应速度变慢,停车速度变慢,并可能导致道路上非常危险的轮胎爆胎。
汽车和卡车通常配备胎压监测系统 (TPMS),通过仪表板警告灯提醒驾驶员胎压低。
然而,TPMS 的局限性在于它的警告只有能够进入车辆内部的检查员才能看到,并且它依赖于轮胎内的单个传感器来捕获如此重要的安全测量。
在许多车辆都是手动检查的环境中,例如上面列出的那些,需要一种自动化的车外方式来准确测量轮胎压力。
有了这个,检查员将不再需要进入车辆,而是远程获取准确的读数。这样的系统将缩短检查时间,同时提供额外的安全验证。
该项目旨在通过原型设备解决这个问题,该设备使用机器视觉从车辆外部快速确定轮胎压力,并将结果通知检查员。
如何运作
该设备由一个摄像头和电子设备组成,安装在一个可调节的支架上,可以部署在汽车驶过的任何地方,以测量轮胎压力水平。
OpenMV Cam H7 Plus 微控制器板提供设备的计算能力和机器视觉功能。
OpenMV Cam 包括一个板载摄像头、处理器和存储。Python 脚本可用于以编程方式捕获、保存和处理图像,以及控制板的 I/O 引脚。该板适合设备的 3D 打印外壳,其摄像头从正面的孔中伸出。
RGB LED 使用跨接线连接到 OpenMV Cam 的 I/O 引脚,并穿过外壳顶部的孔。电源由连接的 LiPo 电池提供给电路板。
背板将所有电子设备和电池固定在外壳内,然后连接到 3D 打印支架中。
组装好的设备放置在目标汽车所在位置的一侧,瞄准时摄像机的视野将覆盖单个轮胎的位置,并在其周围增加 6-12 英寸的缓冲区。
距离汽车门侧大约 3 英尺,电子设备外壳略微向上倾斜。
设备通电后,加载到 OpenMV Cam 的 Python 脚本会自动开始执行。
该脚本连续运行,循环执行以下处理步骤:
用于对每个图像进行分类的 TensorFlow 模型已经在三个类别的示例图像的标记数据集上进行了训练:
正确充气轮胎的“完整”图像;未填充轮胎的“扁平”图像;和非轮胎物体的“无轮胎”图像,如汽车侧面或空车库。
有关创建使用的标记数据集的更多详细信息,请参阅下面的构建说明部分。
通过在训练过程中反复接触数百张示例图像,该模型学习了可以使用哪些图像形状和特征来准确区分三类。
OpenMV Cam 捕获的图像由经过训练的模型处理,该模型根据输入图像与模型学习的形状和特征鉴别器的匹配程度输出每个类别的预测分数。
无论哪个类别——“完整”、“平坦”或“无轮胎”——具有最高的预测分数,都被认为是该图像的单一分类。
通知灯被编程为根据图像的分类改变其颜色 - 为“绿色”、“红色”或“黄色”。
处理工作流以每秒 5 帧的速度运行,这足以为缓慢移动的汽车提供实时结果。
从最初在设备视野之外的汽车轮胎开始,捕获的图像被正确分类为“无轮胎”,指示灯显示黄色。
当汽车在设备前面行驶并且其轮胎进入相机的视野时,根据轮胎的压力水平将捕获的图像分类为“满”或“漏气”,并且指示灯相应地变为绿色或红色。
用户或检查员只需在汽车驶过时监控通知灯的颜色即可验证其轮胎的状态。
如果当轮胎穿过设备时通知灯变为绿色,则检查员知道轮胎已正确充气并且可以安全行驶。红色通知灯表示轮胎气压低,需要在继续行驶前加满油。
构建说明
以下是有关如何构建、原型设计和部署漏气轮胎分类器设备的端到端说明。
从设备硬件的初始设置开始此项目。接下来,使用 OpenMV IDE 创建来自三个目标类别的标记图像数据集 - “full”、“flat”和“no-tire”。
然后使用 Edge Impulse 来设计和训练使用数据集的图像分类模型。训练好的模型被导出到 OpenMV Cam 并进行测试。
通过将 RGB LED 连接到微控制器并更新 Python 代码以使其用作通知灯来完成项目。
初始硬件设置
如果设备使用的图像分类模型在设备完全组装并放置在地面上时,在与设备相同的视角下捕获的示例图像上进行训练,则该模型将表现最佳。
首先将 Open MV Cam H7 放置在用于最终部署的同一个 3D 打印外壳和支架中,确保在接下来的数据集创建步骤中正确定位 Open MV Cam H7。
这种初始设置不需要 LED 或电池。
第 1 步:PrintHousingandStand
项目附件中提供了外壳和支架的模型文件 (.stl) 。3D 打印每个文件以创建系统的三个部分 - 外壳、背板和支架。
可能需要打磨以将外壳的臂装入支架的孔中。背板压力适合外壳背面以封闭电子设备。
第 2 步:安装 OpenMV Cam
OpenMV Cam H7 Plus 安装在外壳内,其摄像头从正面的孔中伸出。
Cam H7 压力配合到它的位置,它的销可以通过将它们稍微向外弯曲朝向外壳壁来提供更紧密的配合。
外壳底部的孔可用于访问 Cam H7 的 USB 插座。
创建带标签的数据集
需要有标记图像的自定义数据集才能正确训练设备将采用的图像分类模型。
目的是让模型准确地将图像区分为三个类别之一——“完整”、“平坦”或“无轮胎”——这可以通过在训练期间将模型暴露给每个类别的许多示例图像来实现。
训练依赖于示例图像的数据集,每个图像都与它们所代表的类别的标签配对。每个类都定义为包含特定内容:
这些定义支持设备的预期应用。当汽车驶过设备时,车库背景、汽车面板和部分轮胎的图像应归类为“无轮胎”。只有当汽车的轮胎完全移动到相机的框架中时,才应该对“完整”和“平坦”类别进行分类。
通过捕获适合每个类定义的各种图像来构建数据集。图像多样性确保模型暴露于同一类图像之间可能存在的许多差异。
OpenMV IDE 和连接的 OpenMV Cam H7 Plus 用于收集和组织数据集的图像。
这些说明假设您可以使用车辆、可以驾驶的小区域,并且能够改变车辆的轮胎压力。
步骤 1:设置捕获区域
通过在目标车辆所在的区域设置笔记本电脑和初始硬件来开始该过程。
在整个捕获过程中,车辆应该能够稍微向前或向后移动几英尺。
将初始硬件设置放置在距车辆侧面约 3 英尺的位置,以匹配设备在其最终设置中的部署方式。通过 USB 电缆将设备中的 Cam H7 连接到笔记本电脑。
步骤 2:初始化新数据集
在笔记本电脑上打开 OpenMV IDE。从“工具”菜单中,单击“数据集编辑器”,然后单击“新建数据集”。
出现提示时,创建一个名为的新文件夹tire-dataset并选择它。该文件夹将包含所有数据集图像和相关文件。该文件夹在 IDE 的数据集编辑器面板中打开。
第 3 步:编辑捕获脚本
一个dataset_capture_script.pyPython的文件数据集文件夹中自动创建和IDE编辑器窗口中打开。此脚本用于在捕获图像之前初始化 Cam H7 的相机设置。
为此数据集收集的图像应以正方形尺寸 (240x240 像素) 和灰度颜色捕获。这两项设置都将确保图像与模型预期的输入格式相匹配。
通过将sensor.RGB565值更新为sensor.GRAYSCALE并添加定义图像大小的行来编辑脚本中的相机配置代码块sensor.set_windowing((240, 240))。
更新后的代码块应如下所示:
通过 USB 线将 Cam H7 连接到笔记本电脑,单击 IDE 左下角的“连接”按钮。
单击左下角的“开始”按钮开始执行data_capture_script.py脚本。运行后,可以在 IDE 的“帧缓冲”面板中查看摄像机所见的实时预览窗口,并应用配置设置。
第 4 步:捕获图像
从车辆停放和轮胎完全充气 (~45 PSI) 开始。使用 IDE 中的实时预览窗口定位设备,使相机以单个轮胎为中心,如上面的“完整”类所定义。
在 IDE 的数据集编辑器面板中,单击“新建类文件夹”按钮,并在出现提示时输入类名“完整”。这会full.class在文件夹中创建一个新的子tire-dataset文件夹来存储此类的图像。
单击“数据集编辑器”菜单中的full.class文件夹以突出显示它。为数据集捕获的任何新图像都放置在当前突出显示的任何类子文件夹中。
相机就位后,单击“捕获数据”按钮开始收集“完整”类图像。每次单击都会捕获并保存 JPEG 图像。在每次点击之间,稍微改变相机的位置和角度,以在连续图像之间产生微小的差异。
通过定期向前或向后移动车辆几英尺、重新定位相机并继续收集过程,收集不同轮胎旋转时的“完整”图像。不同的旋转确保模型不会学习特定的轮毂盖旋转角度作为类特征的一部分。
重复此过程,直到收集到一整套“完整”图像。该项目中使用的图像总数为每班 300 张。
接下来,让车辆轮胎中的空气排出,直到它们被认为是扁平的 (~10 PSI)。创建一个新的“平面”类并在“数据集编辑器”菜单中突出显示flat.class子文件夹。
重复收集过程,这次使用满足“平面”类定义的图像。在此过程中改变距离、角度和轮胎旋转,并继续直到收集到整套 300 张“平坦”图像。
最后,创建一个新的“no-tire”类并使用与上述类似的过程将图像添加到no-tire.class文件夹中。这些图像应符合“无轮胎”类定义,包括无轮胎物体、汽车侧面和部分轮胎的图像。继续直到收集到整套 300 个“无轮胎”图像。
完成后,tire-dataset文件夹应包括full.class、flat.class和no-tire.class子文件夹,每个文件夹包含 300 个示例图像,总共 900 个图像。一个labels.txt文件也被生成,其中包括三个类名。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !