WeNet语音识别调用通义千问

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 sfdefault_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:if system is None or len(system) == 0:system = default_systemreturn system, system, []def history_to_messages(history: History, system: str) -> Messages:messages = [{'role': Role.SYSTEM, 'content': system}]for h in history:messages.append({'role': Role.USER, 'content': h[0]})messages.append({'role': Role.ASSISTANT, 'content': h[1]})return messagesdef messages_to_history(messages: Messages) -> Tuple[str, History]:assert messages[0]['role'] == Role.SYSTEMsystem = messages[0]['content']history = []for q, r in zip(messages[1::2], messages[2::2]):history.append([q['content'], r['content']])return system, historydef model_chat(audio: Tuple[int, List[int]], history: Optional[History], system: str
) -> Tuple[str, str, History]:path = "recorded_audio.wav"sf.write(path, audio[1], audio[0])  query = chs_model.transcribe(path)['text']if query is None:query = ''if history is None:history = []messages = history_to_messages(history, system)messages.append({'role': Role.USER, 'content': query})gen = Generation.call(model = "qwen-72b-chat",messages=messages,result_format='message',stream=True)for response in gen:if response.status_code == HTTPStatus.OK:role = response.output.choices[0].message.roleresponse = response.output.choices[0].message.contentsystem, history = messages_to_history(messages + [{'role': role, 'content': response}])yield  history, systemelse:raise HTTPError('Request id: %s, Status code: %s, error code: %s, error message: %s' % (response.request_id, response.status_code,response.code, response.message))with gr.Blocks() as demo:gr.Markdown("""<p align="center"><img src="https://modelscope.cn/api/v1/models/qwen/Qwen-VL-Chat/repo?Revision=master&FilePath=assets/logo.jpg&View=true" style="height: 80px"/><p>""")gr.Markdown("""<center><font size=8>WeNet语音识别+Qwen-72B-Chat Bot👾</center>""")textbox = gr.Microphone(label="录音")with gr.Row():with gr.Column(scale=3):system_input = gr.Textbox(value=default_system, lines=1, label='System')with gr.Column(scale=1):modify_system = gr.Button("🛠️ 设置system并清除历史对话", scale=2)system_state = gr.Textbox(value=default_system, visible=False)chatbot = gr.Chatbot(label='Qwen-72B-Chat')with gr.Row():clear_history = gr.Button("🧹 清除历史对话")sumbit = gr.Button("🚀 发送")sumbit.click(model_chat,inputs=[textbox, chatbot, system_state],outputs=[chatbot, system_input],concurrency_limit=10)clear_history.click(fn=clear_session,inputs=[],outputs=[chatbot],concurrency_limit=10)modify_system.click(fn=modify_system_session,inputs=[system_input],outputs=[system_state, system_input, chatbot],concurrency_limit=10)demo.queue(api_open=False).launch(height=800, share=False)

依赖文件 requiements.txt

wenet @ git+https://github.com/wenet-e2e/wenet

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/589255.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何获取2024年交易日历?

交易日历是金融领域的重要参考工具&#xff0c;包含了各国的法定节假日、休市日、交易时间调整等信息&#xff0c;能够帮助投资交易者合理安排交易时间、了解市场情况、提高决策的准确性。 DolphinDB 自 2.00.9/1.30.21 版本开始&#xff0c;内置了国内外五十多个交易所的交易…

一起玩儿物联网人工智能小车(ESP32)——22. 用ESP32的LED PWM控制器给TT马达调速(C MicroPython)

新年快乐&#xff01; 2024&#xff0c;我们一起玩儿&#xff01; 摘要&#xff1a;本文主要介绍如何使用Mixly实现PWM波形的输出。 下面就先用Mixly实现PWM波形的输出。首先打开Mixly软件&#xff0c;这次还是先使用C语言来实现。如果你有示波器&#xff0c;或者逻辑分析仪&a…

Linux: memory: THP相关的一些链接

https://docs.kernel.org/mm/page_tables.html https://access.redhat.com/solutions/46111 https://lwn.net/Articles/423584/ 引入的历史 http://www.linux-kvm.org/images/9/9e/2010-forum-thp.pdf ; develper的展示 https://developers.redhat.com/blog/2021/04/27/benchma…

基于SSM的牙科诊所管理系统

基于SSM的牙科诊所管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringSpringMVCMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 前台主页 后台界面 摘要 随着社会的不断发展和人们生活水平的提高&#xff0c;牙…

C++面试宝典第13题:计算餐厅账单

题目 假如你是一家餐厅的收银员,需要编写一个程序来计算顾客的账单。程序应该能够接受顾客点的菜品和数量,并根据菜品的单价计算出总价。另外,程序还应该能够处理折扣和优惠券,并输出最终的账单金额。 解析 这道题主要考察应聘者使用面向对象的设计方法来解决实际问题的能力…

【网络面试(3)】浏览器委托协议栈完成消息的收发

前面的博客中&#xff0c;提到过很多次&#xff0c;浏览器作为应用程序&#xff0c;本身是不具备向网络中发送网络请求的能力&#xff0c;要委托操作系统的内核协议栈来完成。协议栈再调用网卡驱动&#xff0c;通过网卡将请求消息发送出去&#xff0c;本篇博客就来探讨一下这个…

