我试了一下paddlespeech里面用的模型效果很好,但是本身缺少方便使用的教程。所以还是写一下,并分享出来,让这个工具使用的人更多些。

安装

paddle框架安装

conda install paddlepaddle==2.3.0 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/

软件源安装

pip install paddlespeech -i https://pypi.tuna.tsinghua.edu.cn/simple

源码安装

git clone https://github.com/PaddlePaddle/PaddleSpeech.git
cd PaddleSpeech
pip install . -i https://pypi.tuna.tsinghua.edu.cn/simple

快速使用

下载测试使用的音频

wget -c https://paddlespeech.bj.bcebos.com/PaddleAudio/zh.wav
wget -c https://paddlespeech.bj.bcebos.com/PaddleAudio/en.wav

非流式命令行接口(CLI)

使用默认模型

paddlespeech asr --input zh.wav

指定模型

paddlespeech asr --model conformer_online_wenetspeech --input zh.wav

非流式Server服务

切换路径进入speech_server目录

cd PaddleSpeech/demos/speech_server

启动服务

paddlespeech_server start --config_file ./conf/application.yaml

通过客户端程序访问

paddlespeech_client asr --server_ip 127.0.0.1 --port 8090 --input ./zh.wav

流式Server服务

切换路径进入streaming_asr_server目录

cd PaddleSpeech/demos/streaming_asr_server

启动服务

paddlespeech_server start --config_file ./conf/ws_conformer_wenetspeech_application.yaml

通过客户端程序访问

paddlespeech_client asr_online --server_ip 127.0.0.1 --port 8090 --input ./zh.wav

指令详解

打印paddlespeech_server支持的命令

paddlespeech_server help

输出:

Usage:
paddlespeech_server <command> <options> Commands:
help Show help for commands.
start Start the service
stats Get the models supported by each speech task in the service.

paddlespeech_server启动服务

只有两个可配置的参数--config_file和--log_file,分别指定了server应当加载的配置和产生log存放的位置。

paddlespeech_server start --config_file <path> --log_file <path>

paddlespeech_server查看支持的预训练模型

通过参数--task选择当前任务所支持的预训练模型

paddlespeech_server stats --task asr

输出

Here is the table of ASR pretrained models supported in the service.
+--------------------------------+----------+-------------+
| Model | Language | Sample Rate |
+--------------------------------+----------+-------------+
| conformer_wenetspeech | zh | 16k |
| conformer_online_wenetspeech | zh | 16k |
| conformer_online_multicn | zh | 16k |
| conformer_aishell | zh | 16k |
| conformer_online_aishell | zh | 16k |
| transformer_librispeech | en | 16k |
| deepspeech2online_wenetspeech | zh | 16k |
| deepspeech2offline_aishell | zh | 16k |
| deepspeech2online_aishell | zh | 16k |
| deepspeech2offline_librispeech | en | 16k |
+--------------------------------+----------+-------------+
Here is the table of ASR static pretrained models supported in the service.
+----------------------------+----------+-------------+
| Model | Language | Sample Rate |
+----------------------------+----------+-------------+
| deepspeech2offline_aishell | zh | 16k |
+----------------------------+----------+-------------+

可以看到模型asr的模型支持动态图模型静态图模型,但是deepspeech2offline_aishell即属于动态又属于静态,看起来有些歧义了,并且这两个模型的md5码是相同的,具体是如何区分的,要更加详细的阅读源码了

Server的配置文件application.yaml

在配置文件application.yaml中分为两个部分,Server配置和engine配置。

Server配置

server配置的内容如下:

host: 0.0.0.0
port: 8090
protocol: 'websocket'
engine_list: ['asr_online']
  • host和port是服务器的ip地址和端口号
  • protocol是服务器支持的协议类型仅支持httpwebsocket
    • http是非流式的语音服务,支持asr_python和asr_inference引擎,调用的语音识别引擎是和CLI模式一样的,相当于是CLI模式的服务器接口。

    • websocket是流式语音服务,支持asr_online引擎。
      • ws://localhost:8090/paddlespeech/asr/streaming支持的是websoket的流式方式,根据输入的语音流实时给出语音识别的结果
  • engine_list是该Server所支持的引擎,可以是asr_python、asr_inference和asr_online中的一个,并且受到流式和非流式服务的限制。engine_list是一个列表所以它能配置多个engine,支持asr,tts,cl,text,vector服务同时运行。

