15浏览
查看: 15|回复: 0

[项目分享] Mind+ V2.0.7携手二哈2小智:语音操控AI生成明星画像

[复制链接]
本帖最后由 云天 于 2026-8-12 15:03 编辑

【项目背景】
       从“语音操控”到“智能创造”
       你是否想过,用一个语音指令,就能让AI不仅“看见”并认出你照片里的明星,还能根据描述“创造”出一张全新的画像?
       本项目将带你实现这一构想。我们利用HUSKYLENS 2(二哈识图2) 的AI视觉能力和小智AI语音助手,结合LattePanda Alpha 800s上运行的Mind+ V2.0.7与MCP(模型上下文协议) 服务,打造一个完整的语音交互与图像生成系统。整个过程无需编写复杂代码,在Mind+的Python模式下即可轻松完成。
【项目效果演示】
  • 语音唤醒与视觉切换:唤醒小智AI,并语音指令“切换到人脸识别”。
  • 人脸学习与识别:将明星照片置于镜头前,通过对话让小智识别照片上的明星是谁,再语音指令如“学习这个人,名字叫胡歌”。此后,二哈2以后便能直接识别出“胡歌”。
  • 创意图像生成:语音描述如“刘德华是华语乐坛和影坛的超级巨星……”,小智AI将调用MCP服务,在LattePanda上生成并全屏展示一张符合描述的AI画像。


【硬件清单】
  • HUSKYLENS 2 AI视觉传感器 × 1:项目的“眼睛”,负责图像识别。
  • HUSKYLENS 2 WiFi模块 × 1:为HUSKYLENS 2提供联网能力。
  • LattePanda Alpha 800s × 1:项目的“大脑”,运行MCP服务。搭载Intel Core m3-8100Y处理器,性能足够。
  • 15.6英寸1920×1080 IPS Type-C电容触摸屏 × 1:项目的“面孔”,用于显示生成的AI画像。
  • USB Type-C数据线 × 1。

Mind+ V2.0.7携手二哈2小智:语音操控AI生成明星画像图4

【软件准备】
       Mind+ V2.0.7的Python环境
       本项目在LattePanda上运行,系统为Windows。核心软件是Mind+ V2.0.7。
  • 下载安装:从Mind+官网下载并安装最新版。
  • Python环境配置:Mind+ V2.0.7新增了Python环境选择器。打开Mind+,在Python模式下点击“连接Python” → “切换本地Python”,选择“Mind+内置Python”。这个环境预置了常用库,可“开箱即用”。

