热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

飞桨开发者又出新工具!让AI也能听懂你的话

前言PPASR是飞桨社区开发者夜雨飘零开发的一款基于飞桨实现的语音识别工具,简单实用,可识别中文语音,可部署在服务器、NvidiaJets

72cc0af9eebb534a948bd2682aef5a01.png

前言

PPASR是飞桨社区开发者夜雨飘零开发的一款基于飞桨实现的语音识别工具,简单实用,可识别中文语音,可部署在服务器、Nvidia Jetson设备,未来还计划支持Android等移动设备。

使用环境:

  • Anaconda 3

  • Python 3.7

  • 飞桨PaddlePaddle核心框架2.2.0

  • Windows 10 or Ubuntu 18.04

源码地址:https://github.com/yeyupiaoling/PPASR

模型下载

本项目在各个公开数据集上的字错率见下表:

91e31fbcc599389b577a05d479a6ec36.png

说明:aishell数据集已经固定好训练数据和测试数据,其他数据集是按照项目设置的固定比例划分训练数据和测试数据。

快速预测

下载预训练模型或者自行训练模型,然后执行模型导出。

使用infer_path.py预测音频,通过参数--wav_path指定需要预测的音频路径,完成语音识别。

python infer_path.py --wav_path=./dataset/test.wav

输出结果:

-----------  Configuration Arguments -----------
alpha: 1.2
beam_size: 10
beta: 0.35
cutoff_prob: 1.0
cutoff_top_n: 40
decoding_method: ctc_greedy
enable_mkldnn: False
is_long_audio: False
lang_model_path: ./lm/zh_giga.no_cna_cmn.prune01244.klm
mean_std_path: ./dataset/mean_std.npz
model_dir: ./models/infer/
to_an: True
use_gpu: True
use_tensorrt: False
vocab_path: ./dataset/zh_vocab.txt
wav_path: ./dataset/test.wav

消耗时间:132, 识别结果: 近几年不但我用书给女儿儿压岁也劝说亲朋不要给女儿压岁钱而改送压岁书, 得分: 94

数据准备

本项目使用了公开的中文普通话语音数据集,分别是Aishell、Free ST-Chinese-Mandarin-Corpus和THCHS-30 ,总大小超过28G。只需执行以下代码即可下载数据集,如果想快速训练,也可以只下载其中一个。noise.py用于数据增强,如果不想使用噪声数据增强,可以不用下载。

cd download_data/ 
python aishell.py 
python free_st_chinese_mandarin_corpus.py 
python thchs_30.py
python noise.py

注意:以上代码只支持在Linux下执行,如果是Windows的话,可以获取程序中的DATA_URL单独下载,建议用迅雷等下载工具。然后把download()函数改为文件的绝对路径,如下。我把aishell.py的文件单独下载,然后替换download()函数,再执行该程序,就会自动解压文件文本生成数据列表。

# 把这行代码
filepath = download(url, md5sum, target_dir)
# 修改为
filepath = "D:\\Download\\data_aishell.tgz"

如果开发者有自己的数据集,可以使用自己的数据集进行训练,当然也可以跟上面下载的数据集一起训练。自定义的语音数据需要符合以下格式,本项目默认使用的音频的采样率是16000Hz,在create_data.py中也提供了统一音频数据的采样率转换为16000Hz,只要is_change_frame_rate参数设置为True就可以。

1)语音文件需要放在dataset/audio/目录下。

2)把数据列表文件存在dataset/annotation/目录下,程序会遍历这个文件下的所有数据列表文件。

dataset/audio/wav/0175/H0175A0171.wav   我需要把空调温度调到二十度 dataset/audio/wav/0175/H0175A0377.wav   出彩中国人 dataset/audio/wav/0175/H0175A0470.wav   据克而瑞研究中心监测 dataset/audio/wav/0175/H0175A0180.wav   把温度加大到十八

3)执行数据处理。该脚本将数据集生成三个JSON格式的数据列表,分别是manifest.test、manifest.train、manifest.noise。然后建立词汇表,把所有出现的字符都存放子在vocabulary.txt文件中,一行一个字符。最后计算均值和标准差用于归一化,默认使用全部的语音计算均值和标准差,并将结果保存在mean_std.npz中。

以上生成的文件都存放在dataset/目录下。数据划分说明,如果dataset/annotation存在test.txt,那全部测试数据都使用这个数据,否则使用全部数据的1/500的数据,直到指定的最大测试数据量。

python create_data.py

训练模型

执行训练脚本,开始训练语音识别模型。每训练一轮和每10000个batch都会保存一次模型,模型保存在models//epoch_*/目录下,默认会使用数据增强训练,如何不想使用数据增强,只需要将参数augment_conf_path设置为None即可。

