三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

基于MRS2的嵌入式AI产品开发实践——水果识别与营养分析案例

基于MRS2的嵌入式AI产品开发实践——水果识别与营养分析案例

一、项目介绍

MounRiver Studio 2(MRS2)内置 TFLite Micro 边缘 AI 推理框架,支持TFLite 模型一键导入、可视化模型结构解析、模型文件转嵌入式源码、算子自动匹配与初始化,并可实现嵌入式 AI 工程一键搭建及模型数据自动挂载。同时,MRS2 配套专用优化算子库,支持AI模型在MCU平台上的开发与部署,实现从模型分析、工程搭建、编译、调试到下载运行的全流程开发。

本案例主要包含以下开发流程:

  • AI 图像分类模型训练;
  • TFLite 模型生成与量化;
  • MRS2 AI 工程创建;
  • 模型导入与 TFLite Micro 部署;
  • MCU 端 AI 推理调用;
  • 云端大模型接口连接;
  • 识别结果与营养信息显示。

最终实现效果:

  • MCU 本地完成水果图像识别;
  • 云端大模型提供水果营养数据分析;
  • 设备端实时显示识别结果和营养信息。

二、准备水果识别模型

在进行MCU部署前,需要准备适用于嵌入式运行的水果识别模型。本项目基于 TensorFlow/Keras 完成模型训练与量化。

针对 MCU 资源有限的特点,模型采用轻量化网络结构,并加入非水果拒识功能。实际应用中,当摄像头采集到桌面、手掌等非水果目标时,模型可以避免强制分类,提高识别可靠性。

最终模型设计为“水果分类 + 非水果检测”的双输出结构,并转换为 INT8 量化 TFLite 模型,通过MRS2部署到 CH32V407 MCU 平台运行。

2.1 数据准备与训练

数据集包含苹果、香蕉、菠萝三类水果的 64×64 的 RGB888 图像,每类共 700 张,其中 560 张用于模型训练,140 张用于模型验证。非水果图像涵盖室内桌面、墙壁、手掌、键盘等常见背景场景,共计为700张,按 8:1:1 比例划分为训练集、验证集和测试集。

2.2 输入处理与数据增强

训练过程中采用随机翻转、缩放、对比度调整等数据增强方式扩充样本分布,提高模型对不同拍摄角度、光照条件以及背景变化的适应能力。

考虑到实际嵌入式设备通常使用低成本摄像头采集图像,而MCU摄像头常输出RGB565格式数据,为减少训练数据与端侧输入之间的分布差异,训练阶段以 95% 概率对输入图像进行RGB565量化模拟,将RGB888图像压缩至RGB565色彩精度后再还原,使模型提前适应实际运行环境,提高部署后的识别稳定性

class RandomRgb565(layers.Layer): def __init__(self, prob=0.95, **kwargs): super().__init__(**kwargs) self.prob = prob def call(self, x, training=None): if training is False: return x return tf.cond( tf.random.uniform([]) < self.prob, lambda: simulate_rgb565_tensor(x), lambda: x ) class LightColorJitter(layers.Layer): def __init__(self, brightness=0.07, saturation=0.10, **kwargs): super().__init__(**kwargs) self.brightness = brightness self.saturation = saturation def call(self, x, training=None): if training is False: return x x = tf.clip_by_value(x, 0.0, 255.0) / 255.0 x = tf.image.random_brightness(x, max_delta=self.brightness) x = tf.image.random_saturation( x, lower=1.0 - self.saturation, upper=1.0 + self.saturation ) x = tf.clip_by_value(x, 0.0, 1.0) return x * 255.0

2.3 模型结构设计

本项目采用轻量化卷积神经网络结构,以满足 MCU 平台运行需求。模型输入为 64×64×3 RGB 图像,通过 Conv2D 卷积层和深度可分离卷积模块提取水果特征,在降低参数量和计算量的同时提升嵌入式运行效率。

模型采用双输出结构,其中水果检测分支通过Sigmoid判断当前目标是否为水果,实现非水果拒识;水果分类分支通过 Softmax 输出具体水果类别,如苹果、香蕉和菠萝。系统运行时先进行水果检测,再进行类别识别,从而降低背景物体误识别,提高实际应用稳定性。

2.4 模型量化与部署格式

完成训练后,将模型转换为INT8量化TFLite 模型。生成的TFLite模型可以直接导入MRS2,通过TFLite Micro 框架部署到MCU工程中运行。

三、MRS2 AI工程创建与模型部署

第一步:打开MRS2开发环境,创建对应MCU工程。

第二步:导入训练好的INT8的TFLite 模型。

导入过程中,MRS2 会自动完成:模型文件解析、模型格式检测、输入输出节点识别、Tensor 信息读取、全整型模型判断以及算子库的导入。

同时,MRS2 内置 Netron 模型分析功能,可直接查看网络结构、节点连接关系以及 Tensor 参数信息,方便快速了解模型结构。

第三步:导入模型后,MRS2会新建一个包含此模型和推理框架的CH32V407应用工程,用户可以直接进行编译,无需进行多余的配置。其中Model_date文件夹为模型转换后的代码,TFLM文件夹为TFLite Micro推理框架代码。

当后续需要替换模型时,只需点击 "Export Model as Source File",将导出的模型源文件直接替换 model_data 文件夹即可。

第四步:TFLite Micro推理框架配置

在MCU运行TFLite Micro模型时,需要提前配置推理所需内存(内存大小需要根据实际模型推理情况进行调整)并注册模型运行所需算子。MRS2 导入模型后,会自动分析网络结构,识别模型中使用的算子,并完成对应初始化配置,用户可直接基于生成的运行环境进行应用代码开发。

四、MCU端AI识别与云端大模型营养分析

完成模型部署后,设备通过 OV5640 摄像头采集水果图像,并经过预处理后输入本地 AI 模型进行推理。模型同时输出水果检测结果和类别信息,通过置信度判断、类别过滤以及多帧投票机制,提高识别稳定性,降低误识别。

整体识别流程如下:

确认水果类别后,MCU 通过 MQTT 将结果发送至云端大模型服务,由大模型进一步解析水果营养信息,包括热量、维生素含量等数据,并返回设备端显示。

← 返回列表