.tg { border-collapse: collapse; border-color: rgba(204, 204, 204, 1); border-spacing: 0; margin: 0 auto }
.tg td { background-color: rgba(255, 255, 255, 1); border: 1px solid rgba(204, 204, 204, 1); color: rgba(51, 51, 51, 1); font-family: Arial, sans-serif; font-size: 14px; overflow: hidden; padding: 10px 5px; word-break: normal }
.tg th { background-color: rgba(240, 240, 240, 1); border: 1px solid rgba(204, 204, 204, 1); color: rgba(51, 51, 51, 1); font-family: Arial, sans-serif; font-size: 14px; font-weight: normal; overflow: hidden; padding: 10px 5px; word-break: normal }
.tg .tg-cji8 { font-size: 18px; text-align: center; vertical-align: middle }
.tg .tg-td2w { font-size: 20px; font-weight: bold; text-align: center; vertical-align: middle }
.tg .tg-jfoo { font-size: 20px; font-weight: bold; text-align: center; vertical-align: top }
.tg .tg-fuxe { font-size: 18px; text-align: left; vertical-align: top }

协议 支持的引擎
http asr_python, asr_inference
tts_inference, tts_python
cls_python, cls_inference
text_python
vector_python
websocket asr_online
tts_online
tts_online-onnx

engine配置

asr_python参数介绍

asr_python:
model: 'conformer_wenetspeech'
lang: 'zh'
sample_rate: 16000
cfg_path: # [optional]
ckpt_path: # [optional]
decode_method: 'attention_rescoring'
force_yes: True
device: # set 'gpu:id' or 'cpu'
  • cfg_path是模型的配置文件,ckpt_path为预训练模型的参数
  • 当cfg_path为null或者ckpt_path为null,表示使用paddlespeech自带的预编译模型,模型由model、lang和sample_rate这三个参数共同决定,从已有的预编译库模型中选择,此时cfg_path为该预编译模型的model.yaml,ckpt_path为该预编译模型的参数文件*.pdparams
  • cfg_path和ckpt_path同时不为null时,则cfg_path指定自己训练模型的model.yaml,ckpt_path指定自己训练的参数。此时参数model,lang,sample_rate已无作用。
  • decode_method,有点难解释了,当输入的音频通过模型的encoder后,会对应的给出每一段音素所对应汉字的概率,decode_method就是处理这些音素的概率,生成最终的结果。
    • attention: 采用的是transformer的decoder的自回归方法,三言两语在这里讲不清,后面讲模型的时候在细聊吧
    • ctc_greedy_search: 也叫贪心算法,就是取每个音素概率最大的汉字作为最终结果,通过CTC方式将相邻的并且相同的音素合并,得到最终结果。
    • ctc_prefix_beam_search:束搜索,有点类似于动态规划,也有点像隐马尔克夫模型,与贪心算法不同选择最大概率的汉字,束搜索选择的是概率最大的10个(可以指定)汉字,当汉字与汉字组合的时候会产生大量的分支,通过对每个分支打分,选择分数最高10个分支,裁剪掉多余分支,这样可以将分支控制在一定的数量级,可以从结果中选出整句话与实际结果最相似的结果。
    • attention_rescoring: 是ctc_prefix_beam_search与attention机制的结合,首先用ctc_prefix_beam_search获得前10个分数最高的预测分支,然后在用transformer进行重新打分,最后得出最终的结果。
  • force_yes: 当输入音频与模型的采样率不同时,需要强制的进行采样率变换,使得音频采样率和模型的一致
  • device:选择模型所在位置是cpu还是gpu

asr_online参数介绍

asr_online:
model_type: 'conformer_online_wenetspeech'
am_model: # the pdmodel file of am static model [optional]
am_params: # the pdiparams file of am static model [optional]
lang: 'zh'
sample_rate: 16000
cfg_path:
decode_method:
force_yes: True
device: 'cpu' # cpu or gpu:id
decode_method: "attention_rescoring"
am_predictor_conf:
device: # set 'gpu:id' or 'cpu'
switch_ir_optim: True
glog_info: False # True -> print glog
summary: True # False -> do not show predictor config chunk_buffer_conf:
window_n: 7 # frame
shift_n: 4 # frame
window_ms: 25 # ms
shift_ms: 10 # ms
sample_rate: 16000
sample_width: 2

本篇教程主要是针对conformer_online_wenetspeech这个模型,但配置文件中还包含与deepspeech2模型共用的参数,这里暂时不会细讲。

  • cfg_path是模型的配置文件,当模型是静态时,am_model和am_params分别是模型的配置和模型的参数,当模型是动态时,am_model和am_params用作模型的参数,和上一节ckpt_path作用相似,conformer_online_wenetspeech属于动态模型。
  • 当cfg_path为null或am_model为null或am_params为null,表示使用paddlespeech自带的预编译模型,模型由model_type、lang和sample_rate这三个参数共同决定,从已有的预编译库模型中选择,此时cfg_path为该预编译模型的model.yaml,am_model和am_params为该预编译模型的参数文件*.pdparams
  • decode_method已经在asr_python中介绍过了,但在这里只支持ctc_prefix_beam_search和attention_rescoring,默认为attention_rescoring,这样处理的效果最好。
  • force_yes,device和decode_method和asr_python一致,略。
  • am_predictor_conf用于deepspeech2模型使用的,conformer模型不使用。
  • chunk_buffer_conf应该属于历史遗留的配置文件,代码里面没有引用的地方