# 单卡训练
python3 train.py
# 多卡训练
python -m paddle.distributed.launch --gpus '0,1' train.py

训练输出结果如下:

-----------  Configuration Arguments -----------
alpha: 2.2
augment_conf_path: conf/augmentation.json
batch_size: 32
beam_size: 300
beta: 4.3
cutoff_prob: 0.99
cutoff_top_n: 40
dataset_vocab: dataset/vocabulary.txt
decoder: ctc_greedy
lang_model_path: lm/zh_giga.no_cna_cmn.prune01244.klm
learning_rate: 5e-05
max_duration: 20
mean_std_path: dataset/mean_std.npz
min_duration: 0.5
num_epoch: 65
num_proc_bsearch: 10
num_workers: 8
pretrained_model: None
resume_model: None
save_model_path: models/
test_manifest: dataset/manifest.test
train_manifest: dataset/manifest.train
use_model: deepspeech2
------------------------------------------------
............
[2021-09-17 08:41:16.135825] Train epoch: [24/50], batch: [5900/6349], loss: 3.84609, learning rate: 0.00000688, eta: 10:38:40
[2021-09-17 08:41:38.698795] Train epoch: [24/50], batch: [6000/6349], loss: 0.92967, learning rate: 0.00000688, eta: 8:42:11
[2021-09-17 08:42:04.166192] Train epoch: [24/50], batch: [6100/6349], loss: 2.05670, learning rate: 0.00000688, eta: 10:59:51
[2021-09-17 08:42:26.471328] Train epoch: [24/50], batch: [6200/6349], loss: 3.03502, learning rate: 0.00000688, eta: 11:51:28
[2021-09-17 08:42:50.002897] Train epoch: [24/50], batch: [6300/6349], loss: 2.49653, learning rate: 0.00000688, eta: 12:01:30======================================================================
[2021-09-17 08:43:01.954403] Test batch: [0/65], loss: 13.76276, cer: 0.23105
[2021-09-17 08:43:07.817434] Test epoch: 24, time/epoch: 0:24:30.756875, loss: 6.90274, cer: 0.15213
======================================================================

在训练过程中,程序会使用VisualDL记录训练结果,可以通过以下的命令启动VisualDL。

visualdl --logdir=log --host=0.0.0.0

在浏览器上访问http://localhost:8040可以查看结果显示,如下图所示。

9d6cb6ffc3da46ad516fa591ce71bbde.png

评估

对模型进行评估,通过字符错误率来评价模型的性能,详细参数如下所示。

python eval.py --resume_model=models/deepspeech2/best_model

输出结果:

-----------  Configuration Arguments -----------
alpha: 2.2
batch_size: 32
beam_size: 300
beta: 4.3
cutoff_prob: 0.99
cutoff_top_n: 40
dataset_vocab: dataset/vocabulary.txt
decoder: ctc_beam_search
lang_model_path: lm/zh_giga.no_cna_cmn.prune01244.klm
mean_std_path: dataset/mean_std.npz
num_proc_bsearch: 10
num_workers: 8
resume_model: models/deepspeech2/best_model/
test_manifest: dataset/manifest.test
use_model: deepspeech2
------------------------------------------------
W0918 10:33:58.960235 16295 device_context.cc:404] Please NOTE: device: 0, GPU Compute Capability: 7.5, Driver API Version: 11.0, Runtime API Version: 10.2
W0918 10:33:58.963088 16295 device_context.cc:422] device: 0, cuDNN Version: 7.6.
100%|██████████████████████████████| 45/45 [00:09<00:00,  4.50it/s]
评估消耗时间&#xff1a;10s&#xff0c;字错率&#xff1a;0.095808

导出模型

将训练好的模型参数导出为预测模型&#xff0c;同时使用Inference接口可以加速预测&#xff0c;详细参数请查看该程序。

python infer_path.py --wav_path&#61;./dataset/test.wav

输出结果&#xff1a;

-----------  Configuration Arguments -----------
dataset_vocab: dataset/vocabulary.txt
mean_std_path: dataset/mean_std.npz
resume_model: models/deepspeech2/epoch_50
save_model: models/deepspeech2/
use_model: deepspeech2
------------------------------------------------

[2021-09-18 10:23:47.022243] 成功恢复模型参数和优化方法参数&#xff1a;

models/deepspeech2/epoch_50/model.pdparams

预测模型已保存&#xff1a;

models/deepspeech2/infer

本地预测

可以使用这个脚本进行预测&#xff0c;通过参数--wav_path指定需要预测的音频路径。支持中文数字转阿拉伯数字&#xff0c;将参数--to_an设置为True即可。

