深度学习应用-WeNet语音识别实战01

概括

        本文对WeNet声音识别网络的Python API上介绍的Non-Streaming Usage和 Streaming-Usage分别做了测试,两者本质相同。API对应采样的声音帧率、声道都做了限制。效果还可以,但是部分吐字不清晰、有歧义的地方仍然不能识别清晰。

项目地址:

GitHub - wenet-e2e/wenet: Production First and Production Ready End-to-End Speech Recognition Toolkit

安装:

pip3 install wenetruntime

根据项目要求,python版本必须3.6+,这里为3.8.3, 因此没有问题

应用案例:

官方文档上分为非流式和流式两种,本次先演示非流式应用:

非流式:

第一步:压缩wav文件,根据测试,api使用wave库打开文件。且仅支持单声道、固定帧率。

import wave
with wave.open(wav_file, 'rb') as fin:
    assert fin.getnchannels() == 1
    assert fin.getsampwidth() == 2
    assert fin.getframerate() == 16000

第二步:我准备用来识别的《起风了》wav格式显然不符合要求,使用pydub来压缩帧率、合并为单声道。同时,文件太长也不行。例如全歌一起识别会报错,因此我这里切割,每次取十分之一的歌词内容(约28秒的内容)

# 压缩文件
from pydub import AudioSegment
sound = AudioSegment.from_wav("/root/jupyterprojects/data/起风了.wav")

# 双声道变为单声道
sound = sound.set_channels(1)

# 压缩帧率
sound = sound.set_frame_rate(16000)

# 长度太长了可能会塞爆,每次取十分之一
musicLen = len(sound) 
unitLen = musicLen / 10

for i in range(10):
    _sound = sound[unitLen*i:unitLen*(i+1)]
    _sound.export("/root/jupyterprojects/data/起风了-sub%s.wav" % i, format="wav")

第三步:加载模型、识别。如果不提供model_dir参数,则默认会从github上下载。包比较大,建议提前下载好。

import sys
import torch
import wenetruntime as wenet
# 下载https://github.com/wenet-e2e/wenet/releases/download/v2.0.1/chs.tar.gz
# 并解压缩到/root/.wenet/chs目录下
decoder = wenet.Decoder(model_dir="/root/.wenet/chs/chs/",lang='chs')

第四步:识别。

decoder.decode_wav函数返回一个可以转换为字典的字符串。

import glob
files = glob.glob("/root/jupyterprojects/data/起风了-sub?.wav")
for idx,file in enumerate(files):
    ans=eval(decoder.decode_wav(file))
    print(idx,": ", ans["nbest"][0]["sentence"])

 正确的歌词:

我曾将青春翻涌成她
也曾指尖弹出盛夏
心之所动 且就随缘去吧

这一路上走走停停
顺着少年漂流的痕迹
迈出车站的前一刻
竟有些犹豫
不禁笑这近乡情怯
仍无可避免
而长野的天
依旧那么暖
风吹起了从前
从前初识这世间

万般流连
看着天边似在眼前
也甘愿赴汤蹈火去走它一遍
如今走过这世间
万般流连
翻过岁月不同侧脸
措不及防闯入你的笑颜
我曾难自拔于世界之大
也沉溺于其中梦话
不得真假 不做挣扎 不惧笑话
我曾将青春翻涌成她
也曾指尖弹出盛夏
心之所动 且就随缘去吧
逆着光行走 任风吹雨打
短短的路走走停停
也有了几分的距离
不知抚摸的是故事 还是段心情
也许期待的不过是 与时间为敌
再次看到你
微凉晨光里
笑得很甜蜜
从前初识这世间
万般流连
看着天边似在眼前
也甘愿赴汤蹈火去走它一遍
如今走过这世间
万般流连
翻过岁月不同侧脸
措不及防闯入你的笑颜
我曾难自拔于世界之大
也沉溺于其中梦话
不得真假 不做挣扎 不惧笑话
我曾将青春翻涌成她
也曾指尖弹出盛夏
心之所动 且就随缘去吧
晚风吹起你鬓间的白发
抚平回忆留下的疤
你的眼中 明暗交杂 一笑生花
暮色遮住你蹒跚的步伐
走进床头藏起的画
画中的你 低着头说话
我仍感叹于世界之大
也沉醉于儿时情话
不剩真假 不做挣扎 无谓笑话
我终将青春还给了她
连同指尖弹出的盛夏
心之所动 就随风去了
以爱之名 你还愿意吗

其实还可以,有些歌词吐字本身就不是很清晰。

流式应用(Streaming Usage)

这是官方文档给出的应用案例,看起来我这里的切割歌曲法并没有什么异同,略。

import sys
import torch
import wave
import wenetruntime as wenet

test_wav = sys.argv[1]

with wave.open(test_wav, 'rb') as fin:
    assert fin.getnchannels() == 1
    wav = fin.readframes(fin.getnframes())

decoder = wenet.Decoder(lang='chs')
# We suppose the wav is 16k, 16bits, and decode every 0.5 seconds
interval = int(0.5 * 16000) * 2
for i in range(0, len(wav), interval):
    last = False if i + interval < len(wav) else True
    chunk_wav = wav[i: min(i + interval, len(wav))]
    ans = decoder.decode(chunk_wav, last)
    print(ans)

为了确定两者本质没有区别,这里查看API源代码. 可以看到decode_wav 就是相当于帮你用wave库打开wav文件并传递给decode方法。

 

