基于EdgeImpulse和Arduino的物体检测与分类应用
立即解锁
发布时间: 2025-08-31 00:22:47 阅读量: 9 订阅数: 15 AIGC 

### 基于Edge Impulse和Arduino的物体检测与分类应用
#### 1. SparkFun Artemis Nano的应用测试
同样的代码可在所有至少有256 KB RAM的Arduino兼容平台上运行。可以考虑在SparkFun Artemis Nano微控制器上测试应用程序。不过,在编写本文时,为SparkFun Artemis Nano编译项目存在一个已知问题。该问题是由于函数名冲突导致的,会抛出以下错误消息:`error: macro "F" passed 2 arguments, but takes just 1`。
这个问题的讨论以及简单的解决方法可在Edge Impulse论坛找到,链接为:[https://forum.edgeimpulse.com/t/macro-f-passed-2-arguments-but-takes-just-1/3026](https://forum.edgeimpulse.com/t/macro-f-passed-2-arguments-but-takes-just-1/3026)。通过将Arduino Edge Impulse库中`src/edge-impulse-sdk/tensorflow/lite/kernels/internal/reference/comparisons.h`里的模板参数`T`更改为不同的名称(例如,`TFLiteFunc`),可以轻松解决这个函数名冲突问题。具体操作步骤如下:
1. 解压从Edge Impulse下载的Arduino Edge Impulse库。
2. 用文本编辑器打开`src/edge-impulse-sdk/tensorflow/lite/kernels/internal/reference/comparisons.h`文件。
3. 在`comparisons.h`文件中,将`F>`替换为`TFLiteFunc>`。
4. 在`comparisons.h`文件中,将`F(`替换为`TFLiteFunc(`。
5. 使用压缩工具再次压缩Arduino Edge Impulse库,并将压缩文件导入到Arduino IDE中。
在SparkFun Artemis Nano上运行代码时,由于该设备上模型的推理时间更好,你可能会在相机预览中观察到稍微更流畅的视频流。这是因为SparkFun Artemis Nano的Arm Cortex - M4 CPU比树莓派Pico的Arm Cortex - M0 + CPU具有更强的计算能力。
#### 2. 基于Edge Impulse和FOMO的树莓派Pico物体检测
可以借助Edge Impulse,使用预训练的FOMO模型为微控制器构建物体检测应用程序。具体步骤如下:
- **数据集准备**:通过网络摄像头获取相机帧来准备数据集。
- **模型设计**:
- 选择适合基于FOMO架构的物体检测模型的图像分辨率和颜色格式。
- 探索FOMO架构,了解其为何适用于内存受限的设备。
- **模型训练与测试**:训练模型,并在测试数据集和通过网络摄像头获取的实时图像上测试其准确性。
- **模型部署**:实现一个Python脚本以模拟微控制器相机模块,并使用Edge Impulse Inferencing SDK将物体检测模型部署到树莓派Pico上。
#### 3. 使用TensorFlow和Arduino Nano对桌面物体进行分类
卷积神经网络(CNNs)在解决图像分类、物体识别、场景理解和姿态估计等具有挑战性的计算机视觉任务方面表现出色,如今许多现代相机应用都由这些深度学习算法驱动。并且,这些算法现在也能在计算能力有限的微控制器中加速运行。下面将介绍如何结合OV7670相机模块和Arduino Nano对两种桌面物体(杯子和书)进行分类。
##### 3.1 技术要求
要完成相关实践,需要以下设备和工具:
| 名称 | 数量 |
| ---- | ---- |
| Arduino Nano 33 BLE Sense | 1个 |
| 微型USB数据线 | 1条 |
| 半尺寸无焊面包板 | 1个 |
| OV7670相机模块 | 1个 |
| 按钮 | 1个 |
| 公对母跳线 | 18根 |
| 装有Linux、macOS或Windows的笔记本电脑/台式机 | 1台 |
| Google Drive账户 | 1个 |
##### 3.2 使用OV7670相机模块拍照
- **选择OV7670相机模块的原因**:
- **低分辨率支持**:微控制器内存有限,OV7670能输出QVGA(320x240)和QQVGA(160x120)的低分辨率图像。
- **颜色格式支持**:支持多种颜色格式,如RGB565和YUV422,不同颜色格式对图像内存占用和质量有影响。
- **软件库支持**:为Arduino Na
0
0
复制全文
相关推荐










