RPi 简易物体检测 - La Croix 风味检测器





准备工作:
材料:
- Raspberry Pi(在 RPi3 Model B 和 RPi4 Model B 上测试)
- microSD 卡(最低 8 GB,建议 16 GB)
- HDMI 显示器
- 鼠标/键盘
- Raspberry Pi 相机模块或 USB 网络摄像头
工具:
使用 Teachable Machine 生成模型







1.视频链接:https://www.youtube.com/embed/7Axg5mJ83ac?feature=oembed&autoplay=1
设置项目
Teachable Machine 是一款相当易于使用的工具,具有非常直观的界面。对于这个项目,我们将进行图像检测。转到https://teachablemachine.withgoogle.com/并单击“开始”。现在选择“图像项目”。这将打开图像模型训练窗口。
创建数据集
您将添加并命名要训练模型检测的类别(即对象)。使用直观的名称为类别命名。类别的名称是当该对象出现在框架中时,后续程序将调用的内容。
创建一个“背景”类是个好主意。这可以帮助训练模型不将背景细节归因于其他类之一。如果你将这个类命名为“背景”,那么最终的程序(使用文本转语音来说出框架中对象的名称)将忽略背景类,并且不会在框架中只有背景时每次都喊出“背景”。
要将图像样本添加到类别中,您可以使用网络摄像头在 Teachable Machine 中捕获图像,也可以从其他来源上传图像。为了生成模型,您需要大量高质量数据。您可以在我的“La Croix 风味检测器模型”示例中看到,每个类别都有不少于 600 个样本。我使用网络摄像头快速捕获许多不同的样本。我确保在各种光照条件下从各个角度捕获物体,并采用各种背景来生成准确的模型。
训练模型
设置好所有类别并对数据集感到满意后,就可以开始训练模型了!单击“训练模型”按钮。为了训练模型,您必须在浏览器中保持选项卡打开。训练模型可能需要一段时间。在这个项目中,我有 7 个类别,样本数超过 600 个,训练大约需要 20 分钟。您的浏览器可能偶尔会抱怨 Teachable Machine 选项卡正在减慢您的浏览器速度。只需确认通知并说没问题,这样您的浏览器就不会取消训练(不同的浏览器对此通知的措辞不同)。完成后,就可以测试您的模型了!
预览模型
现在是时候测试您训练好的模型并查看它的表现了!转到预览窗格并打开输入。向网络摄像头展示各种物体,看看模型是否准确猜测出画面中的物体。请记住,除非您为两个物体的情况创建单个类,否则模型无法检测到多个物体。如果表现不佳,请尝试向模型提供更多照片。如果您满意,是时候导出模型了!
导出模型
要导出模型,请单击“导出模型”按钮。将弹出一个新窗口。单击“Tensorflow”选项卡并选择“Keras”模型转换类型。现在单击“下载我的模型”。压缩模型并准备下载大约需要一分钟左右的时间。您应该会看到一个弹出窗口,要求您保存一个 zip 文件。保存文件并解压缩。您应该会看到一个“keras_model.h5”文件和一个“labels.txt”文件。保留这些文件,一旦您在计算机上设置好 Python 环境,我们就会使用它们!
设置Raspberry Pi





