回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

【二哈识图2 】基于自训练模型的智能垃圾分类系统 简单

头像 rzegkly 2025.11.29 25 1

一、背景介绍

每天每个人都会扔出许多垃圾,

大部分垃圾会得到卫生填埋、焚烧、堆肥等无害化处理,

大多数人对垃圾分类重视度不高

很多垃圾则常常被简易堆放或填埋,

导致臭气蔓延,并且污染土壤和地下水体。

今天,分享一篇【二哈识图2 】基于自训练模型的垃圾分类

通过垃圾分类大模型,自动识别垃圾,

在源头将垃圾分类投放,

并通过分类的清运和回收使之重新变成资源!

image.png

二、工作原理

1.上电后,k10屏幕显示“自训练模型垃圾分类”,正在识别垃圾中

2.当放入红枣,二哈识图2调用垃圾分类模型,识别厨余垃圾,k10播放对应音频、图片和文字信息

3.当放入电池,二哈识图2调用垃圾分类模型,识别有害垃圾,k10播放对应音频、图片和文字信息

4.当放入火机,二哈识图2调用垃圾分类模型,识别其他垃圾,k10播放对应音频、图片和文字信息

5.当放入飞机,二哈识图2调用垃圾分类模型,识别可回收垃圾,k10播放对应音频、图片和文字信息,

image.png

材料清单

  • 二哈识图2 AI视觉传感器 X1 链接
  • 行空板K10 X1 链接
  • 行空板多功能扩展板 X1 链接
  • 18650电池 X1
  • microSD 16GB 内存卡 X1
  • TF卡读卡器 X1

三、、实现步骤

步骤1 打开 Mind+2.0软件,点击模型训练,找到目标检测,点击进入目标检测功能。

image.png

步骤2 通过摄像头采集图片,在线完成数据标注、模型训练和模型安装。

image.png

采集垃圾图片

image.png

编辑标签

image.png

标注可回收垃圾

image.png

标注有害垃圾

image.png

标注厨余垃圾

image.png

标注其他垃圾

image.png

训练模型

image.png

训练检测

image.png

实时测试

image.png
image.png
image.png

部署二哈识图2模型文件

image.png

部署二哈识图2模型文件

image.png

部署二哈识图2模型文件

image.png

二哈识图2接入电脑,将垃圾分类80.dc17.zip

拷贝Huskylens 的 硬盘的\storage\installation_package目录下

image.png

观察自己训练的模型的识别效果

d05213b07991e7e03b4a1fbdd5989842.jpg
f0c406df2f89f85f5f0495da4cba6194.jpg
b8d2426fb505783b32cd4bf31ef0fb54.jpg
1d96ba1fd40a277a1790e98f28c36947.jpg

步骤3 打开 mind+,窗口右上角,选择 上传 模式

image.png

步骤4 打开 Mind+,右下角扩展添加在官方库添加行空板k10,二哈2

image.png
image.png

步骤5 编写程序

代码
/*!
 * MindPlus
 * DFRobot, 行空板 K10
 */
#include "unihiker_k10.h"
#include "DFRobot_HuskylensV2.h"

// 动态变量
volatile float mind_n_biaoji;

// 创建对象
UNIHIKER_K10 k10;
uint8_t screen_dir=2;
HuskylensV2 huskylens;
Music music;



// 主程序开始
void setup() {
	k10.begin();
	k10.initScreen(screen_dir);
	k10.creatCanvas();
	Wire.begin();
  while (!huskylens.begin(Wire)) {
    delay(100);
  }
	k10.initSDFile();
	k10.canvas->canvasClear();
	k10.setScreenBackground(0xFFFFFF);
	k10.canvas->canvasText("二哈识图2", 1, 0x000000);
	k10.canvas->canvasText("自训练模型垃圾分类", 3, 0x000000);
	k10.canvas->updateCanvas();
	k10.rgb->write(-1, 0x000000);
	mind_n_biaoji = 0;
	huskylens.switchAlgorithm((eAlgorithm_t)131);
}
void loop() {
	huskylens.getResult((eAlgorithm_t)131);
	if (huskylens.available((eAlgorithm_t)131)) {
		if ((RET_ITEM_STR(huskylens.getCachedCenterResult((eAlgorithm_t)131), Result, name)==String("厨余垃圾"))) {
			k10.canvas->canvasClear(13);
			k10.canvas->canvasText("当前是厨余垃圾", 13, 0x000000);
			k10.canvas->canvasDrawImage(0, 96, "S:/厨余垃圾.jpg");
			k10.canvas->updateCanvas();
			k10.rgb->write(-1, 0x00FF00);
			if ((mind_n_biaoji==1)) {
				music.playTFCardAudio("S:/厨余垃圾 .wav");
				mind_n_biaoji = 0;
			}
		}
		if ((RET_ITEM_STR(huskylens.getCachedCenterResult((eAlgorithm_t)131), Result, name)==String("有害垃圾"))) {
			k10.canvas->canvasClear(13);
			k10.canvas->canvasText("当前是有害垃圾", 13, 0x000000);
			k10.canvas->canvasDrawImage(0, 96, "S:/有害垃圾.jpg");
			k10.canvas->updateCanvas();
			k10.rgb->write(-1, 0xFF0000);
			if ((mind_n_biaoji==1)) {
				music.playTFCardAudio("S:/有害垃圾 .wav");
				mind_n_biaoji = 0;
			}
		}
		if ((RET_ITEM_STR(huskylens.getCachedCenterResult((eAlgorithm_t)131), Result, name)==String("其他垃圾"))) {
			k10.canvas->canvasClear(13);
			k10.canvas->canvasText("当前是其他垃圾", 13, 0x000000);
			k10.canvas->canvasDrawImage(0, 96, "S:/其他垃圾.jpg");
			k10.canvas->updateCanvas();
			k10.rgb->write(-1, 0xFFFFFF);
			if ((mind_n_biaoji==1)) {
				music.playTFCardAudio("S:/其他垃圾.wav");
				mind_n_biaoji = 0;
			}
		}
		if ((RET_ITEM_STR(huskylens.getCachedCenterResult((eAlgorithm_t)131), Result, name)==String("可回收垃圾"))) {
			k10.canvas->canvasClear(13);
			k10.canvas->canvasText("当前是可回收垃圾", 13, 0x000000);
			k10.canvas->canvasDrawImage(0, 96, "S:/可回收垃圾.jpg");
			k10.canvas->updateCanvas();
			k10.rgb->write(-1, 0x0000FF);
			if ((mind_n_biaoji==1)) {
				music.playTFCardAudio("S:/可回收垃圾.wav");
				mind_n_biaoji = 0;
			}
		}
	}
	else {
		k10.canvas->canvasClear(13);
		k10.canvas->canvasText("当前垃圾正在识别.......", 13, 0x000000);
		k10.canvas->canvasDrawImage(22, 96, "S:/等待.jpg");
		k10.canvas->updateCanvas();
		k10.rgb->write(-1, 0x000000);
		if ((mind_n_biaoji==0)) {
			music.stopPlayAudio();
			mind_n_biaoji = 1;
		}
	}
}

