您正在玩叠叠乐积木 (Jenga)。一种方块游戏。
您已有了自己的相机,自己的叠叠乐积木塔,和一个梦想:打造能精准识别被抽走积木的终端设备/应用,同时判断塔身是否稳固。无需云端支持。杜绝延迟。只是在端侧进行实时方块检测。听起来很酷吧?让我们开始吧。
在本指南中,我将带您了解您所需要的一切内容 – 从收集图像,利用Edge Impulse的FOMO训练模型,到将该模型转换为C++ TFLite程序库并在Android系统上实时运行。
概况
步骤 | 工具/技术 |
数据收集 | Edge Impulse Studio(网络或手机) |
模型 | FOMO(快速对象检测) |
输出格式 | TensorFlow Lite(C++程序库) |
部署 | Android(通过Android Studio) |
推理 | 本地,实时 |
数据收集 | 模型训练 | 下载模型 | 设置Andriod Studio环境 | 部署Android应用程序包 | 测试 |
附图1:项目工作流展示
步骤1:在Edge Impulse中设置您的项目
前往edgeimpulse.com 并创建一个新项目。将该项目命名为:
Jenga_Ondevice
选择“对象检测 (Object Detection)”作为项目类型。这样可以配置您的项目,以便使用边界框和基于图像的训练工作流。
附图2:创建一个新项目并开始数据收集
步骤2:收集不同的标记数据
您所需要的工具:
- 摄像头(手机、网络摄像头或嵌入式设备)
- 一个实体叠叠乐积木塔(或类似积木)
- Edge Impulse移动应用程序或网络上传器
收集数据:
使用Edge Impulse的数据采集 (Data Acquisition) 选项卡或移动应用程序:
- 在不同的照明条件下采集图像(自然光,室内照明,阴影)
收集新数据 | ||
直接从您的手机、电脑、设备、或开发板收集数据。 | ||
扫描二维码,连接至您的手机 | 连接至您的电脑 | 将您的设备连接至开发板 |
附图3:有关如何添加/收集数据的资源
- 不同的距离:特写和远镜头
- 不同的角度:侧视图,自上而下,对角线
- 包括3种关键状态:
- 稳定:方块就位
- 移除:方块明显被抽出
- 空:空间中没有方块
提示:开始时每个类别至少捕捉100个图像。
步骤3:用边界框标注
使用Edge Impulse中的标注工具:
- 在可见叠叠乐积木周围绘制紧密的边界框
- 根据积木的状态为其标注:“稳定”,“移除”,“空”
标签一致性至关重要。边界框质量直接影响检测精度。如果可能的话,请放大图像并精确标注小型积木。
附图4:标注数据
步骤4:利用FOMO设计Impulse
这就是Edge Impulse管道发挥作用的情况。
添加处理方块:
- 图像大小调整:例如96x96或160x160
- 颜色深度:红绿蓝(用于视觉图案)
添加学习方块:
- 选择FOMO(对象检测)
FOMO使用单镜头检测(SSD)风格的头部,具有跨步卷积,这意味着它可以在一次传递中输出类别概率和位置的网格。该算法效率极高,特别适合低功耗设备。
训练模型:
- 设置培训参数:
- 轮次:50-100
- 学习率:0.001(从此处开始)
- 验证分割:20-30%
- 使用数据增强:翻转,旋转,亮度变化
监控:
- 损失曲线
- map(平均精度均值)
- 混淆矩阵
您的对象是各个类别的平衡精度。
步骤5:导出为TensorFlow Lite C++数据库
一旦对性能满意:
1. 转到部署 (Deployment) 选项卡
2. 选择TensorFlow Lite(C++)
3. 单击Build并下载存档文件
在zip内包括:
- .tflite模型文件
- C++头文件 + 和源包装器
- 构建脚本与嵌入式或Android系统集成
步骤6:将模型与项目集成
- 提取已下载的C++程序库。
- 仅将以下提取文件复制至example-android-inferencing/example_static_buffer/app/src/main/cpp directory,不要复制CMake.txt文件。
edge-impulse-sdk/
model-parameters/
tflite-model/
复制基础代码库
我们创建了一个示例代码库,其中包含一个支持C++的Android Studio项目。复制或下载此代码库:
git clone https://github.com/edgeimpulse/example-android-inferencing.git
cd example-android-inferencing
运行Windows / Linux / OSX脚本,以获取资源
cd example-android-inferencing/example_static_buffer/app/src/main/cpp/tflite
sh download_tflite_libs.bat # download_tflite_libs.sh for OSX and Linux
将项目导入Android Studio
选择导入项目
1. 打开Android Studio。
2. 选择打开一个现有的Android Studio项目。
3. 进入克隆的代码库目录并选中该项目。
从Edge Impulse下载CPP项目
1. 进入Edge Impulse Studio。
2. 将训练好的模型导出为C++程序库。
3. 下载导出的模型。
将模型与项目集成
1. 提取下载的C++程序库。
2. 将提取的文件复制到example-android- inference /example_static_buffer/app/src/main/cpp目录下,不要复制CMake.txt文件。
粘贴到CPP测试所用的测试特征集中
1. 从Edge Impulse Studio 测试impulse选项卡中获取测试特征集。
2. 将测试特征集粘贴到cpp目录中native_lib.cpp文件中 的raw_features数组中。
std::vector<float> raw_features = {
// Copy raw features here (e.g. from the 'Model testing' page)
};
构建并运行项目
1. 在Android Studio中,点击构建 > 制作项目。
2. 构建成功后,在Android设备或模拟器上运行该项目。
步骤7:测试、迭代、改进
你会很快发现挑战:
- 在光线不足的情况下误报
- 双手遮挡视线时的遮挡
- 混淆“移除”和“空”
修复:
- 为边缘用例添加更多训练数据
- 根据加权类别损失进行重新训练
- 微调模型超参数
最后的想法 – 构建有弹性的产品
您目前从事的工作是构建一条完整的管道
图像采集 → 标注→ 训练 → 导出 → 本地推理
利用Edge Impulse + FOMO + TFLite使整个流程快速可控。一旦完成初始训练和设置,您就能专注于优化改进,让检测系统在实际应用中更加稳定可靠。
现在,去创造一些很棒的东西吧。也许可以装个智能相机,在积木塔不稳定时发出警告。或是一个能自动上报被抽积木的智能记分板。创新的可能性正如堆积木般永无止境。
您已经创建了一个实时本地的系统,能够理解叠叠乐积木塔的状态 – 一块接一块。
该工作流可适用于:
- 桌面游戏自动化
- 仓库物品跟踪
- 嵌入式目视检查
是否已按指南完成测试并愿意分享成果?请加入本公司的开发者Discord社区,并与我们分享您的项目,以获得重点演示的机会!
额外资源
在所发布内容中表达的观点仅为原作者的个人观点,并不代表高通技术公司或其子公司(以下简称为“高通技术公司”)的观点。所提供的内容仅供参考之用,而并不意味着高通技术公司或任何其他方的赞同或表述。本网站同样可以提供非高通技术公司网站和资源的链接或参考。高通技术公司对于可能通过本网站引用、访问、或链接的任何非高通技术公司网站或第三方资源并没有做出任何类型的任何声明、保证、或其他承诺。
关于作者
阿克沙亚·哈桑·纳根德拉,软件应用工程师,高通开发人员计划技术宣传人