python infer_path.py --wav_path&#61;./dataset/test.wav

输出结果&#xff1a;

-----------  Configuration Arguments -----------
alpha: 2.2
beam_size: 300
beta: 4.3
cutoff_prob: 0.99
cutoff_top_n: 40
decoder: ctc_beam_search
is_long_audio: False
lang_model_path: lm/zh_giga.no_cna_cmn.prune01244.klm
model_dir: models/deepspeech2/infer/
real_time_demo: False
to_an: True
use_gpu: True
use_model: deepspeech2
vocab_path: dataset/vocabulary.txt
wav_path: ./dataset/test.wav
------------------------------------------------

消耗时间&#xff1a;101, 识别结果: 近几年不但我用书给女儿儿压岁也劝说亲朋不要给女儿压岁钱而改送压岁书, 得分: 94


长语音预测

通过参数--is_long_audio可以指定使用长语音识别方式&#xff0c;这种方式通过VAD分割音频&#xff0c;再对短音频进行识别&#xff0c;拼接结果&#xff0c;最终得到长语音识别结果。

python infer_path.py --wav_path&#61;./dataset/test_vad.wav --is_long_audio&#61;True

输出结果&#xff1a;

-----------  Configuration Arguments -----------
alpha: 2.2
beam_size: 300
beta: 4.3
cutoff_prob: 0.99
cutoff_top_n: 40
decoding_method: ctc_greedy
is_long_audio: 1
lang_model_path: ./lm/zh_giga.no_cna_cmn.prune01244.klm
model_dir: ./models/deepspeech2/infer/
to_an: True
use_gpu: True
vocab_path: ./dataset/zh_vocab.txt
wav_path: dataset/test_vad.wav
------------------------------------------------

16cf5ccce39440a08704f085bb55f98b.png

Web部署

在服务器执行以下命令通过创建一个Web服务&#xff0c;提供HTTP接口来实现语音识别。启动服务之后&#xff0c;如果在本地运行的话&#xff0c;在浏览器上访问http://localhost:5000&#xff0c;否则修改为对应的 IP地址。打开页面之后可以选择上传长音或者短语音音频文件&#xff0c;也可以在页面上直接录音&#xff0c;录音完成之后点击上传&#xff0c;播放功能只支持录音的音频。支持中文数字转阿拉伯数字&#xff0c;将参数--to_an设置为True即可&#xff0c;默认为True。

python infer_server.py

打开页面如下&#xff1a;

553345408127e7492b27d791a7098f52.png


GUI界面部署

在页面上选择长语音或者短语音进行识别&#xff0c;也支持录音识别&#xff0c;同时播放识别的音频。默认使用的是贪心解码策略&#xff0c;如果需要使用集束搜索方法的话&#xff0c;需要在启动参数的时候指定。

python infer_gui.py

打开界面如下&#xff1a;

b96df243c61e5ac2a6f60464cee74d78.png


相关项目

  • 基于飞桨框架实现的声纹识别&#xff1a;

    https://github.com/yeyupiaoling/VoiceprintRecognition-PaddlePaddle

  • 基于飞桨框架静态图实现的语音识别&#xff1a;

    https://github.com/yeyupiaoling/PaddlePaddle-DeepSpeech


参考资料

  • https://github.com/PaddlePaddle/PaddleSpeech

  • https://github.com/jiwidi/DeepSpeech-pytorch

  • https://github.com/wenet-e2e/WenetSpeech

035732f33116606cbb40fbb0875e5afd.gif

关注公众号&#xff0c;获取更多技术内容~


