摘自百度百科
语音识别技术,也被称为自动语音识别(Automatic Speech Recognition,ASR),其目标是将人类的语音中的词汇内容转换为计算机可读的输入,例如按键、二进制编码或者字符序列。与说话人识别及说话人确认不同,后者尝试识别或确认发出语音的说话人而非其中所包含的词汇内容。
语音识别是深度学习领域之一, 在 github 上也有很多项目实现 ASR, 支持中文 ASR 的部分项目如下,下面会演示简单使用
PaddleSpeech 是基于飞桨 PaddlePaddle 的语音方向的开源模型库,用于语音和音频中的各种关键任务的开发,包含大量基于深度学习前沿和有影响力的模型。
PaddleSpeech 荣获 NAACL2022 Best Demo Award, 请访问 Arxiv 论文。
根据官方文档安装即可: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
这个问题等我再次运行就消失了
报找不到文件错误:
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
使用自己录音的两个例子测试,发现很精确。
除了语音识别,还支持更多功能
paddlespeech cls --input input.wav
paddlespeech vector --task spk --input input_16k.wav
paddlespeech st --input input_16k.wav
paddlespeech tts --input "你好,欢迎使用百度飞桨深度学习框架!" --output output.wav
发现 “你好,aabond, 欢迎使用百度飞桨” 其中 aabond 并没有语音,猜测并不能合成英文,可能需要提供其它参数
paddlespeech text --task punc --input 今天的天气真不错啊你下午有空吗我想约你一起去吃饭
ASRT 是一个基于深度学习的中文语音识别系统,使用 tensorFlow.keras 基于深度卷积神经网络和长短时记忆神经网络、注意力机制以及CTC 实现。
下载服务端,安装依赖
$ pip install tensorflow==2.5.2
$ pip install wave
$ pip install matplotlib
$ pip install requests
$ pip install scipy
$ pip install flask
$ pip install waitress
下载客户端
python asrserver_http.py
使用百度demo 作为例子,能够正确显示
使用自己录音作为例子,“说话的艺术”被识别为“上”,并不能正确显示,难道是因为我说话太快?应该需要训练数据
MASR 是一个基于端到端的深度神经网络的中文普通话语音识别项目.
MASR 使用的是门控卷积神经网络(Gated Convolutional Network),网络结构类似于 Facebook 在2016年提出的 Wav2letter 。但是使用的激活函数不是 ReLU
或者是 HardTanh
,而是GLU
(门控线性单元)。因此称作门控卷积网络。根据我的实验,使用GLU
的收敛速度比 HardTanh
要快。如果你想要研究卷积网络用于语音识别的效果,这个项目可以作为一个参考。
下载源码,下载预训练模型数据,在源码目录下新建一个 pretrained 目录, 并将模型文件放入其中
python examples/demo-record-recognize.py
识别结果:
“说话的艺术” 识别为 “说化和一数”
“只因你太美” 识别为 “只因里派云”
ESPnet:端到端语音处理工具包,涵盖了端到端语音识别、文本到语音、语音翻译、语音增强、说话者二值化、口语理解等。ESPnet 使用 pytorch 作为深度学习引擎,并遵循 Kaldi 风格的数据处理、特征提取/格式和配方,为各种语音处理实验提供一个完整的设置。
pip install espnet
pip install espnet_model_zoo
pip install kenlm
运行下面代码,可能下载速度太慢,可手动下载中文模型数据,放在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 能够正确识别
测试自己录音demo, “说话的艺术” 识别为 “说话的约束”
Wenet是出门问问语音团队联合西工大语音实验室开源的一款面向工业落地应用的语音识别工具包,该工具用一套简洁的方案提供了语音识别从训练到部署的一条龙服务,其主要特点如下:
pip install wenetruntime
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测试,很精确
使用自己录音声音测试,报错如下:
应该是只能输入单声道,而我录音的是双声道。解决方法:使用 Audacity 录音,并将声道改为单声道,并将采样频率修改为 16000 HZ,编码器默认不变,否则会出现下面的错误
最终结果,还是很精确的。
DeepSpech 是一个开源的语音到文本( Speech-To-Text, STT )引擎,使用了基于百度深度语音研究论文的机器学习技术训练的模型。深度语音项目使用谷歌的Tensorflow,使实现更容易。
pip install deepspeech
下载中文模型:deepspeech-0.9.3-models-zh-CN.pbmm,deepspeech-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 测试,有误差
使用自己录音,“说话的艺术” 识别为 “兰花的一杯”
使用 deepspeech 自带数据测试 “他有两个哥哥” 识别为 “会有两个哥哥”