WeNet语音识别调用通义千问

本文介绍了一种通过WeNet语音识别技术与通义千问(Qwen-72B-ChatBot)结合的Gradio应用,用户可以通过语音与聊天机器人进行连续对话,同时展示了如何在Gradio界面中实现语音转文本、交互历史管理和简单系统设置。

WeNet语音识别调用通义千问

WeNet语音识别对通义千问(Qwen-72B-Chat Bot)调用,首先通过WeNet将用户的语音输入转录为文本,然后将此文本输入通用问答模型以获取答案。

本人原创作品,体验一下
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
连续对话
在这里插入图片描述

WeNet语音识别部分: 使用WeNet库将录制的语音转换为文本。通过载入中文模型(chs_model)并使用其功能,对录制的语音进行转录处理。生成的文本作为用户输入被传递到下一步。

Qwen-72B-Chat Bot交互部分: 利用Dashscope库实现与Qwen-72B-Chat Bot的交互。根据用户的文本输入与Chat Bot进行交互,发送用户输入的文本并接收Chat Bot的回复。这里的逻辑在model_chat函数中完成,通过Generation.call()函数向Chat Bot发送消息并获取回复。

Gradio界面设计: Gradio库用于创建用户界面,包括麦克风录音输入、文本框显示以及清除历史和设置系统功能的按钮。在界面设计中,使用了Microphone、Textbox、Button和Chatbot等组件,允许用户进行语音输入并查看对话的交互结果。

整个代码的目的是提供一个基于Gradio的界面,使用户能够通过语音与Qwen-72B-Chat Bot进行交互,并展示对话历史、系统状态等信息。

这样的集成将语音识别和聊天机器人交互结合在一起,为用户提供了一个使用简单且直观的界面,以便通过语音进行问题提问与回答。

实现代码

import os
os.system('pip install dashscope')
os.system('pip install soundfile')
import gradio as gr
from http import HTTPStatus
import dashscope
from dashscope import Generation
from dashscope.api_entities.dashscope_response import Role
from typing import List, Optional, Tuple, Dict
from urllib.error import HTTPError
import wenet
import soundfile as sf


default_system = 'You are a helpful assistant.'
chs_model = wenet.load_model('chinese')
YOUR_API_TOKEN = os.getenv('YOUR_API_TOKEN')
dashscope.api_key = YOUR_API_TOKEN
History = List[Tuple[str, str]]
Messages = List[Dict[str, str]]

def clear_session() -> History:
    return []

def modify_system_session(system: str) -> str
实现语言转文字(语音识别)功能,可以通过通义的 WebAPI 接口来完成。JavaScript 通常运行在浏览器或 Node.js 环境中,这里提供一个使用 JavaScript 调用通义 SDK 实现语音识别的基本方法。 以下是一个基于浏览器环境调用通义语音识别 API 的示例: ### 获取语音输入 首先,需要获取用户的麦克风访权限,并录制音频数据。 ```javascript // 请求用户麦克风权限并开始录音 navigator.mediaDevices.getUserMedia({ audio: true }) .then(stream => { const mediaRecorder = new MediaRecorder(stream); const audioChunks = []; mediaRecorder.addEventListener("dataavailable", event => { audioChunks.push(event.data); }); mediaRecorder.addEventListener("stop", () => { const audioBlob = new Blob(audioChunks, { type: 'audio/webm' }); // 将音频上传到服务器进行识别 uploadAudioAndRecognize(audioBlob); }); mediaRecorder.start(); // 假设录音持续时间为5秒 setTimeout(() => mediaRecorder.stop(), 5000); }) .catch(err => console.error('无法访麦克风', err)); ``` ### 上传音频并调用通义 API 接下来,将录制好的音频文件发送至通义语音识别接口进行处理。 ```javascript async function uploadAudioAndRecognize(audioBlob) { const formData = new FormData(); formData.append("file", audioBlob, "recording.webm"); try { const response = await fetch("https://dashscope.aliyuncs.com/api/v1/services/aigc/audio-to-text/transcription", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", // 替换为你的 DashScope API Key // 注意:某些接口可能还需要 Content-Type 设置,但使用 FormData 时通常由浏览器自动设置 }, body: formData }); if (!response.ok) throw new Error("网络响应异常"); const result = await response.json(); console.log("识别结果:", result.output.text); // 输出识别出的文字内容 } catch (error) { console.error("语音识别失败:", error); } } ``` ### Node.js 示例(使用 `axios`) 如果你在 Node.js 环境下开发,可以使用 `axios` 和 `fs` 模块读取本地音频文件并发送请求。 ```bash npm install axios form-data ``` ```javascript const axios = require('axios'); const fs = require('fs'); const FormData = require('form-data'); const recognizeSpeech = async () => { const formData = new FormData(); const fileStream = fs.createReadStream('path/to/recording.wav'); // 替换为你自己的音频路径 formData.append('file', fileStream); try { const response = await axios.post( 'https://dashscope.aliyuncs.com/api/v1/services/aigc/audio-to-text/transcription', formData, { headers: { ...formData.getHeaders(), 'Authorization': 'Bearer YOUR_API_KEY' } } ); console.log('识别结果:', response.data.output.text); } catch (error) { console.error('语音识别失败:', error.response?.data || error.message); } }; recognizeSpeech(); ``` ### 注意事项 - **API 密钥**:确保你已经在阿里云平台申请了 DashScope 的 API 密钥,并将其正确填入代码中的 `YOUR_API_KEY`。 - **音频格式**:通义支持多种音频格式,例如 `.wav`, `.mp3`, `.webm` 等,请根据文档确认具体要求[^1]。 - **跨域题**:浏览器环境中需要注意 CORS 限制,推荐通过后端服务中转请求。 - **安全性**:不要在前端暴露敏感信息如 API Key,建议通过后端代理请求以避免安全风险。 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

陈增林

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

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

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

打赏作者

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

抵扣说明:

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

余额充值