当前位置: 首页 > news >正文

Python工具箱系列(六十四)

语音识别(中)

上文介绍了SpeechRecognition第三方语音识别库,本文选择使用开源的paddlepaddle中的paddlespeech来进行语音识别。PaddleSpeech是all-in-one的语音算法工具箱,包含多种领先国际水平的语音算法与预训练模型。可以从中选择各种语音处理工具以及预训练模型,支持语音识别,语音合成,声音分类,声纹识别,标点恢复,语音翻译等多种功能,PaddleSpeechServer模块可帮助用户快速在服务器上部署语音服务。PaddleSpeech团队发表的论文An Easy-to-Use All-in-One Speech Toolkit入选NAACL2022,荣获NAACL2022 Best Demo Award。但是paddlespeech的安装非常容易出错,强烈建议使用一个干净的虚拟机/WSL进行安装,否则各类库之间的版本冲突非常难以解决,徒耗大量的时间与精力。以下是在一个新安装的ubuntu bionic上的安装过程。

sudo passwd root
su -
sed -i 's#http://security.ubuntu#https://repo.huaweicloud#g' /etc/apt/sources.list
sed -i 's#http://archive.ubuntu#https://repo.huaweicloud#g' /etc/apt/sources.list
sed -i 's#http://us.archive.ubuntu#https://repo.huaweicloud#g' /etc/apt/sources.list
sed -i 's#http://cn.archive.ubuntu#https://repo.huaweicloud#g' /etc/apt/sources.listapt update && apt upgrade -y
sudo apt autoremove --purge -y snapd# bionic
apt-get -y install git vim build-essential libssl-dev libffi-dev software-properties-common htop apt-filesudo apt install -y python3.8 python3.8-devsudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 2
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 3
sudo update-alternatives --config pythonsudo apt install -y python3-pip
sudo apt install -y python3-tk# 可以用下面的语句升级。
python -m pip install --upgrade pip# 如果升级缓慢,也可以上传WHL后,直接安装,这样更快
python -m pip install --upgrade pip-22.2.2-py3-none-any.whlpip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
pip install --upgrade setuptoolspython -m pip install paddlepaddle==2.3.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pytest-runner# 一定要先安装这个
pip install PyYAML -U --ignore-installed
pip install paddlespeechapt install -y sox
apt install -y portaudio19-dev
apt install -y ffmpeg
pip install pyaudio
pip install pydub
pip install moviepy
pip install colorama

以上安装脚本中,重点有:

  • 先安装paddlepaddle 2.3.2版本。这是paddlespeech的基础

  • 在安装paddlespeech前,务必先安装PyYAML

  • sox是一个处理音频文件的命令行文件

  • ffmpeg是各类音视频处理库的基础

  • 模型不是预先下载的,在首次执行时,会自动下载,需要消耗时间,但后续不再重复下载

  • 可以自己训练模型

paddlespeech自身也是一个命令行程序。在进行语音识别前,需要先将音频文件转换成为采样率为16000单声道文件。以下命令可以完成上述前置预处理要求。

# 前置处理,生成单声道16K采样率的语音文件
sox input.wav --rate 16k --bits 16 --channels 1 output_audio.wav# 语音识别
paddlespeech asr --lang zh --input output_audio.wav

下述代码演示了使用paddlespeech进行翻译、语音识别的过程。

from paddlespeech.cli.asr.infer import ASRExecutor
from paddlespeech.cli.st.infer import STExecutor
import paddle
from paddlespeech.cli.asr import ASRExecutor
from paddlespeech.cli.text import TextExecutordef stt_paddlespeech(audiofilename,lang=None):"""对音频文件进行语音识别Args:audiofilename (string): 音频文件Returns:string: 翻译的文字"""asr = ASRExecutor()result = asr(audio_file=audiofilename)# 输出识别的结果return resultdef trans_paddlespeech(audiofilename):"""对语音进行翻译,例如将英语翻译成为中文Args:audiofilename (string): 音频文件Returns:string: 翻译的文字"""st = STExecutor()result = st(audio_file=audiofilename)return resultdef subtitle(audiofilename):"""对语音进行文字识别,并且使用标点符号进行标注Args:audiofilename (string): 音频文件Returns:string: 文字识别结果"""asr_executor = ASRExecutor()text_executor = TextExecutor()text = asr_executor(audio_file=audiofilename,device=paddle.get_device())result = text_executor(text=text,task='punc',model='ernie_linear_p3_wudao',device=paddle.get_device())print('Text Result: \n{}'.format(result))return result print('test-----------')
# 进行翻译的测试
targetwav = '/root/test/stt/en.wav'
print(trans_paddlespeech(targetwav))# 对中文语音进行识别
targetwav = '/root/test/stt/zh.wav'
print(stt_paddlespeech(targetwav))# 两种识别的方法
print(stt_paddlespeech('/root/test/stt/beijin-cut.wav'))
subtitle('/root/test/stt/beijin-cut.wav')