UG NX二次开发(C#)-Ufun和NXOpen混合编程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、Ufun函数3、 NXOpen4、混合编程实现1、前言 在UG NX二次开发过程中,采用Ufun功能比较简单,能用比较少的代码实现我们需要的功能,但是ufun函数的功能不是很强大,尤其随着UG NX的版本…

LeetCode刷题--- 不同路径 III

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 ​​​​​​http://t.csdnimg.cn/6AbpV 数据结构与算法 ​​​http://t.csdnimg.cn/hKh2l 前言&#xff1a;这个专栏主要讲述递…

基于 LangChain + GLM搭建知识本地库

一种利用 langchain 思想实现的基于本地知识库的问答应用&#xff0c;目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。 受GanymedeNil的项目document.ai和AlexZhangji创建的ChatGLM-6B Pull Request启发&#xff0c;建立了全流程可使用开源模…

Python中JSON模块的使用

1 JSON简介 JSON是JavaScript Object Notation即Javascript对象简谱的缩写。JSON是一种轻量级的数据交换格式&#xff0c;JSON数据是由键值对组成的结构&#xff0c;与Python中的字典类似&#xff0c;由尖括号包围的键值对组成&#xff0c;键和值的类型可以是字符串、数字、布…

【华为机试】2023年真题B卷(python)-滑动窗口最大值

一、题目 题目描述&#xff1a; 有一个N个整数的数组&#xff0c;和一个长度为M的窗口&#xff0c;窗口从数组内的第一个数开始滑动直到窗口不能滑动为止&#xff0c; 每次窗口滑动产生一个窗口和&#xff08;窗口内所有数的和&#xff09;&#xff0c;求窗口滑动产生的所有窗口…

Python为何适合开发AI项目?

Python在人工智能&#xff08;AI&#xff09;项目中的流行和广泛应用归因于多个因素&#xff0c;其中一些主要原因包括&#xff1a; 1、易学易用&#xff1a; Python语法简洁清晰&#xff0c;易于学习和理解。这使得新手能够更容易上手&#xff0c;并且对于处理复杂的AI算法和…

GitHub Copilot的快速入门

GitHub Copilot 是一个由 OpenAI 和 GitHub 合作开发的人工智能编程助手&#xff0c;它可以帮助你更快地编写代码。要开始使用 GitHub Copilot&#xff0c;请按照以下步骤操作&#xff1a; 安装 GitHub Copilot&#xff1a; 首先&#xff0c;确保你已经安装了 Visual Studio Co…

电缆厂 3D 可视化管控系统 | 图扑数字孪生

图扑软件(Hightopo)专注于 Web 的 2D&3D 可视化&#xff0c;自主研发 2D&3D 图形渲染引擎、数据孪生应用开发平台和开发工具&#xff0c;广泛应用于 2D&3D 可视化、工业组态与数字孪生领域&#xff0c;图扑软件为工业物联网、楼宇、场馆、园区、数据中心、工厂、电…

shell编程一

shell 定义 Shell 也是一种程序设计语言&#xff0c;它有变量&#xff0c;关键字&#xff0c;各种控制语句&#xff0c;有自己的语法结构&#xff0c;利用shell程序设计语 可以编写功能强、代码简短的程序 #! Shebang 定义解释器 shell的分类和切换 # cat /etc/shells /bin/sh…

C语言学习----存储类别

存储类别 &#x1f33f;本文是C Primer Pluse 中文版第12章的部分内容整理 &#x1f331;主要是围绕C中作用域 链接 存储期 展开 &#xff0c;是后面进行多文件管理的基础~ &#x1f308;概要 &#x1f34e;明确对象 变量名 标识符的基本概念和含义 &#x1f350;作用域和链接描…

ES6之Reflect详解

✨ 专栏介绍 在现代Web开发中&#xff0c;JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性&#xff0c;还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言&#xff0c;JavaScript具有广泛的应用场景&#x…

MATLAB --- 如何对 hold on 和 hold off 绘制的图像进行保存

要将通过 hold on 和 hold off 绘制的图像保存起来&#xff0c;可以使用 saveas 函数 将图像保存为指定的文件格式 例如&#xff1a; % 在这里是你的绘图代码&#xff0c;包括 hold on 和 hold off% 保存图像 saveas(gcf, plot.png, png);参数&#xff1a; gcf&#xff1a; …

JVM老年代内存优化

参考&#xff1a; 老年代持续增长&#xff0c;无法触发 mixed gc 的解决方案_java老年代一直增长-CSDN博客 java老年代越来越大 jvm老年代爆满_mob64ca13f63f2c的技术博客_51CTO博客 【JVM调优】内存溢出CPU占用过高:问题排查解决方案复盘_wx5e479319a1db4的技术博客_51CTO博…

2023年度学习总结

想想大一刚开始在CSDN写作&#xff0c;这一坚持&#xff0c;就是我在CSDN的第九个年头&#xff0c;这也是在CSDN最有里程碑的一年&#xff0c;这一年我被评为CSDN的博客专家啦&#xff01;先是被评为Unity开发领域新星创作者&#xff0c;写的关于一部分Unity开发的心得获得大家…