四、迭代过程

问题1:

         在程序调试过程中,我发现当二哈识图2(HuskyLens)识别到特定垃圾时,系统会持续不断地重复播放对应的垃圾分类提示音频,无法正常停止。

(1) 解决方案:
          为解决此问题,我们在程序中引入了一个状态标志变量 biaoji。该变量的作用如下:
当 biaoji = 0 时,表示系统正在识别垃圾中,中断播放音频文件,等待响应新的垃圾识别指令;
当 biaoji = 1 时,表示系统正在播放当前垃圾的音频,此时暂停新的识别响应;

(2)实现效果:
         通过引入标志变量 biaoji ,确保每个垃圾分类提示音频只完整播放一次,防止音频播放过程中的重复触发,提高系统响应效率和用户体验,使系统工作更加稳定可靠。

6b7ec01c98b851a91a4b9ea723ac1ab1.jpg

问题2
        在垃圾分类识别系统的初期测试中, 二哈识图2(HuskyLens)在识别时容易误识别两个或多个标签,整体识别精度不高,准确率未达预期,经过测试分析,发现主要存在以下影响因素:
(1)训练样本单一,缺乏多样性;
(2)垃圾物体与背景颜色相似,难以区分;
(3)不同垃圾物体形状特征相似,模型难以辨别;
(4)训练数据量不足,第一次采集数据集图片70张/项,模型泛化能力弱;
(5)标注框绘制不准确,影响模型学习效果

bff1b3c3693cb8d3438f43fe92c2a55c.jpg
      

 解决方案:
        A. 优化垃圾数据采集
    (1)颜色差异化:确保采集垃圾的背景颜色与被采集物体颜色有明显区别,增强轮廓识别度;
    (2)采集形状要区分:采集时避免物体A形状与被测物体B形状过于相似,提升特征可区分性;
    (3)多角度采集:从不同角度、不同光照条件下采集垃圾图片;
    (4)多样化背景:在不同场景和背景下采集图片,提高模型环境适应能力;

       B. 提升标注质量
   (1)绘制标注框时精确对准物体边缘,提高标注准确性;
   (2)对模糊或边界不清的图片进行重新采集;
      C.数据集扩充与训练优化:
   (1)累计采集515张高质量图片作为训练数据集;
    (2)实施8轮次迭代训练,逐步优化模型参数;
    (3)每轮训练后评估效果,针对识别困难类别补充相应数据;

    效果实现:
        通过上述系统化改进,取得了显著成效:识别精度提升,误识别减少,稳定性增强,对未见过的新样本具备良好的识别能力.

封面.jpg

 

评论

user-avatar
  • rzegkly

    rzegkly2025.12.01

    2025年11月20日 晚上,蘑菇云的Mind+ V2 正式开放,它配备了强大的模型训练工具,“三步训 AI 模型”,无需复杂编程,简单三步即可完成AI模型训练。让我们信息科技教师也能轻松训练属于自己的人工智能模型!无需搭建复杂的模型训练工具,通过在线训练,下载模型,操作效果很好。 亮点一:模型训练工具 “硬件无缝适配”:训练好的模型可直接部署到多种硬件设备,实现端侧智能。 亮点二:底层与扩展库重构 Mind+ V2 按需加载,启动更快,运行更流畅。扩展库也支持按需加载与管理,让软件更轻量、更高效。 亮点三:大模型与智能体 Mind+ V2 正式引入智能体编辑器与 MCP 模型连接协议库。轻松调用与集成各类大模型能力。像搭积木一样编排智能体流程,轻松学习和运用大模型技术。

    0