从零开始的ASR(语音识别)之旅

文章目录

  • 从零开始的ASR(语音识别)之旅
    • 一、语音识别简介
    • 二、将文字内容转换为语音实际代码演示
      • 1、使用pyttsx3实现文字转换成语音功能
      • 2、使用win32com.client自带的Dispatch包实现文字转换成语音功能
      • 3、使用SpeedLib实现文字转换成语音文件的功能
    • 三、将人类的语音内容转换为相应的文字
      • 1、使用PocketSphinx实现将英文语音转换成文字
      • 2、使用PocketSphinx实现将中文语音转换成文字
    • 四、结语

一、语音识别简介

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

  1. 自动将人类的文字内容转换为相应的语音
  2. 自动将人类的语音内容转换为相应的文字

二、将文字内容转换为语音实际代码演示

这里有三种方法分别是使用pyttsx3包、win32com.client自带的Dispatch包、SpeedLib包。

1、使用pyttsx3实现文字转换成语音功能

a. 安装pyttsx3包

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

注:这里最好使用Anaconda3创建一个新的环境安装好包后,在pycharm上运行。
b.将字符串转化成语音

 # 01demo 使用pyttsx实现文本转换成语音
import pyttsx3 as pyttsx #换名换成pyttsx,没有什么用处问就好记
speaker=pyttsx.init()    #初始化一个pyttsx对象
speaker.say('Hello World,你好世界')   #运行say函数
speaker.runAndWait()     #运行并等待say end,不加这个就不会运行

运行结果截不了图,就不截了。
c.将文本内容转换成语音

 # 01demoe 使用pyttsx实现文本转换成语音
import pyttsx3 as pyttsx #换名换成pyttsx,没有什么用处问就好记
speaker=pyttsx.init()    #初始化一个pyttsx对象with open('in.txt','r',encoding='utf-8') as f:  #打开in.txt文本for line in f:speaker.say(line)speaker.runAndWait()     #运行并等待say end

2、使用win32com.client自带的Dispatch包实现文字转换成语音功能

注:使用这个方法有一个好处就是不用下载额外的包可以直接运行
a.将字符串转化成语音

# 02demo 使用Dispatch 实现文本转换成语音
from win32com.client import Dispatch #加载Dispatch  包
speaker=Dispatch('SAPI.SpVoice')     # 生成一个Dispatch对象
speaker.Speak('Hello World,你好世界')  #巴拉一句话
del speaker                          #删除Dispatch对象

注1:pyttsx3的文本转换成语音的效果比自带的Dispatch 的SAPI好一点。
注2:这个将文本转换成语音的代码基本一致

3、使用SpeedLib实现文字转换成语音文件的功能

#demo3 使用SpeechLib,从文本输入并转换成语音#一、创建speaker和stream对象
from comtypes.client import CreateObject
speaker=CreateObject("SAPI.SpVoice")
stream=CreateObject('SAPI.SpFileStream')#二、获取输入输出文件地址
from comtypes.gen import SpeechLib
infile='in.txt'         #输入文件
outfile='out_audio.wav' #输出语音# 三、将speaker语音输出流接到outfile里
stream.Open(outfile,SpeechLib.SSFMCreateForWrite)#将流stream与输出outfile地址所在文件绑定
speaker.AudioOutputStream=stream                 #将管道流stream接到speaker的语音输出里面# 这样speaker就能输出out_audio.wav文件里面了#四、获取infile文件内容
f=open(infile,'r',encoding='utf-8')
theText=f.read()                 #infile文件内全部内容都保存在theText中
f.close()#五、利用SAPI方法输出文本内容,该输出内容会被输出到outfile中
speaker.speak(theText)           #speaker开始输出,在没有第11行之前是默认输出到标准输出流也就是说出来#现在修改管道流之后就变成输出到out_audio.wav了#六、释放资源
stream.close()
del speaker

三、将人类的语音内容转换为相应的文字

PocketSphinx 是一个用于语音转换文本的开源API.它是一个轻量级语音识别引擎。在手机端和移动设备也能很好的工作