以上代码的输出结果如下。

test-----------
2022-08-28 10:19:48.034 | INFO     | paddlespeech.s2t.models.u2_st.u2_st:_init_from_config:585 - U2 Encoder type: transformer
2022-08-28 10:19:48.562 | INFO     | paddlespeech.s2t.models.u2_st.u2_st:_init_from_config:600 - ASR Joint Training Weight: 0.5
['我 在 这栋 建筑 的 古老 门上 敲门 。']
2022-08-28 10:20:04.527 | INFO     | paddlespeech.s2t.modules.embedding:__init__:153 - max len: 5000
我认为跑步最重要的就是给我带来了身体健康
2022-08-28 10:20:14.530 | INFO     | paddlespeech.s2t.modules.embedding:__init__:153 - max len: 5000
超越动物欲望总和的每一位毕业生都因做自己尊重的人过去现在将来能够完全知道个人行为和思想的只有自己世界上很多文化借助于宗教信仰指导人们生活的信念和世俗的行为而对于无神论者也就是大多数中国人来说自我尊重可能是重要的正道在你们加入社会后看到各种离奇的现象知道自己更多的弱点和缺陷可能还遇到
2022-08-28 10:20:39.290 | INFO     | paddlespeech.s2t.modules.embedding:__init__:153 - max len: 5000
[2022-08-28 10:21:20,056] [    INFO] - Already cached /root/.paddlenlp/models/ernie-1.0/vocab.txt
[2022-08-28 10:21:20,111] [    INFO] - tokenizer config file saved in /root/.paddlenlp/models/ernie-1.0/tokenizer_config.json
[2022-08-28 10:21:20,111] [    INFO] - Special tokens file saved in /root/.paddlenlp/models/ernie-1.0/special_tokens_map.json
Text Result: 
超越动物欲望总和的每一位毕业生,都因做自己尊重的人。过去,现在,将来能够完全知道个人行为和思想的只有自己。世界上很多文化借助于宗教信仰指导人们生活的信念和世俗的行为。而对于无神论者,也就是大多数中国人来说,自我尊重可能是重要的正道。在你们加入社会后,看到各种离奇的现象,知道自己更多的弱点和缺陷,可能还遇到。

从输出结果可以看出来。

  • 同样一段语音,subtitle函数不仅能够语音识别,形成文字,而且还可以正确的加入标点符号

  • paddlespeech处理音频的最大长度为50秒(5000ms)

  • paddlespeech能够离线部署

如果要生成类似于字幕的结果,必须要对语音进行合理的分割。一般电影的长度都在90分钟左右,直接调用paddlespeech是不可能的。为此,下一篇文件将讨论如何进行分割。

http://www.dtcms.com/a/333256.html

相关文章:

  • go语言运算符·关系运算符
  • sql CURRENT_TIMESTAMP
  • 【DSP28335 事件驱动】唤醒沉睡的 CPU:外部中断 (XINT) 实战
  • java注释功能
  • ESP32-C3_TCP
  • Linux操作系统从入门到实战(二十二)命令行参数与环境变量
  • 信刻光盘摆渡系统案例——某省纪委
  • 微服务容错与监控体系设计
  • 生存主义:隐形异变 (Survivalist: Invisible Strain)免安装中文版
  • Leetcode 最小生成树系列(1)
  • 解决zabbix图片中文乱码
  • Mac(二)Homebrew 的安装和使用
  • 前端更改浏览器默认滚动条样式
  • 716SJBH高职院校财务收费系统的设计与实现
  • 25. 移动端-uni-app
  • 【论文解读】DDRNet:深度双分辨率网络在实时语义分割中的结构与原理全面剖析
  • LeetCode 905.按奇偶排序数组
  • 【机器学习深度学习】客观评估主观评估:落地场景权重比例
  • Rust 中 i32 与 *i32 的深度解析
  • 大华相机RTSP无法正常拉流问题分析与解决
  • flume实战:从零配置到启动运行的完整指南
  • 【Ubuntu 中安全删除 Windows 分区并优化磁盘空间利用】
  • redis-sentinel基础概念及部署
  • 机械学习---- PCA 降维深度解析
  • Vue响应式系统在超大型应用中的性能瓶颈
  • 深度学习实战115-基于Qwen3的多智能体协同深度数据分析:架构、流程与实现
  • 光伏工单智能管理,故障处理快人一步
  • 金融业务安全增强方案:国密SM4/SM3加密+硬件加密机HSM+动态密钥管理+ShardingSphere加密
  • 不同DuckDB插件对不同工具生成的xlsx文件读取速度的比较
  • sqlsever的sql转postgresql的sql的方言差异