前言

摘自百度百科

语音识别技术,也被称为自动语音识别(Automatic Speech Recognition,ASR),其目标是将人类的语音中的词汇内容转换为计算机可读的输入,例如按键、二进制编码或者字符序列。与说话人识别及说话人确认不同,后者尝试识别或确认发出语音的说话人而非其中所包含的词汇内容。

语音识别是深度学习领域之一, 在 github 上也有很多项目实现 ASR, 支持中文 ASR 的部分项目如下,下面会演示简单使用

  1. https://github.com/PaddlePaddle/PaddleSpeech
  2. https://github.com/nl8590687/ASRT_SpeechRecognition
  3. https://github.com/nobody132/masr
  4. https://github.com/espnet/espnet
  5. https://github.com/wenet-e2e/wenet
  6. https://github.com/mozilla/DeepSpeech

一、PaddleSpeech

PaddleSpeech 是基于飞桨 PaddlePaddle 的语音方向的开源模型库,用于语音和音频中的各种关键任务的开发,包含大量基于深度学习前沿和有影响力的模型。

PaddleSpeech 荣获 NAACL2022 Best Demo Award, 请访问 Arxiv 论文。

1.1 安装

根据官方文档安装即可:https://github.com/PaddlePaddle/PaddleSpeech/blob/develop/README_cn.md#%E5%AE%89%E8%A3%85

官方强烈建议用户在 Linux 环境下,3.7 以上版本的 python 上安装 PaddleSpeech。

但是我电脑是 windows , 而且 python 版本为 3.6.5。选择在windows 下安装 python 3.7.0 版本:https://www.python.org/downloads/windows/,安装过程中报以下错误

pip install paddlespeech

问题一:paddlespeech-ctcdecoders 版本错误

 Could not find a version that satisfies the requirement paddlespeech-ctcdecoders (from paddlespeech) (from versions: )
No matching distribution found for paddlespeech-ctcdecoders (from paddlespeech)

发现 paddlespeech-ctcdecoders 并没有 windows 版本,而且发现已经有人编译windows 版本了,初次编译paddlespeech-ctcdecoders的windows版本,不过官方提示:paddlespeech-ctcdecoders 没有安装成功不要紧,这个包不是必须的。

问题二:gbk 编码错误

UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 5365: illegal multibyte sequence

这个问题等我再次运行就消失了

1.2 运行

报找不到文件错误:

FileNotFoundError: [WinError 2] 系统找不到指定的文件。

打开 Python\Python37\lib\subprocess.py 文件,在684行将 shell=False 改为 shell=True

    _child_created = False  # Set here since __del__ checks it

    def __init__(self, args, bufsize=-1, executable=None,
                 stdin=None, stdout=None, stderr=None,
                 preexec_fn=None, close_fds=True,
                 shell=True, cwd=None, env=None, universal_newlines=None,
                 startupinfo=None, creationflags=0,
                 restore_signals=True, start_new_session=False,
                 pass_fds=(), *, encoding=None, errors=None, text=None):

使用官方的例子测试:

paddlespeech asr --lang zh --input C:\Users\supre\Desktop\sound\PaddleSpeech-develop\zh.wav

paddle_zh_demo_baidu

使用自己录音的两个例子测试,发现很精确。

paddle_zh_demo_1

paddle_zh_demo_2

1.3 更多功能

除了语音识别,还支持更多功能

  1. 声音分类
paddlespeech cls --input input.wav
  1. 声纹识别
paddlespeech vector --task spk --input input_16k.wav
  1. 语音翻译(英-中)(暂不支持 Windows 系统)
paddlespeech st --input input_16k.wav
  1. 语音合成
paddlespeech tts --input "你好,欢迎使用百度飞桨深度学习框架!" --output output.wav

发现 “你好,aabond, 欢迎使用百度飞桨” 其中 aabond 并没有语音,猜测并不能合成英文,可能需要提供其它参数
在这里插入图片描述

  1. 标点恢复
paddlespeech text --task punc --input 今天的天气真不错啊你下午有空吗我想约你一起去吃饭

二、ASRT

ASRT 是一个基于深度学习的中文语音识别系统,使用 tensorFlow.keras 基于深度卷积神经网络和长短时记忆神经网络、注意力机制以及CTC 实现。

2.1 安装

下载服务端,安装依赖

$ pip install tensorflow==2.5.2
$ pip install wave
$ pip install matplotlib
$ pip install requests
$ pip install scipy
$ pip install flask
$ pip install waitress

下载客户端

2.2 运行

python asrserver_http.py

使用百度demo 作为例子,能够正确显示

asrt_zh_demo_1

使用自己录音作为例子,“说话的艺术”被识别为“上”,并不能正确显示,难道是因为我说话太快?应该需要训练数据

asrt_zh_demo_2

还可以实时语音识别,发现精确度一般
asrt_zh_demo_3

三、MASR

MASR 是一个基于端到端的深度神经网络中文普通话语音识别项目.

