本帖最后由 云天 于 2026-8-12 15:03 编辑
【项目背景】
从“语音操控”到“智能创造”
你是否想过,用一个语音指令,就能让AI不仅“看见”并认出你照片里的明星,还能根据描述“创造”出一张全新的画像?
本项目将带你实现这一构想。我们利用HUSKYLENS 2(二哈识图2) 的AI视觉能力和小智AI语音助手,结合LattePanda Alpha 800s上运行的Mind+ V2.0.7与MCP(模型上下文协议) 服务,打造一个完整的语音交互与图像生成系统。整个过程无需编写复杂代码,在Mind+的Python模式下即可轻松完成。
【项目效果演示】
【硬件清单】 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的Python环境
本项目在LattePanda上运行,系统为Windows。核心软件是Mind+ V2.0.7。
核心步骤一:配置HUSKYLENS 2与“小智AI” 硬件连接:将WiFi模块插入HUSKYLENS 2,并用Type-C数据线供电。
联网与激活:在HUSKYLENS 2屏幕菜单中配置WiFi。然后进入“小智AI”应用,记下激活码。
绑定设备:浏览器访问
小智控制平台 ,登录后输入激活码完成绑定。
获取MCP接入点:在控制平台中,找到你绑定的设备,复制其“MCP接入点” URL(形如wss://api.xiaozhi.me/mcp/?token=...)。
核心步骤二:在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+的“运行”按钮。
核心代码解析
# -*- coding: UTF-8 -*-
# MindPlus V2
# python-block
import json
import requests
import os
import tempfile
import cv2
from mcp_api_lib import MCPBlockRuntime
import threading
# --- 配置区域 ---
SILICONFLOW_API_KEY = "你的SiliconFlow API Key"
SILICONFLOW_API_BASE = "https://api.siliconflow.cn/v1"
IMAGE_GEN_MODEL = "Kwai-Kolors/Kolors"
mcp_runtime = MCPBlockRuntime()
mcp_current_ctx = None
def generate_image2(prompt: str) -> str:
"""调用 SiliconFlow API 生成图片,返回本地路径"""
url = f"{SILICONFLOW_API_BASE}/images/generations"
headers = {
"Authorization": f"Bearer {SILICONFLOW_API_KEY}",
"Content-Type": "application/json",
}
payload = {
"model": IMAGE_GEN_MODEL,
"prompt": prompt,
"image_size": "1024x1024",
"batch_size": 1,
"num_inference_steps": 20,
}
try:
response = requests.post(url, json=payload, headers=headers)
response.raise_for_status()
result = response.json()
image_url = result['images'][0]['url']
img_response = requests.get(image_url, stream=True)
img_response.raise_for_status()
with tempfile.NamedTemporaryFile(delete=False, suffix=".png") as tmp_file:
for chunk in img_response.iter_content(chunk_size=8192):
tmp_file.write(chunk)
tmp_file_path = tmp_file.name
return tmp_file_path
except requests.exceptions.RequestException as e:
error_msg = f"调用 SiliconFlow API 失败: {e}"
print(error_msg)
if e.response:
try:
error_detail = e.response.json()
print(f"API 错误详情: {error_detail}")
except:
pass
return None
@mcp_runtime.on_tool_called("generate_image2")
def on_mcp_tool_generate_image2(ctx):
global mcp_current_ctx
mcp_current_ctx = ctx
prompt = mcp_runtime.get_param_string(ctx.args, "information")
print(f"收到生成图片请求,提示词: {prompt}")
if not prompt:
# 修复:返回标准 MCP 格式
return {
"content": [
{"type": "text", "text": "未收到信息"}
]
}
# 定义后台任务函数
def generate_and_show():
try:
image_path = generate_image2(prompt)
if image_path:
img = cv2.imread(image_path)
if img is not None:
cv2.namedWindow("Generated Image", cv2.WINDOW_NORMAL)
cv2.setWindowProperty("Generated Image", cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)
cv2.imshow("Generated Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
else:
print("OpenCV 读取图片失败")
# 可选:清理临时文件
# os.remove(image_path)
else:
print("图片生成失败")
except Exception as e:
print(f"后台生成出错: {e}")
# 启动后台线程(守护线程,主程序退出时自动结束)
# 修复:取消注释,否则图片不会实际生成
threading.Thread(target=generate_and_show, daemon=True).start()
# 修复:返回标准 MCP 格式,包含 content 数组
return {
"content": [
{"type": "text", "text": "信息已收到,图片正在后台生成中,请稍候..."}
]
}
# 主程序开始
mcp_runtime.init_mcp_endpoint("你的小智AI MCP接入点URL")
mcp_runtime.register_tool("generate_image2", "本工具能够根据人物信息,生成相应的图片")
mcp_runtime.add_tool_param(
tool_name="generate_image2",
param_name="information",
param_desc="信息",
param_type="string",
detail="信息可能是一个明星人物的描述信息,例如:'刘德华是……,根据信息,我们给其设计了发型是……,服装是……,背景是……'"
)
while True:
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播报此信息。
【总结与展望】 通过本项目,我们见证了MCP协议的强大威力——它像一个万能翻译官,让语音助手(小智AI)能够轻松调用各种本地服务(Python程序)。我们仅用百余行Python代码,就将一个AI视觉传感器与一个强大的云端图像生成模型无缝连接。
这套系统拥有无限可能:你可以将generate_image2替换成任何Python函数,比如控制GPIO引脚、操作数据库、发送邮件等等。Mind+ V2.0.7提供的Python环境选择器和pip库管理功能,让环境配置变得异常简单,让创作者能更专注于创意本身。
未来,你可以尝试:
结合HUSKYLENS 2的物体识别功能,让AI根据看到的物体生成故事插画。
利用其自学习分类模型,训练它认识你的宠物,然后生成宠物的卡通头像。
将MCP服务部署到行空板M10等更多设备上,打造分布式AI应用。
赶快动手试试吧,期待在DF创客社区看到你的精彩作品!