Mind+ V2.0.7携手二哈2小智:语音操控AI生成明星画像图1



       核心步骤一:配置HUSKYLENS 2与“小智AI”
  • 硬件连接:将WiFi模块插入HUSKYLENS 2,并用Type-C数据线供电。
  • 联网与激活:在HUSKYLENS 2屏幕菜单中配置WiFi。然后进入“小智AI”应用,记下激活码。
  • 绑定设备:浏览器访问小智控制平台,登录后输入激活码完成绑定。
  • 获取MCP接入点:在控制平台中,找到你绑定的设备,复制其“MCP接入点” URL(形如wss://api.xiaozhi.me/mcp/?token=...)。

Mind+ V2.0.7携手二哈2小智:语音操控AI生成明星画像图3

       核心步骤二:在LattePanda上搭建MCP图像生成服务
       这是项目的核心,我们在LattePanda上创建一个MCP服务,等待小智AI的调用。
  • 创建Python项目:打开Mind+,python积木模式——手动编辑,将以下代码粘贴进去。
  • 扩展里添加"小智MCP客户端"
  • 配置参数:将代码中的SILICONFLOW_API_KEY替换为你的SiliconFlow API Key(https://cloud.siliconflow.cn/i/KwyEBX3e,有免费额度,将mcp_runtime.init_mcp_endpoint()中的URL替换为你刚才复制的小智AI MCP接入点。
  • 运行服务:点击Mind+的“运行”按钮。

Mind+ V2.0.7携手二哈2小智:语音操控AI生成明星画像图2


       核心代码解析
  1. # -*- coding: UTF-8 -*-
  2. # MindPlus V2
  3. # python-block
  4. import json
  5. import requests
  6. import os
  7. import tempfile
  8. import cv2
  9. from mcp_api_lib import MCPBlockRuntime
  10. import threading
  11. # --- 配置区域 ---
  12. SILICONFLOW_API_KEY = "你的SiliconFlow API Key"
  13. SILICONFLOW_API_BASE = "https://api.siliconflow.cn/v1"
  14. IMAGE_GEN_MODEL = "Kwai-Kolors/Kolors"
  15. mcp_runtime = MCPBlockRuntime()
  16. mcp_current_ctx = None
  17. def generate_image2(prompt: str) -> str:
  18.     """调用 SiliconFlow API 生成图片,返回本地路径"""
  19.     url = f"{SILICONFLOW_API_BASE}/images/generations"
  20.     headers = {
  21.         "Authorization": f"Bearer {SILICONFLOW_API_KEY}",
  22.         "Content-Type": "application/json",
  23.     }
  24.     payload = {
  25.         "model": IMAGE_GEN_MODEL,
  26.         "prompt": prompt,
  27.         "image_size": "1024x1024",
  28.         "batch_size": 1,
  29.         "num_inference_steps": 20,
  30.     }
  31.     try:
  32.         response = requests.post(url, json=payload, headers=headers)
  33.         response.raise_for_status()
  34.         result = response.json()
  35.         image_url = result['images'][0]['url']
  36.         img_response = requests.get(image_url, stream=True)
  37.         img_response.raise_for_status()
  38.         with tempfile.NamedTemporaryFile(delete=False, suffix=".png") as tmp_file:
  39.             for chunk in img_response.iter_content(chunk_size=8192):
  40.                 tmp_file.write(chunk)
  41.             tmp_file_path = tmp_file.name
  42.         return tmp_file_path
  43.     except requests.exceptions.RequestException as e:
  44.         error_msg = f"调用 SiliconFlow API 失败: {e}"
  45.         print(error_msg)
  46.         if e.response:
  47.             try:
  48.                 error_detail = e.response.json()
  49.                 print(f"API 错误详情: {error_detail}")
  50.             except:
  51.                 pass
  52.         return None
  53. @mcp_runtime.on_tool_called("generate_image2")
  54. def on_mcp_tool_generate_image2(ctx):
  55.     global mcp_current_ctx
  56.     mcp_current_ctx = ctx
  57.     prompt = mcp_runtime.get_param_string(ctx.args, "information")
  58.     print(f"收到生成图片请求,提示词: {prompt}")
  59.     if not prompt:
  60.         # 修复:返回标准 MCP 格式
  61.         return {
  62.             "content": [
  63.                 {"type": "text", "text": "未收到信息"}
  64.             ]
  65.         }
  66.     # 定义后台任务函数
  67.     def generate_and_show():
  68.         try:
  69.             image_path = generate_image2(prompt)
  70.             if image_path:
  71.                 img = cv2.imread(image_path)
  72.                 if img is not None:
  73.                     cv2.namedWindow("Generated Image", cv2.WINDOW_NORMAL)
  74.                     cv2.setWindowProperty("Generated Image", cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)
  75.                     cv2.imshow("Generated Image", img)
  76.                     cv2.waitKey(0)
  77.                     cv2.destroyAllWindows()
  78.                 else:
  79.                     print("OpenCV 读取图片失败")
  80.                 # 可选:清理临时文件
  81.                 # os.remove(image_path)
  82.             else:
  83.                 print("图片生成失败")
  84.         except Exception as e:
  85.             print(f"后台生成出错: {e}")
  86.     # 启动后台线程(守护线程,主程序退出时自动结束)
  87.     # 修复:取消注释,否则图片不会实际生成
  88.     threading.Thread(target=generate_and_show, daemon=True).start()
  89.     # 修复:返回标准 MCP 格式,包含 content 数组
  90.     return {
  91.         "content": [
  92.             {"type": "text", "text": "信息已收到,图片正在后台生成中,请稍候..."}
  93.         ]
  94.     }
  95. # 主程序开始
  96. mcp_runtime.init_mcp_endpoint("你的小智AI MCP接入点URL")
  97. mcp_runtime.register_tool("generate_image2", "本工具能够根据人物信息,生成相应的图片")
  98. mcp_runtime.add_tool_param(
  99.     tool_name="generate_image2",
  100.     param_name="information",
  101.     param_desc="信息",
  102.     param_type="string",
  103.     detail="信息可能是一个明星人物的描述信息,例如:'刘德华是……,根据信息,我们给其设计了发型是……,服装是……,背景是……'"
  104. )
  105. while True:
  106.     mcp_runtime.keep_mcp_connection()
复制代码
       代码要点:
  • MCP工具注册:@mcp_runtime.on_tool_called("generate_image2") 装饰器将函数注册为一个可由小智AI调用的工具。
  • 参数接收:mcp_runtime.get_param_string(ctx.args, "information") 获取小智AI传来的“信息”参数。
  • 异步处理:使用threading在后台生成图片和显示,主线程立即返回“信息已收到”,保证语音交互的流畅性。
  • 标准MCP响应:函数返回符合MCP协议的content数组,小智AI能正确解析并播报。

【工作流程】
  • 语音指令:你对小智AI说“根据胡歌的信息,为其生成相应图片”。
  • LLM理解与调用:小智AI的大语言模型理解意图,决定调用MCP工具generate_image2,并将描述文本作为information参数传递。
  • MCP服务响应:LattePanda上的Python服务接收到调用请求。
  • 图像生成与显示:服务解析参数,调用SiliconFlow API生成图片,下载后用OpenCV全屏显示在触摸屏上。
  • 语音反馈:服务立即返回“信息已收到,图片正在后台生成中”,小智AI播报此信息。

Mind+ V2.0.7携手二哈2小智:语音操控AI生成明星画像图5Mind+ V2.0.7携手二哈2小智:语音操控AI生成明星画像图7Mind+ V2.0.7携手二哈2小智:语音操控AI生成明星画像图8Mind+ V2.0.7携手二哈2小智:语音操控AI生成明星画像图6Mind+ V2.0.7携手二哈2小智:语音操控AI生成明星画像图9
【总结与展望】
       通过本项目,我们见证了MCP协议的强大威力——它像一个万能翻译官,让语音助手(小智AI)能够轻松调用各种本地服务(Python程序)。我们仅用百余行Python代码,就将一个AI视觉传感器与一个强大的云端图像生成模型无缝连接。
       这套系统拥有无限可能:你可以将generate_image2替换成任何Python函数,比如控制GPIO引脚、操作数据库、发送邮件等等。Mind+ V2.0.7提供的Python环境选择器和pip库管理功能,让环境配置变得异常简单,让创作者能更专注于创意本身。
       未来,你可以尝试:
  • 结合HUSKYLENS 2的物体识别功能,让AI根据看到的物体生成故事插画。
  • 利用其自学习分类模型,训练它认识你的宠物,然后生成宠物的卡通头像。
  • 将MCP服务部署到行空板M10等更多设备上,打造分布式AI应用。

       赶快动手试试吧,期待在DF创客社区看到你的精彩作品!




您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2026 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail