Mind+ 行空板M10|HTTP调用大模型实现桌面整洁识别完整方案

一、前置条件

  1. 行空板M10提前连接WiFi无线网络
  2. 申请支持图像输入的视觉大模型HTTP API(通义千问、智谱清言、文心一言等)
  3. Mind+需要加载扩展库:行空板、网络请求、base64编码、摄像头、串口通信(驱动XFS5152语音模块)

二、核心实现流程

  1. 行空板板载摄像头截取实时画面
  2. 将图像编码为Base64字符串
  3. 构造HTTP POST请求JSON报文,携带图片与固定提示词Prompt
  4. 严格约束大模型输出,仅返回「整洁」或「杂乱」
  5. 程序解析返回结果,屏幕文字提示 + XFS5152语音播报

标准Prompt(直接复制使用)

你是桌面整洁判断助手,只判断图片桌面整洁程度。
规则:桌面上分散摆放书本、文具、水杯等杂物≥3件判定为【杂乱】;桌面物品很少或物品整齐摆放判定为【整洁】。
**只允许输出两个词语之一,不要多余文字:整洁 / 杂乱**

三、完整可直接运行Python代码(行空板M10 Mind+)

from unihiker import Unihiker
import time
import requests
import base64
import serial
import cv2

# ======================配置区【自行修改参数】======================
u = Unihiker()
# 大模型API地址、密钥
API_URL = "填入你的视觉大模型http接口地址"
API_KEY = "填入你的API密钥"
# XFS5152语音合成模块串口参数
ser = serial.Serial("/dev/ttyS1", 9600, timeout=0.2)
# 识别请求间隔,避免高频调用API产生费用、接口限流
QUERY_INTERVAL = 8
# =================================================================

# XFS5152语音播报函数
def voice_speak(text):
    head = bytes([0xFD, 0x00, len(text)+2, 0x01, 0x01])
    data = text.encode("utf-8")
    ser.write(head + data)

# 摄像头图像转为Base64字符串
def image_to_base64(frame):
    ret, buffer = cv2.imencode('.jpg', frame)
    img_bytes = buffer.tobytes()
    b64_str = base64.b64encode(img_bytes).decode("utf-8")
    return b64_str

# HTTP请求大模型进行图像识别
def detect_desktop_by_llm(img_base64):
    prompt = """
你是桌面整洁判断助手,只判断图片桌面整洁程度。
规则:桌面上分散摆放书本、文具、水杯等杂物≥3件判定为【杂乱】;桌面物品很少或物品整齐摆放判定为【整洁】。
**只允许输出两个词语之一,不要多余文字:整洁 / 杂乱**
"""
    payload = {
        "model": "qwen-vl-plus",
        "messages": [
            {
                "role": "user",
                "content": [
                    {"type": "text", "text": prompt},
                    {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{img_base64}"}}
                ]
            }
        ]
    }
    headers = {
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json"
    }
    try:
        resp = requests.post(API_URL, headers=headers, json=payload, timeout=10)
        res_json = resp.json()
        result_text = res_json["choices"][0]["message"]["content"].strip()
        return result_text
    except Exception as e:
        print("网络请求失败:", e)
        return "error"

last_query_time = 0

# 主循环
while True:
    now = time.time()
    if now - last_query_time > QUERY_INTERVAL:
        last_query_time = now
        # 获取摄像头画面
        frame = u.get_camera_frame()
        # 图片转base64
        img_b64 = image_to_base64(frame)
        # 调用大模型识别
        ret = detect_desktop_by_llm(img_b64)
        print("识别结果:", ret)
        # 清空屏幕原有文字
        u.clear_screen()
        # 判断结果并执行交互
        if ret == "整洁":
            voice_speak("当前桌面整洁,请继续保持。")
            u.draw_text(x=30, y=80, text="✅桌面整洁", color="green", font_size=24)
        elif ret == "杂乱":
            voice_speak("桌面杂物较多,请及时整理桌面。")
            u.draw_text(x=30, y=80, text="⚠️桌面杂乱", color="red", font_size=24)
        else:
            voice_speak("图像识别异常,请检查网络。")
            u.draw_text(x=30, y=80, text="识别失败", color="gray", font_size=24)
    time.sleep(0.2)

四、Mind+图形化积木搭建步骤(图形化编程适用)

  1. 初始化模块
    • 初始化行空板、开启内置摄像头
    • 初始化串口,对接XFS5152语音合成模块
    • 导入网络请求扩展、Base64编码扩展
  2. 循环主体逻辑
    ① 延时等待(设置8秒间隔,限制请求频率)
    ② 调用摄像头捕获图像
    ③ 将图片文件编码为Base64字符串
    ④ 构造POST请求JSON报文,填入Prompt与图片Base64
    ⑤ 发送HTTP网络请求
    ⑥ 解析接口返回文本
    ⑦ 判断返回内容:整洁/杂乱,执行屏幕文字显示 + 语音播报

五、重要优化与避坑指南

  1. Prompt强制约束输出格式
    严格限制模型只能输出「整洁」或「杂乱」,禁止模型输出额外描述文字,否则程序判断失效。
  2. 网络异常容错处理
    代码内置异常捕获,WiFi断开、接口超时不会导致程序卡死,自动提示识别失败。
  3. 控制调用频率
    最低间隔6~8秒,频繁调用会造成接口限流、产生额外费用。
  4. 图像体积优化
    可适当降低摄像头分辨率,减小图片大小,加快网络传输速度。
  5. 赛事风险提示
    该方案全程依赖WiFi网络,无网络环境下AI识别功能失效。如果赛事要求离线评审,请提前做好备选方案。

六、补充接线说明

XFS5152语音合成模块 → 行空板M10 IO扩展板

  • VCC → 5V
  • GND → GND
  • TX → RX(UART1)
  • RX → TX(UART1)
posted @ 2026-07-27 07:56  kkman2000  阅读(37)  评论(0)    收藏  举报