版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
智能语音记分content目录01语音识别与合成02Web版语音记分03Python版语音记分语音识别与合成01本地录音文件识别Whisper语音识别模型Whisper语音识别模型由OpenAI公司研发并开源,可以直接在本地部署和调用。要使用Whisper模型,必须先完成依赖库的安装。如果之前未安装PyTorch,则此处需要先利用pipinstalltorch命令安装其CPU版本,再利用以下命令安装transformers库及其依赖包。pipinstalltransformersaccelerate安装完成后,编写以下代码便可实现语音文件的识别。目前Whisper主要支持WAV、FLAC、MP3这3种格式的音频文件,读者可以自行制作或下载相应格式的文件用于测试。本地录音文件识别Vosk语音识别模型Vosk是一个开源的语音识别模型,支持多国语言,包括普通话。其中文语音模型包括两个版本:一个大小为42MB的小模型版本以及一个大小为1.3GB的大模型版本。其中,小模型版本的实测效果并不是很理想,但是运行速度快,因此常作为语音唤醒模型。首先,下载支持中文的语音识别模型vosk-model-small-cn-0.22和vosk-model-cn-0.22,将这两个模型文件解压到某个目录下,读者可以先加载这两个模型进行测试,再决定后续是否采用该模型。其次,执行“pipinstallSpeechRecognitionvoskpyaudio”命令安装两个依赖库,并编写以下代码实现语音文件的识别。本地实时语音识别本地实时语音识别同样支持Whisper或Vosk模型。通过speech_recognition库读取麦克风实时语音,便可以实现相应效果。使用Vosk模型的示例代码如下。本地实时语音识别当代码运行并提示“请说话…”时,对着计算机的麦克风说话,尽量使用标准普通话,说话速度慢一点,发音清楚一点,运行结果类似如下。也可以使用Whisper模型实现实时语音识别,代码如下。本地实时语音识别也可以使用Whisper模型实现实时语音识别,代码如下。Whisper模型存在文件大、推理速度慢的缺点,不建议用于设计实时语音识别系统。本地语音识别的优势在于节省了云端API的费用,但是对CPU或GPU的推理速度要求较高,读者可以根据实际情况选择合适的方案。阿里云语音识别阿里云提供在线语音识别模型供开发者调用,以实现语音识别功能,目前其识别准确率要远高于本地模型。要使用阿里云的语音识别模型Paraformer,只需要确保已经成功安装了Dashscope的Python库并拥有DashscopeAPIKey,这类准备工作在前文已经介绍过。读者也可以参考其官网的在线帮助文档获取更多接口调用示例。阿里云语音识别录音文件识别根据在线帮助文档,参考Paraformer录音文件识别PythonAPI的示例代码,录音文件识别分为两类:本地文件识别,通过指定本地音频文件进行实时识别;云端文件识别,通过指定多个音频文件的URL进行异步识别。以下代码可以实现录音文件的实时语音识别功能。阿里云语音识别录音文件识别为了提升效率,进行批量化处理,Paraformer模型也支持异步调用,代码如下。阿里云语音识别实时语音识别Paraformer模型同样支持实时语音识别,这对智能语音记分系统来说至关重要。实时语音识别通过实现回调接口的方式流式输出实时识别结果。根据官方文档,实时语音识别的代码如下。阿里云语音识别实时语音识别运行上述代码,将打开麦克风并进行实时识别,Paraformer的识别准确率非常高,运行结果类似如下。WebSocket通信HTTP是一种无状态的、无连接的、单向的应用层协议。它采用请求/响应模型。通信请求只能由客户端发起,服务器对请求做出应答处理。这种通信模型有一个弊端:HTTP无法实现服务器主动向客户端发送消息。这种单向请求的特点导致服务器有连续的状态变化时,客户端要获知这些变化非常麻烦。大多数Web应用程序通过频繁的异步AJAX请求实现长轮询,轮询效率低,资源浪费大(因为必须不停地建立连接,或者HTTP连接始终打开)。而WebSocket就是专门用于解决该问题的。WebSocket连接允许客户端和服务器之间进行全双工通信,以便任意一方可以通过建立的连接将数据推送到另一端。WebSocket只需要建立一次连接,就可以一直保持连接状态。相较于轮询方式要不停地建立连接,这种方式的效率得到了很大提高。图5-1展示了AJAX轮询与WebSocket通信过程。WebSocket通信WebSocket通信阿里云提供了两种语音识别的模型接口。第一种是智能语音交互接口,该接口默认支持WebSocket,可以直接使用JavaScript完成交互。但是该接口的开通无法使用之前已经申请好的APIKey,之前的代码也无法重用,且代码相对较复杂。本书采用第二种接口,即直接使用之前申请好的APIKey,并重用前文Python调用Paraformer的识别代码。使用此接口只需要定义一个Python的WebSocket服务器接口,用于与前端JavaScript进行交互,逻辑上比较好理解,同时可以了解WebSocket服务器和客户端的开发逻辑,一举两得。WebSocket通信开发WebSocket服务器要在Python中开发WebSocket服务器,需要先安装websockets库,安装命令为pipinstallwebsockets,并编写以下代码实现WebSocket服务器端口。WebSocket通信开发WebSocket服务器完成上述代码的编写后直接运行,此时Python会启动一个WebSocket服务并绑定端口8765。利用Apifox创建一个WebScoket接口,并对该接口进行测试,测试结果如图5-2所示。WebSocket通信开发JavaScript客户端前面完成了服务器的开发,接下来开发JavaScript客户端,代码及注释如下。JavaScript语音识别利用JavaScript进行实时语音识别的核心流程包含以下4个步骤。(1)利用JavaScript的MediaRecorderAPI在网页端进行实时录音操作;默认的API不支持WAV格式,建议使用RecordRTC.js库直接将语音录制为WAV格式。(2)利用WebSocket将网页中的录音数据实时传输给后端。(3)后端对获取到的实时二进制数据进行累加,累加到一定大小(如64KB)时,将该二进制文件保存到一个临时文件中。(4)读取该临时文件,并使用Paraformer的录音文件识别方案进行识别,获取识别结果。(5)Python将识别到的结果通过WebSocket回传给前端,并删除之前的临时文件。JavaScript语音识别MediaRecorderAPI虽然JavaScript内置的MediaRecorderAPI无法直接将音频录制为WAV或MP3格式,但是仍然有必要了解一下其工作机制。先通过API获取浏览器权限调用麦克风(摄像头等硬件的调用与此类似),再定义录制格式等参数,最后处理不同事件。以下代码展示了从录制音频到在本地播放的全过程,用作后续使用RecordRTC.js库的基础参考。JavaScript语音识别RecordRTC.js库因为原生MediaRecorderAPI无法支持WAV格式的音频录音,所以需要使用第三方库来录制音频,智能语音记分系统采用RecordRTC.js库。读者可自行下载该库并将其保存到当前项目目录下,在HTML界面中引用该库,编写以下代码进行测试。JavaScript语音识别后端WebSocket接口后端WebSocket接口主要用于实时接收来自前端的(二进制)音频数据,将其拼接为64KB大小并保存到临时文件夹中。保存文件时需要注意,必须使用wave库将二进制文件转换为WAV文件,否则数据将出现乱码,无法正常使用。调用Paraformer接口进行语音识别。JavaScript语音识别后端WebSocket接口上述代码会在当前目录的audio目录下产生很多64KB大小左右的临时文件,建议通过定时任务将其定时删除。同时,所有函数的定义和调用全部采用异步机制进行,以确保系统的及时响应和运行效率。因为当前端提交音频文件到后端后,后端一方面需要调用Paraformer将音频文件转换为文本文件,另一方面需要继续接收前端发送来的新数据,在这种情况下,如果不使用异步机制,则必然会导致程序阻塞,从而大幅降低系统运行效率。JavaScript语音识别前端音频采集及识别前端代码无非是在RecordRTC.js库的基础用法上加上WebSocket连接和数据发送的代码。那么,什么时候将数据发送出去呢?录音结束后才发送肯定无法被接受。此时,可以利用RecordRTC.js库的ondataavailable事件设置何时发送。该事件会设置一个时间,若设置为500毫秒,则每隔500毫秒会触发一次该事件,在该事件中发送数据即可达到实时发送的目的。语音合成与播放利用pyttsx3库实现本地语音合成运行“pipinstallpyttsx3”命令安装库,并编写以下代码调用本地系统的语音合成服务,合成后的语音可以直接播放,也可以将其保存到文件中。语音合成与播放利用阿里云的语音合成服务Sambert实现语音合成阿里云的语音合成服务Sambert不仅支持合成不同格式的文件,支持设置音频参数或选择不同类型的音色,还支持对合成的语音进行实时播放或将其保存到文件中。以下代码演示了其用法。语音合成与播放利用阿里云的语音合成服务Sambert实现语音合成上述代码将文本合成为语音,保存为MP3格式的文件。更多详细参数可参考其在线帮助文档。如果要实时播放合成的语音,则需要安装pyaudio,并编写以下代码。语音合成与播放前端播放语音合成文件编写一个FastAPI后端接口,用于接收前端提交的文本,完成语音合成后,将音频文件的路径响应给前端,具体代码如下。Web版语音记分02功能与实现思路智能语音记分系统主要应用于各类比赛。一方面,该系统通过语音指令代替人工实现快速记分,可以提供更好的用户体验;另一方面,该系统可以在不暂停比赛的情况下通过语音完成记分操作,使用起来更加便捷。图5-3所示为一个标准的Web界面,可以使用语音控制记分,也可以手动单击按钮实现记分功能。同时,其支持撤销最后一次得分,以应对一些记分错误的情况。这里将界面元素设计得比较大,目的是使该应用可以安装在一台嵌入式设备(如树莓派等)上,并连接一个较小的触控屏,以便随身携带。功能与实现思路梳理Web版智能语音记分系统各个功能的实现思路。(1)开始本局。获取浏览器麦克风权限并开始录音,建立与后端WebSocket服务器的连接,以便实现语音识别。(2)加减号按钮。加减号按钮用于进行手动操作,每次加减1分,这个得分可以通过函数参数进行传递,这样语音控制时也可以调用该函数,只是传递的得分由语音识别而来。(3)每次只要有加减分数的操作都要记录到日志中,以便赛后回溯。同样地,撤销得分也可以根据该日志记录来进行,读取最后一条日志记录,解析其中的内容,并进行逆向操作,就可以撤销最后一次的得分。(4)结束本局。结束本局主要需完成两件事:一是关闭与WebSocket服务器的连接,二是汇总比分并清空本局比分,以便开始下一局。(5)所有针对文本框、文本域、总比分等的加减操作或记录操作,均使用标准的JavaScript进行处理。为了计算分数的加减,需要将文本框中的数字通过ParseInt()函数转换为整数进行处理。前端界面实现前端界面由标准的HTML+CSS实现,代码如下。前端界面实现上述HTML代码对应的style.css文件内容如下。前端JavaScript代码实现前端代码中除了语音识别功能,基本都是JavaScript本地操作,逻辑并不复杂,但是绝大部分操作的相关细节需要注意。尤其是在什么情况下应该调用哪个函数,更新哪个得分,务必确保无误。后台代码实现后台代码主要分为两部分:第一部分是FastAPI定义与渲染、静态目录定义等代码,第二部分是WebSocket服务器和语音识别代码。FastAPI定义与渲染代码比较简单,因为除渲染模板界面外,没有其他功能需要FastAPI来处理。当然,读者也可以自行添加接口来处理前端的一些比赛数据,如保存每一次的比赛结果数据等。这类功能的实现与一个标准的Web应用的实现没有任何区别,前文已经详细讲解过,所以这里不再实现这类功能。Python版语音记分03tkinter绘制界面Python中开发界面的库有很多,比较知名的有Python内置的小型应用开发库tkinter,以及功能更全面的wxPython库,也包括功能更加强大的、从大名鼎鼎的C++界面库QT移植而来的PyQT库。因为智能语音记分系统的界面相对简单,功能也不复杂,所以直接采用tkinter实现。Python版智能语音记分系统的运行截图如图5-4所示。tkinter绘制界面与HTML类似,tkinter也提供了各种控制库用于绘制界
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年康复专科护士理论考试题
- 应急疫苗接种策略与效果评估
- 小儿保健知识课件
- 干细胞外泌体递送系统的优化策略
- 帕金森病DBS治疗中的神经递质变化
- 工作场所健康环境的设计标准
- 医疗保险创新模式探讨
- 妇幼保健护理工作重点与措施
- 医院临床诊疗沟通礼仪
- 医疗资源配置与医疗改革
- 中国数联物流2026届校园招聘50人考试题库及答案1套
- 2025年度眼科主任述职报告
- DB34∕T 5161-2025 机动车检验机构“舒心车检”服务规范
- 2025年山西大地环境投资控股有限公司社会招聘116人备考题库及答案详解参考
- 2026中国物流集团校园招聘参考笔试题库及答案解析
- 2026危险品物流行业成本控制与运营效率优化专项研究报告
- 总经理年度工作述职报告
- 本科院校实验员面试电子版题
- 线束厂现场管理制度(3篇)
- 黑龙江省哈尔滨香坊区五校联考2026届物理九上期末考试试题含解析
- 2025至2030全球与中国结冷胶行业市场规模分析及竞争策略与发展趋势分析与未来投资战略咨询研究报告
评论
0/150
提交评论