如果您尚未在 Raspberry Pi 上设置操作系统,您需要从 Raspberry Pi 基金会的网站 ( https://www.raspberrypi.org/downloads/raspbian/ ) 下载“带有桌面和推荐软件的 Raspbian Buster”。任何较新版本的 Raspbian Buster 都应该可以正常工作。这将安装带有 Python 3 以及一些编程 IDE 的完整版本。提取 .img 文件并使用 SD 卡映像程序(如 Rufus、balenaEtcher、Win32DiskImager 或其他程序)将映像写入您的 microSD。Raspberry Pi 基金会在此处编写了一份有关如何在 Raspberry Pi 上安装操作系统映像的详尽指南。
完成 SD 卡映像后,将其插入 Raspberry Pi 并打开电源。它应该会自动进行一些初始设置(调整屏幕大小、扩展文件系统等)。桌面加载后,会弹出一个窗口,提示您按照一些设置步骤进行操作。您需要设置您的语言环境、wifi,确认桌面周围是否显示黑色边框,允许 Raspberry Pi 更新(这可能需要一段时间),然后重新启动。
成功更新并重启 Raspberry Pi 后,桌面应该会自动加载,无需提示。单击右上角的 Raspberry Pi 图标以显示下拉菜单。转到“首选项->Raspberry Pi 配置”。Raspberry Pi 配置窗口将显示。导航到“接口”选项卡并启用摄像头。将出现提示,提示您重启 Raspberry Pi。单击“是”并让 Raspberry Pi 重启。
Raspberry Pi 启动后,打开终端测试相机。确保正确连接相机的带状电缆,然后输入以下命令:
这将在终端中显示有关相机的信息并拍摄照片。它将照片保存为 test.jpg 并将其存储在您运行命令的目录中。在文件浏览器中导航到该目录并打开文件以确保相机正常工作并拍摄了照片。以下链接提供了有关使用 Raspberry Pi 相机的更多信息。
https://www.raspberrypi.org/documentation/configur...
https://www.raspberrypi.org/documentation/raspbian...
如果您使用的是 USB 网络摄像头,您可以按照以下详细步骤操作。
设置Raspberry Pi环境




Python 3 安装和设置
如前所述,您加载的 Raspbian 映像上应该安装了 Python 3。要确认,请键入“python3 --version”。这将返回版本号。我已经在 Python 3.6 和 Python 3.7 中测试了这个开发环境,一切似乎都正常工作。但是,Python 3.8 似乎尚未完全支持其中一些库。只需确保您拥有其中一个版本即可。如果您没有安装任何版本,可以使用以下命令安装它:
Git 项目文件
现在,您需要从我的 Github 存储库中检索安装文件、机器学习模型和演示 Python 程序。如前所述,git 应该已经随您的 Raspbian 映像一起安装。要确认,请在您的终端中运行“git --version”并确保它返回一个版本。要安装,您可以输入以下命令。
要下载所需的文件,您可以在浏览器中导航到存储库并下载 zip 文件,也可以使用 git 客户端。链接和 git 命令如下所述。
https://github.com/mjdargen/RPi-La-Croix-Flavor-Detector
设置 Python 环境:OpenCV 和 TensorFl

我编写了一个安装脚本来简化此开发环境的安装过程。我花了很长时间才弄清楚所有特定的依赖项,以使这些软件包在 Raspberry Pi 上运行。每个不同的软件包都需要一些非常特定的版本。您可以随意研究安装脚本,甚至可以在终端中逐个运行命令以了解设置过程。成功运行后,您现在应该可以使用 OpenCV 和 Tensorflow 来进行任何机器学习项目!
Raspberry Pi 安装
- 假设您已经安装了 Python 3。
- 假设您的 Python 3 可执行文件使用“python3”调用。如果不是这种情况,您将需要编辑 shell 脚本并将“python3”命令的每个实例替换为“python”。
- 导航到终端中的存储库文件夹。
- 您需要通过运行以下命令使脚本可执行:“sudo chmod +x ./rpi_install.sh”
- 使用命令“./rpi_install.sh”运行 shell 脚本。
- 根据您的系统和互联网连接,可能需要约 1.5 小时或更长时间。
使用 Python 虚拟环境
如果安装脚本成功执行,则您现在已经安装了在机器上的 Python 虚拟环境中运行 OpenCV 和 Tensorflow 所需的所有依赖项。虚拟环境称为 TMenv,位于名为“Teachable-Machine-Object-Detection”的克隆存储库的顶级目录中。
Python 包安装在虚拟环境中,这样如果您有其他程序依赖于某个包的特定版本,就不会破坏与您主 Python 安装相关的包。
要使用您安装的软件包来运行演示,您需要激活您的虚拟环境。
激活环境后,它会在终端提示符前用括号显示虚拟环境的名称。此时,您执行的任何与 Python 相关的事情都只会影响您的 TMenv 虚拟环境。您现在可以在虚拟环境中运行 Python 脚本。要退出虚拟环境,只需运行以下命令
设置源代码-运行!

现在我们已经设置了 OpenCV/Tensorflow 开发环境,并对其进行了测试以确保其正常运行,现在是时候继续运行 Teachable Machine 模型了。您可以使用我提供的示例模型,也可以使用您创建并导出的模型。
按照第一步所述成功导出模型后,您需要解压模型以提取 .h5 文件和 labels.txt。您需要更新“model_path”和“labels_path”变量以指向 tm_obj_det.py 中的这些文件。您需要确定网络摄像头视频源的宽度和高度(以像素为单位),并更新“frameWidth”和“frameHeight”变量。根据您的设置,您可能还需要镜像网络摄像头的视频源。为此,请取消注释“frame = cv2.flip(frame, 1)”行。
接下来,您需要设置置信度阈值 (conf_threshold)。此变量是您希望模型在标记图像并说出预测之前有多确定的百分比值。默认情况下,置信度阈值为 90%。
最后,如果您在视频显示方面遇到任何问题,您可以使用 matplotlib 实现。您需要注释掉“cv2.imshow”和“cv2.waitKey”行。然后您需要取消注释“import matplotlib”以及末尾的 plt 代码行。
就这样,你的代码就可以运行了!
2.视频链接:https://www.youtube.com/embed/ECFZkKfeL2A?feature=oembed&autoplay=1
重新混音!

这些安装在虚拟环境中的软件包和我提供的脚本有望为您提供一个有用的框架来开发许多令人兴奋的东西。现在,您可以轻松地将对象检测纳入所有项目中!Raspberry Pi 为此提供了一个完美的环境,因为它可以轻松与不同的传感器、电机和其他外围设备交互。我希望继续在这个领域做更多的项目,以制作一些使用图像检测并利用这个框架的更有趣的项目。
以下是一些项目构想。您可以随意采用这些构想,或者提出自己的构想!
- 一个程序,用于识别您的朋友并在他们来您家时称呼他们的名字并问候他们。
- 该程序可以检测您何时离开家,并要求您出示手机、钥匙、钱包等,以确保您离开家时带齐了所有物品。
- 构建一个分类器,使用马达根据物体的类型将物体转向特定的方向。
- 该程序可以检测手语中的字母并将其写入文本文件。











