行空板K10语音对话机器人

2025-02-23612
AI 快速预览详细 收起
本项目通过行空板K10实现了一个语音对话机器人,用户可以通过外接麦克风进行语音提问,行空板将语音转为文字,并调用K10 API获取答案,最后以文字和语音合成的方式输出。整个过程包括硬件连接、软件准备、代码编写和优化方向。项目不仅展示了语音识别和合成技术,还提供了多模态交互和上下文记忆的扩展思路。

实现效果

通过外接麦克风语音提问 -> 行空板实时转文字 -> 调用K10  API获取答案 -> 文字+语音合成输出 -> 触摸屏交互界面

一、硬件连接

组件说明

行空板 ×1 主控设备

USB麦克风 ×1 语音输入(或使用兼容的I2S数字麦克风)

扬声器 ×1 音频输出(可用3.5mm耳机孔或USB声卡)

联网环境 Wi-Fi/USB共享网络

二、软件准备

1. API服务注册

注册 K10开放平台 获取API Key

2. 行空板终端安装依赖

bash

复制

pip install requests unihiker SpeechRecognition pydub pygame

三、完整代码

 

 99c81bf6e716ab30cb527b42392cab2.png

python

复制

from unihiker import GUI

import requests

少儿编程 · 行空板K10语音对话机器人_image_1.webpimport speech_recognition as sr

import pygame

from pygame import mixer

import io

import time

# 初始化组件

gui = GUI()

mixer.init()

recognizer = sr.Recognizer()

# ===== 配置区 =====

KIMI_API_KEY = "your_kimi_api_key"  # 替换实际API Key

VOICE_OUTPUT = True  # 是否启用语音播报

# K10 API调用函数

def ask_kimi(question):

    headers = {

        "Authorization": f"Bearer {KIMI_API_KEY}",

        "Content-Type": "application/json"

    }

    payload = {

        "model": "moonshot-v1-8k",

        "messages": [{"role": "user", "content": question}],

        "temperature": 0.3

    }

    

    try:

        response = requests.post(

            "https://api.moonshot.cn/v1/chat/completions",

            headers=headers,

            json=payload

        )

        return response.json()["choices"][0]["message"]["content"]

    except Exception as e:

        return f"API请求失败:{str(e)}"

# 语音识别函数

image.png

def speech_to_text():

    with sr.Microphone() as source:

        gui.draw_text(x=20, y=280, text="请说话...", color="red")

        audio = recognizer.listen(source, timeout=5)

    try:

        text = recognizer.recognize_google(audio, language='zh-CN')

        return text

    except sr.UnknownValueError:

        return "无法识别语音"

    except sr.RequestError:

        return "语音服务不可用"

# 语音合成播放

def text_to_speech(text):

    if not VOICE_OUTPUT: return

    # 使用edge-tts或本地引擎(此处简化为系统语音)

    with open("output.wav", "wb") as f:      f.write(requests.get(f"http://tts.baidu.com/text2audio?lan=zh&ie=UTF-8&text={text}").content)

    mixer.music.load("output.wav")

    mixer.music.play()

# ===== 界面设计 =====

# 背景框

gui.draw_rect(x=10, y=10, w=220, h=240, color="#f0f0f0")

# 对话历史

history_box = gui.draw_text(x=20, y=20, w=200, h=200, text="", color="#333")

# 语音按钮

record_btn = gui.draw_button(x=80, y=260, w=80, h=40, text="按住说话")

record_btn.config(touch_events={'press': True})

# 交互处理

def on_record(event):

    if event == "press":

        question = speech_to_text()     history_box.config(text=history_box.cget("text") + f"\nYou: {question}")    

        answer = ask_kimi(question)

    history_box.config(text=history_box.cget("text") + f"\nKimi: {answer}")     

        text_to_speech(answer)

record_btn.bind(event_type="press", handler=on_record)

gui.keep_running()

四、使用说明

硬件连接

USB麦克风插入USB接口

扬声器接入3.5mm音频口

配置修改

替换代码中的KI_API_KEY

根据网络情况调整语音识别服务(可改用百度/讯飞API)

操作流程

点击屏幕"按住说话"按钮

对着麦克风提问(如:"如何给行空板编程?")

等待语音转文字 -> API响应 -> 答案显示与播报

五、优化方向

多模态交互

python

复制

# 添加表情反馈

emotion_icon = gui.draw_image(x=180, y=20, w=50, h=50, image='neutral.png')

上下文记忆

python

复制

# 在payload中添加历史对话

messages = [

    {"role": "system", "content": "你是一个幽默的助手"},

    {"role": "user", "content": "之前问题上下文..."},

    {"role": "assistant", "content": "历史回答..."}

]

离线唤醒词

python

复制

# 使用snowboy热词检测

from voice_engine import HotwordDetector

detector = HotwordDetector(model="ki.pmdl")

注意事项

网络延迟可能影响响应速度

嘈杂环境需使用定向麦克风

API调用频率需符合平台限制

长时间录音注意内存管理

本方案实现了从 语音采集→AI推理→多模态反馈 的完整链路,可作为智能语音助手的开发原型。建议通过3D打印外壳制作成便携设备,拓展更多物联网控制功能。

 image.png

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(1)
云天
云天
硬件使用的是行空板M10。文章说的k10,应替换成Kimi,文章说法有些乱,不知什么原因?
- 没有更多了 -