使用TensorFlow和PyCharm为Reachy Mini构建实时物体检测应用
本文是 Iulia Feroli 的客座文章,她是 Back To Engineering YouTube 社区的创始人。
[LOADING...]
在本教程中,我们将使用 TensorFlow 和 PyCharm 构建一个实时目标检测应用,然后将其部署到 Reachy Mini 开源机器人上,实现实时目标跟踪。
Reachy Mini 是一款紧凑型开源机器人,由 Pollen Robotics、Hugging Face 和 Seeed Studio 合作打造。它最近在网上广为流传,甚至出现在 NVIDIA 的视频和他们一些会议的主题演讲中。它特别有趣的地方不仅在于所有代码都是开源的,就连机身也是开源的——这意味着你可以打印自己的零件,并开发自己的应用在上面运行。
有一个由社区项目构成的应用商店可供您探索和尝试,并且可以轻松地贡献内容。由于硬件本身配备了扬声器、麦克风、摄像头以及用于表达情绪的触角天线,因此任何涉及对话或摄像头功能的应用构建起来都特别有趣。
[LOADING...]
这充分体现了 Reachy Mini 所代表的全新机器人类型:它几乎像是 LLM 或 AI 代理的物理化身,而不是一个添加了 AI 功能的机器人。它没有可以移动的身体或抓取物体的手,因此其主要卖点实际上是它的“大脑”。这种设计选择决定了用它构建什么最有意思。
让我们学习如何构建一个 TensorFlow 目标检测应用,并将其部署在 Reachy Mini 上,这样就能实现实时目标跟踪。您可以前往 PyCharm 频道查看完整的代码解析,并在家中尝试。所有代码都在 Reachy-mini-object-detection GitHub 仓库中。
有关机器人的介绍,您可以先观看 Iulia 的视频:
您将学到什么
- 如何构建实时 TensorFlow 目标检测流水线。
- 如何使用 TensorFlow Hub 中的 SSD MobileNet V2。
- 如何创建 TensorFlow 目标检测示例(结合 OpenCV)。
- 如何在 PyCharm Notebook 中运行实时摄像头推理。
- 如何在 Reachy Mini 机器人上部署目标检测。
- 如何利用头部运动逻辑跟踪检测到的对象。
- 如何将带注释的检测结果流式传输到实时仪表盘。
我们要构建什么
该项目分为两个阶段。
阶段 1 是一个独立 Notebook,完全在您的笔记本电脑上运行,使用您的网络摄像头。无需机器人。在此阶段,我们确保检测流水线在接触硬件之前能正常工作。
阶段 2 是一个 Reachy Mini 应用,将相同的模型与机器人集成:头部移动以跟踪检测到的对象,发现新物体时天线会摆动,实时 Web 仪表盘 (地址 http://0.0.0.0:8042) 显示带注释的摄像头画面和检测结果。
您可以按照以下分步视频教程进行操作:
TensorFlow 目标检测工作原理:分步说明
- 从网络摄像头捕获一帧图像。
- 将帧转换为 TensorFlow 张量。
- 通过预训练模型运行推理。
- 获取边界框、标签和置信度分数。
- 过滤低置信度检测结果。
- 在帧上绘制注释结果。
- 实时显示处理后的图像。
前提条件
- Python 3.12 或更高版本。
- PyCharm 及其 Jupyter Notebook 集成。
- 阶段 2 需要 Reachy Mini(阶段 1 完全在笔记本电脑上运行)。
- 熟悉 TensorFlow 基础知识——如果您是新手,本系列的上一篇文章是一个不错的起点。
阶段 1:在 PyCharm 中构建 TensorFlow 目标检测流水线
在连接机器人之前,我们要确保 TensorFlow 部分能独立工作。我们将创建一个仅执行目标检测模型的 Notebook,并使其流畅运行。PyCharm 的原生 Notebook 集成非常适合:您可以检查流水线的每一步,并内联查看结果。
目标检测模型
我们使用 TensorFlow Hub 上的 SSD MobileNet V2,该模型在 Open Images V4 上训练。这个来自 Google 的流行模型提供了基于 SSD 的目标检测功能,并在大量开放图像上进行了训练。通过少量微调,您可以将其部署到自己的用例中,不过对于本教程,通用模型无需任何微调也能很好地工作。
它在 CPU 上运行速度约为 10 FPS,足够快,可满足机器人的实时响应需求。
安装依赖项
加载模型
模型大小约为 30MB,首次下载后会被本地缓存。由于它非常通用,可以在许多不同场景下工作,无需额外的训练数据,这使得入门变得更容易。
检测与绘制辅助函数
我们需要两个辅助函数:一个用于运行推理并返回检测结果列表,另一个用于在帧上绘制边界框。这些函数稍后也会在 Reachy 应用中使用。
detect_objects 函数使用模型的 detect_objects 入口点运行推理,并处理输出张量的批量维度展平。标签以字节形式从模型返回,因此我们在返回之前将其解码为字符串。
在单帧上测试
[LOADING...]
这个阶段你要检查模型是否正确检测,边界框是否绘制在正确位置。PyCharm Notebook 视图中的内联图像显示可以让你轻松地立即在单元格中看到结果。
使用 OpenCV 运行实时 TensorFlow 目标检测
单帧测试结果良好后,您可以连续运行:
至此,我们已经构建了一个仅用于目标检测的 Notebook,它可以与你手头任何类型的普通摄像头配合使用。现在,我们可以将其封装成一个应用,部署到 Reachy 上。
阶段 2:在 Reachy Mini 上部署 TensorFlow 目标检测应用
Reachy Mini 应用位于 reachy_mini_object_detector/ 文件夹中,它在检测逻辑的基础上扩展了头部跟踪、天线反应和 Web 仪表盘功能。我们遵循了这篇博文中列出的构建 Reachy 应用的指南。特别是,我们可以利用类似 Claude 的辅助 LLM 系统,向其提供预定义的 Agent Helper 文档。
项目结构
detector.py 封装了模型和 detect_objects 逻辑。main.py 从中导入,并添加了与机器人相关的所有内容。
安装应用
通过 Reachy Mini 仪表盘的 Apps 菜单,或手动添加:
头部跟踪的工作原理
该应用并行运行两个循环:一个推理线程,从机器人的摄像头获取帧并运行检测;一个主控制循环(约 50Hz)负责处理头部移动和天线控制。
头部跟踪功能将检测到的对象在帧中的位置映射到头部偏航和俯仰偏移量。摄像头的水平视野为 60 度,垂直视野为 45 度。当对象位于帧中心时,其 center_x 为 0.5,因此减去 0.5 并乘以视野即可得到跟踪所需的偏移角度:
头部不会瞬间移动到目标位置,而是使用平滑因子(TRACKING_ALPHA = 0.15)使运动看起来更自然:
当没有检测到对象时,头部会缓慢移回中心,而不是僵住不动。
天线摆动
天线只在首次检测到新对象类别时摆动,而不是每帧都摆动。应用会在 _seen_classes 中记录已经见过的类别,当出现新类别时,会设置一个 1.5 秒的摆动计时器。在此期间,控制循环会按如下方式驱动正弦天线运动:
这让交互感觉有目的性:Reachy 在看到新物体时才会做出反应,而不是在跟踪过程中一直摆动。
Web 仪表盘
该应用提供一个实时仪表盘(可通过 http://0.0.0.0:8042 访问),包含带注释的摄像头画面(MJPEG 流)、当前检测结果列表、FPS 计数器以及一个用于启用/禁用头部跟踪的开关。这在开发过程中非常有用,因为你可以实时看到机器人视角下的模型检测结果。
后续方向
这是一个很好的起点,你可以朝很多方向深入:
- 针对特定用例运行应用。 模型是通用的,但如果你希望 Reachy 识别特定物体,可以使用 TensorFlow 的 Object Detection API 在自己的数据集上进行微调。
- 添加更多应用。 用户在 Reachy Mini 商店中已经创建了许多应用,构建一个同时利用摄像头和对话能力的应用将带来许多可能性。
- 连接物理手臂。 我下一步特别想探索的是将 Reachy 连接到 SO-101 手臂,这样她不仅可以观察,还能在物理世界中伸手操作。
你可以在 Reachy-mini-object-detection 仓库 中找到所有代码。所有内容都是开源的,你可以自由地在上面构建、调整或部署自己的版本。
常见问题
什么是 TensorFlow 目标检测?
TensorFlow 目标检测是一种计算机视觉技术,使用机器学习模型在图像或视频流中识别和定位物体。
对于实时应用,最好的 TensorFlow 目标检测模型是什么?
SSD MobileNet V2 常用于实时 TensorFlow 目标检测,因为它能有效平衡推理速度和准确性。
TensorFlow 目标检测能在 CPU 上运行吗?
可以。像 SSD MobileNet V2 这样的模型可以完全在 CPU 上运行,因此适用于笔记本电脑、边缘设备和机器人项目。
TensorFlow Object Detection API 和 TensorFlow Hub 有什么区别?
TensorFlow Hub 提供预训练的可复用模型,而 TensorFlow Object Detection API 则提供了更大的框架,用于训练、评估和部署工作流。
我可以在自定义数据上训练 TensorFlow 目标检测吗?
可以。你可以使用自己的标注数据集对预训练模型进行微调,以检测自定义物体。
关于作者
[LOADING...]
Iulia Feroli
Iulia Feroli 是 Back To Engineering YouTube 社区 的创始人,她在那里制作机器人、探索物理 AI,并将复杂的工程主题变得通俗易懂、充满乐趣。她拥有数据科学、AI、云架构和开源领域的背景。