paddlespeech asr 使用教程的更多相关文章

  1. ARM指令教程

    ARM指令教程 ARM汇编程序特点: l         所有运算处理都是发生通用寄存器(一般是R0~R14)的之中.所有存储器空间(如C语言变量的本质就是一个存储器空间上的几个BYTE).的值的处理 ...

  2. 库、教程、论文实现,这是一份超全的PyTorch资源列表(Github 2.2K星)

    项目地址:https://github.com/bharathgs/Awesome-pytorch-list 列表结构: NLP 与语音处理 计算机视觉 概率/生成库 其他库 教程与示例 论文实现 P ...

  3. LUA速成教程

    說明: 1.該教程適合對編程有一定了解的人員. 2.該教程在WINDOWS下實驗. 切入正題, 1.首先下載Notepad++,工欲善其事,必先利其器,然後安裝NotePad++的插件NppExec. ...

  4. FastASR——PaddleSpeech的C++实现

    FastASR 基于PaddleSpeech所使用的conformer模型,使用C++的高效实现模型推理,在树莓派4B等ARM平台运行也可流畅运行. 项目简介 本项目仅实现了PaddleSpeech ...

  5. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  6. Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数

    上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...

  7. Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数

    上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...

  8. Angular2入门系列教程4-服务

    上一篇文章 Angular2入门系列教程-多个组件,主从关系 在编程中,我们通常会将数据提供单独分离出来,以免在编写程序的过程中反复复制粘贴数据请求的代码 Angular2中提供了依赖注入的概念,使得 ...

  9. Angular2入门系列教程1-使用Angular-cli搭建Angular2开发环境

    一直在学Angular2,百忙之中抽点时间来写个简单的教程. 2016年是前端飞速发展的一年,前端越来越形成了(web component)组件化的编程模式:以前Jquery通吃一切的田园时代一去不复 ...

随机推荐

  1. Go学习-基本语法(一)

    前言 一直对Service Mesh相关内容比较感兴趣,后面一路学习了Dcoker.Kubernetes等相关内容,可以说是对基本概念和使用有一定了解,随着开始学习一些相关的组件的时候,发现基本上全部 ...

  2. SoftPool:基于Softmax加权的池化操作 | 2021新文

    SoftPool使用softmax进行加权池化,能够保持特征的表达性并且是可微操作.从性能和准确率来看,SoftPool是目前的常规池化方法的一个不错的替代品   来源:晓飞的算法工程笔记 公众号 论 ...

  3. Apollo的docker配置详解步骤

    Apollo 的docker配置 基础环境 centOS7 + Docker服务 + mysql服务 1. 下载Apollo的包 git clone https://github.com/ctripc ...

  4. 前端HTML-01

    HTML是什么? 超文本标记语言,是一种用于创建网页的标记语言 文件的扩展名:.html或者.htm HTML不是什么? HTML是一种标记语言,不是变成语言. HTML文档结构 <!DOCTY ...

  5. scrapy框架第二天

    1.scrapy数据分析 2.scrapy持久化存储 3.全站数据爬取 4.请求传参  +   五大核心组件 - 创建scrapy工程 scrapy startproject ProName - 切换 ...

  6. 探索ABP基础架构-下

    配置应用程序 ASP.NET Core 的配置系统提供了一个基于键值对的配置方法.它是一个可扩展的系统,可以从各种资源中读取键值对,例如 JSON 设置文件.环境变量.命令行参数等等. 设置配置值 默 ...

  7. install dns server on ubuntu

    参考 CSDN/Ubuntu环境下安装和配置DNS服务器 在 Ubuntu 上安裝 DNS server Install BIND 9 on Ubuntu and Configure It for U ...

  8. Java 统计新客户

    上周做了一个订单数据统计的任务,统计的是订单的新客户数量,本文做一个解题过程的记录和整理. 新客户的定义 新客户指的是选取时间段有订单,时间段之前没有订单. 比如下面的订单数据: 时间段 2月1日之前 ...

  9. CentOS下sudo的使用和sudoers配置

    一.sudo命令 sudo [参数选项] 命令 参数选项 -l:列出目前用户可执行与无法执行的指令: -v:延长密码有效期限5分钟: -u<用户>:以指定的用户作为新的身份.若不加上此参数 ...

  10. 520表白小程序设计Python代码详解(PyQt5界面,B站动漫风)

    摘要:介绍一个动漫风的表白小程序,界面使用Python以及PyQt实现,界面样式经过多次美化调整,使得整体清新美观.本文详细介绍代码设计和实现过程,不仅是居家表白必备,而且适合新入门的朋友学习界面设计 ...