作者福建农林大学在读计算机科学与技术研究生,研究方向智能计算与机器学习。微信公众号 小平讲算法

因为最近在要做语音识别的东西,所以就自己在网上查找了一些资料,并简单实现了语音识别的demo。

工具包准备

1. SpeechRecognition
2. playsoud, simpleaudio
3.gtts, pyttsx3
4.pocketsphinx
5. ffmpeg.exe

基于谷歌api语音识别代码

SpeechRecognition 软件包是一个功能全面且易于使用的 Python 语音识别库,只需要几行代码就可以实现语音识别,可以通过在CMD输入pip install SpeechRecognition来下载安装。因为pip一般下载速度特别慢,所以我建议这里用清华镜像来下载安装下载,在CMD输入pip install SpeechRecognition -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
接下来就是代码实现部分:

import speech_recognition as sr //这个模块其实就是你pip的SpeechRecognition包
import sys
r = sr.Recognizer()  //初始化识别器实例

# 本地语音测试
harvard = sr.AudioFile(sys.path[0]+'/将乐路.wav')  //这里是读取语音文件,这里我说了一段“你看看你看看”
with harvard as source:
    # 去噪
    r.adjust_for_ambient_noise(source,duration=0.5)  //对语音去噪,关键字参数来调整的时间分析范0.5毫秒,默认是1毫秒
    audio = r.record(source)
# 语音识别
test = r.recognize_google(audio, language="cmn-Hans-CN")  //这个需要翻墙
print('test:',test)

上面这其实可以说一个固定框架实现简单语音识别的代码。
识别结果
在这里插入图片描述

基于谷歌CMU Sphix语音识别代码

Recognizer API 主要目是识别语音,每个 API 都有多种设置和功能来识别音频源的语音,分别是:
recognize_bing(): Microsoft Bing Speech

recognize_google(): Google Web Speech API

recognize_google_cloud(): Google Cloud Speech - requires installation of the google-cloud-speech package

recognize_houndify(): Houndify by SoundHound

recognize_ibm(): IBM Speech to Text

recognize_sphinx(): CMU Sphinx - requires installing PocketSphinx

recognize_wit(): Wit.ai

因为谷歌api需要翻墙才能run代码,上面只有 recognize_sphinx() 可以脱机工作,所以我测试一下 recognize_sphinx() 这个效果

使用 recognize_sphinx() API需要安装PocketSphinx模块,命令pip install PocketSphinx -i https://pypi.tuna.tsinghua.edu.cn/simple some-package,如果是对中文进行识别,则需要额外下载中文声学模型、语言模型和字典文件,这里我直接给出我所参考的博客。然后准备工作就完成了。上代码:

import speech_recognition as sr //这个模块其实就是你pip的SpeechRecognition包
import sys
r = sr.Recognizer()  //初始化识别器实例

# 本地语音测试
harvard = sr.AudioFile(sys.path[0]+'/将乐路.wav')  //这里是读取语音文件,这里我说了一段“你看看你看看”
with harvard as source:
    # 去噪
    r.adjust_for_ambient_noise(source,duration=0.5)  //对语音去噪,关键字参数来调整的时间分析范0.5毫秒,默认是1毫秒
    audio = r.record(source)
# 语音识别
print(r.recognize_sphinx(audio,language='zh-CN'))

识别结果
在这里插入图片描述
WTF,这是什么鬼,识别结果这么差,我之后也测试了英文识别,发现**recognize_sphinx()**识别效果真的不好,因为刚入门,也不知道为啥,所以我尽量还是选择Goole Api。

格式转换

上面对语音识别的文件要求十分苛刻,基本只能用.WAV格式,所以对于一些不是.WAV格式的怎么办,直接改后缀名,BUT,然而并不行,会报错,说什么不是纯净的.WAV版本,(⊙o⊙)…。好吧,这怎么能难倒我们出色的猿大师。
于是乎一顿搜索,找到了一些代码,不多说,上菜:

from pydub import AudioSegment
import speech_recognition as sr

import pandas

import sys
#AudioSegment.converter ='D:\\ffmpeg-20200831-4a11a6f-win64-static\\bin\\ffmpeg.exe'
source_file_path = sys.path[0]+'\\ff.mp3'
print(source_file_path)
sound = AudioSegment.from_mp3(source_file_path)
destin_path = sys.path[0]+'/audio.wav'
sound.export(destin_path,format ='wav')

这里又遇到几个坑,如果你直接运行上面的代码是行不通的,因为你没有ffmpeg.exe,这个是一个格式转换的东西,只有这个你才能跑动上面的代码。所以你得下载这些东西,上链接,下载windo下的版本
在这里插入图片描述
然后把上面代码中注释的那一行的注释给去掉AudioSegment.converter ='D:\\ffmpeg-20200831-4a11a6f-win64-static\\bin\\ffmpeg.exe',换成你的ffmpeg.exe路径就好,对了,换成你的路径就完事了嘛,too young too simple,你还需要配置环境变量,WTF,好吧,那就[配吧]。(https://jingyan.baidu.com/article/a3a3f81124c5e08da2eb8a29.html)
好了,该部分的工作就到此结束。工具包链接链接:https://pan.baidu.com/s/1HQLYERH5q__U50A1JWEgVg
提取码:9syb

播放本地语音

上代码:

import playsound
import simpleaudio as sa
import sys
wave_obj = sa.WaveObject.from_wave_file(sys.path[0]+'/将乐路.wav')
play_obj = wave_obj.play()
play_obj.wait_done()

这样它就会自动播放了,上面的几个模块也需要你自己去安装,通过pip来搞定,需要你自己亲自去动手实践了。

输入文本进行读音

import gtts
import pyttsx3
engine = pyttsx3.init()
engine.say("I will speak this text")
engine.say("I will speak this text")
engine.say("I will speak this text")
engine.say("台湾是个美丽的宝岛")
engine.runAndWait()

同样,需要下载上面的库,如果跑不了,说明你得TTS有问题(别问我为什么知道,因为你是盗版winodw系统),啊!!!那怎么办呢,怎么办,修呗,TTS链接:https://pan.baidu.com/s/1AErnVkwQPJDlq8b8Ehddeg
提取码:ap03

好了工作到此结束。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