推荐阅读
  • 本文详细介绍了在Windows操作系统上使用Python 3.8.5编译支持CUDA 11和cuDNN 8.0.2的TensorFlow 2.3的步骤。文章不仅提供了详细的编译指南,还分享了编译后的文件下载链接,方便用户快速获取所需资源。此外,文中还涵盖了常见的编译问题及其解决方案,确保用户能够顺利进行编译和安装。 ... [详细]
  • 本文详细介绍了使用响应文件在静默模式下安装和配置Oracle 11g的方法。硬件要求包括:内存至少1GB,具体可通过命令`grep -i memtotal /proc/meminfo`进行检查。此外,还提供了详细的步骤和注意事项,确保安装过程顺利进行。 ... [详细]
  • 如何利用Python脚本实现钉钉自动化考勤打卡
    本文详细探讨了利用Python脚本实现钉钉自动化考勤打卡的方法。通过具体实例操作,解决了很多用户在实际应用中遇到的难题,帮助读者高效掌握这一实用技能。 ... [详细]
  • Python学习:环境配置与安装指南
    Python作为一种跨平台的编程语言,适用于Windows、Linux和macOS等多种操作系统。为了确保本地已成功安装Python,用户可以通过终端或命令行界面输入`python`或`python3`命令进行验证。此外,建议使用虚拟环境管理工具如`venv`或`conda`,以便更好地隔离不同项目依赖,提高开发效率。 ... [详细]
  • 深入解析Gradle中的Project核心组件
    在Gradle构建系统中,`Project` 是一个核心组件,扮演着至关重要的角色。通过使用 `./gradlew projects` 命令,可以清晰地列出当前项目结构中包含的所有子项目,这有助于开发者更好地理解和管理复杂的多模块项目。此外,`Project` 对象还提供了丰富的配置选项和生命周期管理功能,使得构建过程更加灵活高效。 ... [详细]
  • SQLmap自动化注入工具命令详解(第28-29天 实战演练)
    SQL注入工具如SQLMap等在网络安全测试中广泛应用。SQLMap是一款开源的自动化SQL注入工具,支持12种不同的数据库,具体支持的数据库类型可在其插件目录中查看。作为当前最强大的注入工具之一,SQLMap在实际应用中具有极高的效率和准确性。 ... [详细]
  • 深入解析:Android开发进阶之Vim编辑器基础操作与应用
    本文深入探讨了Android开发中使用Vim编辑器的基础操作与应用。通过详细解析Vim的基本命令、配置文件和常用插件,帮助开发者提高代码编写效率。文章还介绍了如何在Android开发环境中高效利用Vim,包括集成开发环境(IDE)的配置和常见问题的解决方法。适合初学者和有经验的开发者参考。 ... [详细]
  • 深入解析Wget CVE-2016-4971漏洞的利用方法与安全防范措施
    ### 摘要Wget 是一个广泛使用的命令行工具,用于从 Web 服务器下载文件。CVE-2016-4971 漏洞涉及 Wget 在处理特定 HTTP 响应头时的缺陷,可能导致远程代码执行。本文详细分析了该漏洞的成因、利用方法以及相应的安全防范措施,包括更新 Wget 版本、配置防火墙规则和使用安全的 HTTP 头。通过这些措施,可以有效防止潜在的安全威胁。 ... [详细]
  • 本文详细介绍了在Ubuntu操作系统中使用GDB调试工具深入分析和调试标准库函数`printf`的源代码过程。通过具体步骤和实例,展示了如何设置断点、查看变量值及跟踪函数调用栈,帮助开发者更好地理解`printf`函数的工作原理及其内部实现细节。 ... [详细]
  • PyQt5 QTextEdit:深入解析Python中多功能GUI库的应用与实现
    本文详细探讨了 PyQt5 中 QTextEdit 组件在 Python 多功能 GUI 库中的应用与实现。PyQt5 是 Qt 框架的 Python 绑定,提供了超过 620 个类和 6000 个函数及方法,广泛应用于跨平台应用程序开发。QTextEdit 作为其中的重要组件,支持丰富的文本编辑功能,如富文本格式、文本高亮和自定义样式等。PyQt5 的流行性不仅在于其强大的功能,还在于其易用性和灵活性,使其成为开发复杂用户界面的理想选择。 ... [详细]
  • 本文探讨了在PowerShell中高效管理和操作大规模内存对象的技术与实践。详细介绍了如何启用PowerShell的大内存支持功能,并提供了优化性能和减少资源消耗的具体方法。此外,还讨论了常见问题及其解决方案,旨在帮助用户在处理复杂数据集时提高效率和稳定性。 ... [详细]
  • Kali Linux 渗透测试实战指南:第24章 客户端安全威胁分析与防御策略
    客户端安全威胁分析与防御策略主要探讨了终端设备(如计算机、平板电脑和移动设备)在使用互联网时可能面临的各种安全威胁。本章详细介绍了这些设备如何作为信息和服务的提供者或接收者,以及它们在与服务器等其他系统交互过程中可能遇到的安全风险,并提出了有效的防御措施。 ... [详细]
  • PyFasterRCNN配置详解与优化指南
    本文主要讲解Faster-RCNN的配置过程,以及配置过程中遇到问题的解决方案。 1.下载工程gitclone--recursivehttps:github.comr ... [详细]
  • Jupyter 使用Anaconda 虚拟环境内核
    Anaconda虚拟环境中使用JupyterNotebook安装好Anaconda之后,进入AnacondaPrompt,创建虚拟环境, ... [详细]
  • 百度AI的2020
    百度AI的2020-世界的2020,是充满不确定性的变局之年;中国的2020,是团结一心、共克时艰、于变局中开新局的希望之年;百度AI的2020,是坚定信念,拥抱变化,践行“科技为 ... [详细]
author-avatar
mobiledu2502880253
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有