利用 XIAO ESP32S3 感应模块和 ESP32C3 构建一个实时的人工智能系统,该系统能够检测到人并将其呈现为动态的粒子能量场
扫描二维码
随时随地手机看文章
在大多数计算机视觉系统中,人类仅仅是一个被检测到的物体——一个边界框、一组坐标、一段数据流。系统知道“你在这里”,但它从未真正“看见”过你。
我开始觉得这种表达方式太过冷淡了。
如果我们换个角度思考呢?与其将一个人视为需要被框定和贴标签的对象,不如将他们视为影响周围环境的“场”呢?
存在会引发波澜。行动会改变格局。
而当多人出现时,他们之间的关系也开始逐渐显现出来。
于是,我开始对视觉识别的输出结果进行拆解和重组——不再显示检测框,而是将数量、位置和比例转换成另一种形式:即“粒子”。
数据不再仅仅是数据那么简单——它开始显得有生命了。
当第二个人进入画面时,这些基于粒子的图像之间便开始形成联系、产生干扰和产生流动。此时,该系统不再仅仅识别人物——而是开始表达更为抽象的内容:
人类与太空的关系人与人之间那些无形却又始终存在的影响。
我将这个项目命名为“人类能量场”。
这既是一个实时的人工智能视觉系统,也是一种对表达方式的探索——试图探究:当人类从物体转变为能量时,这个世界是否会呈现出不同的面貌。
系统架构
该系统可以分为三个层次:
1. 视觉识别层
XIAO ESP32S3 感知模块负责从摄像头获取图像,并执行基于人工智能的人体检测。它以边界框的形式呈现人数、人体大小以及位置信息。因此,在这个系统中,XIAO ESP32S3 感知模块充当了人工智能视觉识别的“黑匣子”,其功能更像是“传感器”而非“大脑”。
2. 数据传输层
检测数据通过 UART 传输至 XIAO ESP32-C3。
重要提示(宝贵的经验教训):您无法通过 Processing 直接从 S3 Sense 读取数据。
这是因为:
这里有一个需要特别注意的重要事项(这也是我犯错的地方——我起初以为可以直接使用 Processing 来读取和解析来自 S3 Sense 的数据,结果却发现这是不可能的,还浪费了我大量时间。如果你比我聪明,可以跳过这部分):由于 XIAO ESP32S3 Sense 运行的是预装的 AI 固件,所以它无法同时执行自定义的 Arduino 逻辑。
因此,必须引入一个 ESP32C3 作为中间层,用于解析和重组识别结果,然后将其传输给 Processing,从而形成从数据采集到视觉表达的完整流程。
3. 粒子生成层
在接收到数据后,Processing 会根据每个人的中心点、宽度、高度、人数以及相对位置等信息,生成基于粒子的实时人体轮廓,并为每个人赋予不同的颜色和动态行为。
当只有一个人在场时,系统会生成一个完整的人形粒子场;而当有多人出现时,他们的粒子系统会共存,并根据彼此的空间关系产生更复杂的交互效果。(您也可以在 Processing 中自行设计更有趣的视觉效果。)
详细的构建流程
步骤 1:完成人工智能识别与人员检测
首先,我们需要将 AI 视觉模型部署到 XIAO ESP32S3 感知板上,以便它能够可靠地在摄像头前检测出人体目标,并持续输出检测结果。打开 SenseCraft AI 平台,选择“人员检测”模型,并确保选择适用于 XIAO ESP32S3 感知板的特定版本。
部署成功后,您将看到持续输出的数据。请仔细留意数据格式,并思考每个数值所代表的意义。如果之后您打算自定义粒子效果,那么这一步骤就尤为重要。
第 2 步:软件环境设置
如果您是首次使用 Arduino IDE,建议您先参考相关教程来完成环境的安装与配置,并下载所需的库文件。
第 3 步:硬件连接
准备两根 USB 数据线,并将 XIAO ESP32S3 感应模块和 XIAO ESP32C3 连接到您的电脑上。
使用三根女性对女性的跳线将 XIAO ESP32S3 感应模块与 XIAO ESP32C3 连接起来。这里我们采用 UART 通信方式。接线方法如下所示:
第 4 步:格式检测数据
为了使数据处理更加简便,可使用 Arduino IDE 将代码上传至 XIAO ESP32C3。
选择正确的主板和串行端口
上传以下代码:
如果一切运行正常,您将在“串行监视器”中看到实时的串行数据:
第 5 步:在处理过程中解析检测结果
在使用 Processing 接收数据之前,请务必完全关闭 Arduino IDE,以确保串行端口不被占用。Processing 会从 C3 接收串行数据,并将其转换为适合粒子系统的结构化信息。这里的关键点包括:
处理单个和多个目标,将坐标映射到屏幕空间(如果动画窗口显示不完整,这一步很可能是问题所在),根据边界框的尺寸调整粒子大小,为不同的个体分配不同的颜色,保持帧率和实时性能,以及优化内存使用以防止崩溃。
将以下代码上传至 Processing 软件中:
值得注意的是,Processing 没有提供用于选择串行端口的下拉菜单。您需要在代码中手动指定端口。首次运行程序时,将索引设置为 0。可用的端口将在控制台中显示。如果有多个端口,您需要手动选择正确的那个。
例如,如果控制台显示:
并且如果您的 ESP32C3 设备连接到 COM7 端口,那么您需要在代码中将索引设置为 1 。
完成上述所有步骤后,您将在“Processing”窗口中看到实时的粒子可视化效果。每个被检测到的人都是以基于粒子的形式呈现的人体形象,每个形象都有独特的颜色。当检测到多人时,就会出现动态的互动效果——比如流动的能量或电的连接——它们会在这些人之间出现。这就是我所理解的人与人之间自然的联系和互动。
结论
参与这个项目让我重新思考了一些问题:在这样一个科技日益强大的世界里,我们是否还能以一种更柔和、更直观、更人性化的方式来表达事物呢?我希望通过这个项目,你们能和我一起感受到这个想法——我们不仅在不断适应环境,而且环境也在悄然地适应我们。这其中有一种无声的温暖与关怀。人类、空间和关系一直相互关联着。你们永远不会真正孤单。
本文编译自hackster.io