1、使用PocketSphinx实现将英文语音转换成文字

a.安装PocketSpinx包

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

当然这样子安装经常会遇到如下报错:

如果报错了可以按照如下两种方法:

  • 参考方案a:从以下网址https://www.lfd.uci.edu/~gohlke/pythonlibs/#pocketsphinx,下载离线包,我的python是3.8,64位,所以就下的pocketsphinx‑0.1.15‑cp38‑cp38‑win_amd64.whl,下载完成后,通过命令pip install pocketsphinx‑0.1.15‑cp38‑cp38‑win_amd64.whl 完成安装

  • 参考方案b:从官网上下载的swig最新压缩包4.0.2,官网地址为: http://www.swig.org/download.html.
    将下载好的文件解压缩到C盘根目录下。
    然后,在环境变量中新增加一条该文件的path路径。最后重新执行一遍pip install PocketSphinx -i https://pypi.tuna.tsinghua.edu.cn/simple/

b.安装SpeechRecognition包

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

c、实现英文语音转换成文本的程序

#一、初始化一个speed_recognition对象
import speech_recognition as sr
r=sr.Recognizer()#二、打开语音文件并编码后保存在audio中
audio_file='out_audio1.wav'
with sr.AudioFile(audio_file) as source:audio=r.record(source)#三。将语音转换为文本
print('文本内容:',r.recognize_sphinx(audio))

注:由于recognize_sphinx默认语言模型是英文,所以如果有中文容易产生不是乱码的乱码。

2、使用PocketSphinx实现将中文语音转换成文字

a.下载普通话包
https://sourceforge.net/projects/cmusphinx/files/Acoustic%20and%20Language%20Models/Mandarin/

b.将包放到正确的位置

这是我放置的位置
c.修改cmusphinx-zh-cn-5.2包名字为ze-CN同时修改文件夹里面的文件名字

名字参考里面,如果担心打错字可以copy隔壁en-US文件夹里面的对应文件的对应名字
d.使用PocketSphinx实现将中文语音转换成文字

# 04使用PocketSphinx完成语音转换成文本.py
#一、初始化一个speed_recognition对象
import speech_recognition as sr
r=sr.Recognizer()#二、打开语音文件并编码后保存在audio中
audio_file='out_audio1.wav'
with sr.AudioFile(audio_file) as source:audio=r.record(source)#三、将语音转换为文本
print('文本内容:',r.recognize_sphinx(audio,language='ze-CN'))

注1:与上一个程序唯一的区别就是修改了recognize_sphinx函数内语言默认参数为刚刚下载的普通话包
注2:不能转换英文为文本
注3:在这里我用PocketSphinx 做为例子,当然大家可以最新的Vosk库来实现相同的功能,那个可能更好一点,有时间我再过来更新这篇博客

四、结语

本篇博客,只是为了补充当前csdn缺少可以一套完整的入门代码,要真正走语音识别这一方向还有很多路要走,很多原理要学,加油奥。

