ASR-LLM-TTS 实时语音对话助手:语音识别、大模型对话、声音生成

参考:https://blog.youkuaiyun.com/weixin_42357472/article/details/137020794

asr:funasr-SenseVoiceSmall 离线
llm:deepseek 在线api
tts:edge-tts 在线api


import pyaudio
import wave
import threading
import numpy as np
import time
from queue import Queue
import webrtcvad
import os
import threading
import requests
import json
from funasr import AutoModel
import pygame
import edge_tts
import asyncio
from time import sleep
import langid
from langdetect import detect
import re
from pypinyin import pinyin, Style
from modelscope.pipelines import pipeline
from openai import OpenAI


# --
### 使用ASRLLMTTS API进行集成或开发 #### 选择合适的API服务提供商 为了构建一个完整的语音与文本交互系统,需要选择可靠的ASRLLM以及TTS的服务提供商。目前市场上有许多优秀的服务商提供这类API接口,比如阿里云、百度智能云、腾讯云等国内厂商,还有Google Cloud Speech-to-Text, OpenAI GPT系列模型,Microsoft Azure Cognitive Services中的Speech service等国际知名平台。 #### 配置环境变量 在开始之前,确保已经获取了所选服务商提供的API密钥,并将其配置为环境变量以便后续调用[^1]。 ```bash export OPENAI_API_KEY='your_openai_api_key' export EDGE_TTS_VOICE='zh-CN-XiaoxiaoNeural' # 可根据需求调整发音人 ``` #### 实现基本的功能模块 下面将以Python为例展示如何分别调用这三个组件来完成一次简单的对话流程: ##### 自动语音识别(ASR) 使用`whisper`库来进行音频文件的转录工作。首先安装必要的依赖包: ```bash pip install git+https://github.com/openai/whisper.git ``` 编写如下代码片段读取本地mp3格式的声音文件并转换成文字描述: ```python import whisper def transcribe_audio(file_path): model = whisper.load_model("base") # 加载预训练好的基础版本model result = model.transcribe(file_path) return result["text"] ``` ##### 大规模语言模型(LLM) 这里采用OpenAI官方给出的方式请求GPT-3.5 Turbo接口生成回复消息: ```python import openai openai.api_key = os.getenv('OPENAI_API_KEY') def generate_response(prompt): response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": prompt}, {"role": "assistant"}], temperature=0.7, max_tokens=256 ) message = response.choices[0].message.content.strip() return message ``` ##### 文本到语音(TTS) 最后借助微软Azure提供的Edge TTS工具将返回的文字信息合成为可播放的人声: ```bash pip install edge-tts ``` 定义函数执行实际操作: ```python from pathlib import Path import asyncio import edge_tts async def text_to_speech(text, output_file='./output.mp3'): communicate = edge_tts.Communicate(text=text, voice=os.environ.get('EDGE_TTS_VOICE')) await communicate.save(output_file) if __name__ == '__main__': loop = asyncio.get_event_loop() loop.run_until_complete(text_to_speech(generate_response(transcribe_audio('./input.mp3')), './response.mp3')) ``` 上述脚本实现了从接收用户输入声音到最后输出计算机回应整个过程的一站式自动化处理机制[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

loong_XL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值