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

书桌整洁度提示小助手(Mind+ V2 模型训练) 简单

头像 yibaiya 2026.04.15 16 0

项目背景: 当前学生特别是中学生课业繁重,经常导致书桌桌面凌乱,难以快速找到所需资料。

可以设计一个整理书桌提醒小助手,在识别到桌面凌乱时候,播报语言:“书桌需要整理咯”,来提示学生主动自觉地整理书桌。

一、整体思路

1.准备 3类数据集 分别标注为 凌乱、一般、整洁

每类准备了50张不同角度的书桌照片

2.在mind+里训练图像分类模型

用mind+内置的ai模型训练(图像分类)一键训练

3.导出训练好的模型

4.写行空板程序

摄像头拍摄

模型推理

根据结果播放语音

二、过程

第一步、数据集整理

图片清晰多角度

在这里为了得到足够多的图片,通过视频抽取的图片

第二步:Mind+ 训练图像分类模型

1. 打开 Mind+(最新版)

2. 顶部切换到:AI模式

3. 左侧选择:图像分类

4. 点击:导入数据集 → 选择你上面的 书桌数据集 文件夹

5. 等待加载完成,确认 3 个类别都显示

6. 点击:开始训练

- 训练轮次默认即可

- 等待训练完成(1~3分钟)

7. 训练完成后:

- 点击 导出模型

- 选择 行空板 / UNIHIKER

- 导出得到一个  .kmodel  文件

四、第三步:把模型和语音文件放到行空板

1. 模型上传

1. 用数据线连接行空板

2. 打开 Mind+ → 切换到 上传模式

3. 打开 文件系统

4. 把刚才导出的  xxx.kmodel  上传到行空板根目录或  model  文件夹

2. 准备语音(推荐)

你可以直接用我给你写好的文字转语音,也可以自己录 3 段 MP3/WAV:

-  凌乱.mp3 

-  一般.mp3 

-  整洁.mp3 

同样上传到行空板。

五、第四步:行空板 Python 代码

from unihiker import GUI, Audio import cv2 import numpy as np import time from maix import nn # 初始化GUI和音频 gui = GUI() audio = Audio() # 加载模型(与你上传的文件名一致) model = nn.load("/root/desk_model.kmodel") # 类别顺序必须和训练时一致! labels = ["凌乱", "一般", "整洁"] def desk_detect(): # 1. 打开摄像头 cap = cv2.VideoCapture(0) cap.set(cv2.CAP_PROP_FRAME_WIDTH, 224) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 224) gui.clear() gui.draw_text(x=120, y=20, text="书桌状态识别", origin="center", font_size=16) while True: ret, frame = cap.read() if not ret: break # 2. 预处理图片 img = cv2.resize(frame, (224, 224)) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img = img.astype(np.float32) / 255.0 # 3. 模型推理 out = model.forward(img) max_idx = np.argmax(out) result = labels[max_idx] confidence = out[max_idx] # 4. 屏幕显示结果 gui.clear() gui.draw_text(x=120, y=40, text="书桌状态识别", origin="center") gui.draw_text(x=120, y=80, text=f"状态:{result}", origin="center") gui.draw_text(x=120, y=110, text=f"置信度:{confidence:.2f}", origin="center") # 5. 语音播报(只在状态变化时播报,避免一直叫) if hasattr(desk_detect, "last_result"): if desk_detect.last_result != result: play_voice(result) else: play_voice(result) desk_detect.last_result = result time.sleep(0.2) cap.release() def play_voice(status): """根据状态播放语音""" if status == "凌乱": audio.play("/root/凌乱.mp3") # 或者直接文字朗读: # audio.say("书桌有点乱,该整理啦") elif status == "一般": audio.play("/root/一般.mp3") # audio.say("书桌还算整齐,继续保持") elif status == "整洁": audio.play("/root/整洁.mp3") # audio.say("书桌非常整洁,你真棒") if __name__ == "__main__": desk_detect()

前提:

- 已接 USB 摄像头

- 已接 音箱/耳机

- 模型名为  desk_model.kmodel 

 

代码
from unihiker import GUI, Audio
import cv2
import numpy as np
import time
from maix import nn

# 初始化GUI和音频
gui = GUI()
audio = Audio()

# 加载模型(与你上传的文件名一致)
model = nn.load("/root/desk_model.kmodel")

# 类别顺序必须和训练时一致!
labels = ["凌乱", "一般", "整洁"]

def desk_detect():
    # 1. 打开摄像头
    cap = cv2.VideoCapture(0)
    cap.set(cv2.CAP_PROP_FRAME_WIDTH, 224)
    cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 224)

    gui.clear()
    gui.draw_text(x=120, y=20, text="书桌状态识别", origin="center", font_size=16)

    while True:
        ret, frame = cap.read()
        if not ret:
            break

        # 2. 预处理图片
        img = cv2.resize(frame, (224, 224))
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        img = img.astype(np.float32) / 255.0

        # 3. 模型推理
        out = model.forward(img)
        max_idx = np.argmax(out)
        result = labels[max_idx]
        confidence = out[max_idx]

        # 4. 屏幕显示结果
        gui.clear()
        gui.draw_text(x=120, y=40, text="书桌状态识别", origin="center")
        gui.draw_text(x=120, y=80, text=f"状态:{result}", origin="center")
        gui.draw_text(x=120, y=110, text=f"置信度:{confidence:.2f}", origin="center")

        # 5. 语音播报(只在状态变化时播报,避免一直叫)
        if hasattr(desk_detect, "last_result"):
            if desk_detect.last_result != result:
                play_voice(result)
        else:
            play_voice(result)

        desk_detect.last_result = result

        time.sleep(0.2)

    cap.release()

def play_voice(status):
    """根据状态播放语音"""
    if status == "凌乱":
        audio.play("/root/凌乱.mp3")
        # 或者直接文字朗读:
        # audio.say("书桌有点乱,该整理啦")
    elif status == "一般":
        audio.play("/root/一般.mp3")
        # audio.say("书桌还算整齐,继续保持")
    elif status == "整洁":
        audio.play("/root/整洁.mp3")
        # audio.say("书桌非常整洁,你真棒")

if __name__ == "__main__":
    desk_detect()

评论

user-avatar