MASR 使用的是门控卷积神经网络(Gated Convolutional Network),网络结构类似于 Facebook 在2016年提出的 Wav2letter 。但是使用的激活函数不是 ReLU 或者是 HardTanh,而是GLU(门控线性单元)。因此称作门控卷积网络。根据我的实验,使用GLU的收敛速度比 HardTanh 要快。如果你想要研究卷积网络用于语音识别的效果,这个项目可以作为一个参考。

3.1 安装

下载源码,下载预训练模型数据,在源码目录下新建一个 pretrained 目录, 并将模型文件放入其中

3.2 运行

python examples/demo-record-recognize.py

识别结果:

“说话的艺术” 识别为 “说化和一数”

masr_zh_demo_1

“只因你太美” 识别为 “只因里派云”

masr_zh_demo_2

四、ESPnet

ESPnet:端到端语音处理工具包,涵盖了端到端语音识别、文本到语音、语音翻译、语音增强、说话者二值化、口语理解等。ESPnet 使用 pytorch 作为深度学习引擎,并遵循 Kaldi 风格的数据处理、特征提取/格式和配方,为各种语音处理实验提供一个完整的设置。

4.1 安装

pip install espnet
pip install espnet_model_zoo
pip install kenlm

4.2 运行

运行下面代码,可能下载速度太慢,可手动下载中文模型数据,放在Python安装路径 Python36\Lib\site-packages\espnet_model_zoo\a1dd2b872b48358daa6e136d4a5ab08b下面,加快速度

import soundfile
from espnet_model_zoo.downloader import ModelDownloader
from espnet2.bin.asr_inference import Speech2Text
d = ModelDownloader()
speech2text = Speech2Text(
**d.download_and_unpack("kamo-naoyuki/aishell_conformer"),
    # Decoding parameters are not included in the model file
    maxlenratio=0.0,
    minlenratio=0.0,
    beam_size=20,
    ctc_weight=0.3,
    lm_weight=0.5,
    penalty=0.0,
    nbest=1
)
audio, rate = soundfile.read("zh.wav")
nbests = speech2text(audio)
text, *_ = nbests[0]
print(text)

可发现百度demo 能够正确识别

espnet_zh_demo_1

测试自己录音demo, “说话的艺术” 识别为 “说话的约束”

espnet_zh_demo_2

五、WeNet

Wenet是出门问问语音团队联合西工大语音实验室开源的一款面向工业落地应用的语音识别工具包,该工具用一套简洁的方案提供了语音识别从训练到部署的一条龙服务,其主要特点如下:

  • 使用 conformer 网络结构和 CTC/attention loss 联合优化方法,具有业界一流的识别效果。
  • 提供云上和端上直接部署的方案,最小化模型训练和产品落地之间的工程工作。
  • 框架简洁,模型训练部分完全基于pytorch生态,不依赖于kaldi等安装复杂的工具。
  • 详细的注释和文档,十分适合用于学习端到端语音识别的基础知识和实现细节。

5.1 安装

pip install wenetruntime

5.2 运行

import sys
import wenetruntime as wenet

wav_file = sys.argv[1]
decoder = wenet.Decoder(lang='chs')
ans = decoder.decode_wav(wav_file)
print(ans)

如果下载文件太慢,可通过手动下载 文件到 C:\Users\supre\.wenet\chs 目录下,记住要解压 chs.tar.gz,而不要再解压 final.zip。

使用百度demo测试,很精确

wenet_zh_demo_1

使用自己录音声音测试,报错如下:

wenet_error_1

应该是只能输入单声道,而我录音的是双声道。解决方法:使用 Audacity 录音,并将声道改为单声道,并将采样频率修改为 16000 HZ,编码器默认不变,否则会出现下面的错误
wenet_error_2

最终结果,还是很精确的。

wenet_zh_demo_2

六、DeepSpeech

DeepSpech 是一个开源的语音到文本( Speech-To-Text, STT )引擎,使用了基于百度深度语音研究论文的机器学习技术训练的模型。深度语音项目使用谷歌的Tensorflow,使实现更容易。

6.1 安装

pip install deepspeech

6.2 运行

下载中文模型:deepspeech-0.9.3-models-zh-CN.pbmmdeepspeech-0.9.3-models-zh-CN.scorer

deepspeech --model deepspeech-0.9.3-models-zh-CN.pbmm --scorer deepspeech-0.9.3-models-zh-CN.scorer --audio zh.wav

使用 百度 demo 测试,有误差

deepspeeh_zh_demo_1

使用自己录音,“说话的艺术” 识别为 “兰花的一杯”

deepspeeh_zh_demo_2

使用 deepspeech 自带数据测试 “他有两个哥哥” 识别为 “会有两个哥哥”

deepspeeh_zh_demo_3

参考

  1. import paddle 遇到错误
  2. 教你如何使用ASRT部署中文语音识别API服务器
  3. Wenet - 面向工业落地的E2E语音识别工具
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