<think>好的,我现在需要帮助用户了解如何开发语音识别相关的应用程序,特别是使用的框架和工具。首先,我要回顾一下用户提供的引用内容,确保回答准确且有依据。 用户提供的引用[1]提到了深度神经网络(DNN)在语音识别中的应用,以及从HMM、GMM到深度学习的演变。引用[2]提到有实战案例教程和常用开发实战,可能涉及具体工具和编程技能。引用[3]则提到使用百度语音识别SDK的案例。这些信息都是关键点,需要整合到回答中。 接下来,我需要确定用户的需求是开发语音识别APP的教程,涉及框架和工具。可能用户是开发者,有一定的编程基础,但需要指导选择合适的工具和流程。因此,回答需要结构清晰,分步骤说明,并推荐具体的工具和框架。 首先,开发流程一般包括音频采集、预处理、特征提取、模型处理和后处理。每个步骤需要对应的工具或框架。例如,音频采集可以使用Android的AudioRecord或iOS的AVFoundation。预处理可能需要LibROSA。特征提取方面,MFCC是常用方法,可以用Python库处理。模型方面,深度学习框架如TensorFlow、PyTorch,或者使用云服务如百度、Google的API。 然后,根据引用内容,百度SDK是一个实例,应该提到。同时,引用[1]中的DNN和RNN需要涵盖,可能提到Kaldi、ESPnet等开源工具。引用[2]中的实战案例可能涉及具体编程技能,所以需要给出代码示例,如Python调用百度API的步骤。 还要注意用户可能关心本地模型部署与云端API的对比,因此需要分点说明两者的优缺点,帮助用户选择适合的方案。此外,提供学习资源如Kaldi教程、书籍和在线课程,符合引用[2]提到的资料覆盖核心知识。 最后,生成相关问题,引导用户深入探索,如优化识别准确率、本地模型训练、多语种支持等,这些都是开发中常见的问题,能帮助用户进一步学习。 需要确保回答符合格式要求:使用中文,行内公式用$...$,独立公式用$$...$$,但当前问题可能涉及较少数学公式,但如果有的话要注意格式。例如,提到MFCC时可能需要公式,但用户问题更偏向应用,可能不需要深入数学细节,所以可能可以省略,但如果有必要,可以简要提到。 检查引用标记是否正确,每个引用来源在回答末尾自然标注,如百度语音API[^3],Kaldi[^1]等。确保没有使用未引用的内容,并且引用编号正确对应。 总结回答结构: 1. 开发流程概述 2. 常用框架与工具(分云端API和本地模型) 3. 开发步骤示例(如百度API的使用) 4. 学习资源推荐 5. 相关问题生成 这样结构清晰,逐步引导用户了解开发所需的工具和步骤,同时结合引用内容,确保信息可靠。</think>### 语音识别应用开发教程:框架与工具指南 #### 一、开发流程与核心技术 语音识别应用开发通常包含以下步骤: 1. **音频采集**:通过设备麦克风获取原始语音信号 2. **预处理**:降噪、分帧、端点检测等处理(常用工具:$LibROSA$) 3. **特征提取**:提取MFCC(梅尔频率倒谱系数)等特征 4. **声学模型**:将特征映射为音素/字符(常用DNN、RNN、Transformer) 5. **语言模型**:结合上下文优化识别结果(N-gram、神经网络语言模型) 6. **后处理**:文本校正、标点预测等 #### 二、主流开发框架与工具 **云端API方案(快速入门):** 1. **百度语音识别API** - 支持实时语音识别、长语音识别 - 提供Android/iOS SDK及REST API - 示例代码: ```python from aip import AipSpeech APP_ID = 'your_app_id' client = AipSpeech(APP_ID, 'your_api_key', 'your_secret_key') # 识别本地语音文件 with open('audio.pcm', 'rb') as f: res = client.asr(f.read(), 'pcm', 16000, {'dev_pid': 1536}) print(res['result'][0]) # ``` 2. **其他云服务** - 阿里云智能语音交互 - 科大讯飞开放平台 - Google Cloud Speech-to-Text **本地化部署方案(高阶开发):** 1. **深度学习框架** - TensorFlow/PyTorch:用于自定义模型训练 - 开源工具包: - Kaldi(传统HMM-DNN混合系统)[^1] - ESPnet(端到端语音识别- DeepSpeech(基于RNN的端到端系统) 2. **优化工具** - ONNX Runtime:模型部署加速 - TensorRT:NVIDIA GPU加速推理 #### 三、开发环境搭建建议 1. **基础环境** - Python 3.8+(推荐Anaconda) - C++编译环境(如需性能优化) - Android Studio/Xcode(移动端开发) 2. **关键依赖库** ```bash pip install librosa # 音频处理 pip install tensorflow # 模型训练 pip install pyaudio # 实时录音 ``` #### 四、学习资源推荐 1. **Kaldi官方文档**(适合研究底层算法) 2. 《语音识别实践》书籍(含完整项目案例) 3. Coursera《深度学习语音识别》课程(理论+实践)[^2] 4. GitHub开源项目: - Mozilla DeepSpeech - wenet语音识别工具包 #### 五、性能优化方向 - 使用WebSocket实现实时语音流传输 - 结合$N-gram$语言模型提升识别准确率 - 采用量化技术压缩模型大小
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值