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

行空板K10语音对话机器人 简单

头像 付习慧 2025.02.23 121 1

实现效果

通过外接麦克风语音提问 -> 行空板实时转文字 -> 调用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

import 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

评论

user-avatar
  • 云天

    云天2025.02.23

    硬件使用的是行空板M10。文章说的k10,应替换成Kimi,文章说法有些乱,不知什么原因?

    0