从零开始的ASR(语音识别)之旅(附项目案例程序与环境配置过程)相关推荐

  1. 完成我的第一个java项目“评标人才库管理系统”——环境配置+创项目

    完成我的第一个java项目"评标人才库管理系统"--环境配置+创项目 idea配置maven环境 创建第一个Spring项目 idea配置maven环境 1.下载maven htt ...

  2. S7-1500项目案例程序,带5个S7-1200轮询,5个ET200SP

    S7-1500项目案例程序,带5个S7-1200轮询,5个ET200SP,博图软件编程. PTO脉冲模式控制20个轴,100个气缸,与2台机器人联动. 采用ModbusRTU 485通讯,PROFIN ...

  3. 【kratos入门实战教程】1-kratos项目搭建和开发环境配置

    1.系列目录 [kratos入门实战教程]0-商城项目介绍 [kratos入门实战教程]1-kratos项目搭建和开发环境配置 [kratos入门实战教程]2-实现注册登陆业务 2.概览 经过上一篇的 ...

  4. 数字图像相关DIC算法,Ubuntu16.04,Ncorr项目C++版本开源环境配置

    数字图像相关DIC算法,Ubuntu16.04,NcorrC++版本开源代码环境配置流程. 本文介绍C++版本数字图像相关法DIC环境配置过程,配置了好几天,痛苦踩坑经历. DIC算法.资料.源码.实 ...

  5. React-native 环境配置过程与搭建项目问题汇总

    首先,最好参照来源当然是来自于开源代码本身的文档: https://reactnative.cn/docs/getting-started/ 一.初始环境搭建 1.环境组件 由于从网上查找React- ...

  6. 结对-结对编项目作业名称-开发环境搭建过程

    项目名称:点灯游戏 开发工具:python 2.7.13 环境搭建过程: 1.安装 python 2.7.13 2.建立有个N行N列的正方形灯板 3.当你开关其中一盏灯,它和上下左右的灯的状态全部反转 ...

  7. 大厂疯传!Python+商业数据分析+数据可视化教程(附项目案例)

    这是一个数据驱动一切的时代,从国家.企业.组织到个人,都在关注各种数据,并寄希望于从数据中获取到价值,因此数据分析就是这个时代的"淘金"! 也正是因为这样,数据分析人才成为了当下的 ...

  8. umi搭建react+antd项目(一)环境配置

    1.先创建文件夹,windows用户手动创建就行了 mkdir myReact && cd myReact 2.在myReact目下,执行脚手架命令,默认选择antd yarn cre ...

  9. (一)ubuntu下qtcreator +opencv下新建一个项目和调用caffe环境配置

    一.用QtCreator创建一个项目 1.新建项目  2.选择项目类型  3.修改项目名和项目存放地址  4.接下来都选择下一步,直到项目生成成功  二.项目创建成功后,开始写opencv小程序 1. ...

最新文章

  1. java flow step,即使步骤完成,使用FlowBuilder的Spring Batch作业也会失败
  2. 皮一皮:我真的没买这么多...
  3. quick cocos2dx 3.x 配置win32工程
  4. iOS学习笔记16-SQLite应用
  5. Erlang China 大会 - CN Erlounge III - 发起
  6. BCGControlBar教程:Outlook Bars
  7. nacos云环境集群部署
  8. VPC2007差分硬盘让小硬盘也能跑多个虚拟机
  9. 清华“最强本科生”揭晓!网友:我大概是来凑数的……
  10. Servlet 过滤器笔记
  11. Vue的批量更新原理
  12. Binary XML file line #6: Error inflating class xxx
  13. springmvc请求返回一个字符_response 返回 带双引号 的字符串解决办法 springmvc
  14. hibernate查询list结果集结果都是一样
  15. PCA,ZCA,ICA,白化,稀疏编码和自编码器
  16. html文件一打开就未响应,我的电脑里的文件一右击就未响应是什么状况 求解决...
  17. JavaCV开发详解之1:调用本机摄像头并预览摄像头图像画面视频(建议使用javaCV最新版本)
  18. 只有韦小宝最适合当产品经理
  19. 实现android wifi语音通话功能吗,Android下自写类似系统wifi管理功能的实现
  20. omf多路径 oracle_OMF下Restore Oracle Datafile的优先级问题

热门文章

  1. 大地测量学小脚本分享
  2. 如何完美卸载pads 9.5/vx
  3. rufus 一款好用的linux u盘,光盘刻录工具
  4. 索赔cs1.6最新服务器,《cs1.6》最新刷服补丁
  5. hadoop-mapreduce-example中实例介绍
  6. 2021年求职秘籍丨如何在 IT 部门找到工作?4个步骤必不可少
  7. 掌财社:看不懂NFT,了解这几幅画就好了
  8. 如何做高自由度的游戏
  9. 嵌入式开发之STM32开发之无线控制之PT2262/2272最简单使用-带你实现一个远程控制电灯的例子
  10. 条码打印软件中如何设置条形码页码