window下基于谷歌api和CUM Sphinx的简单语音识别

  • 工具包准备
  • 基于谷歌api语音识别代码
  • 基于谷歌CMU Sphix语音识别代码
  • 格式转换
  • 播放本地语音
  • 输入文本进行读音

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

因为最近在要做语音识别的东西,所以就自己在网上查找了一些资料,并简单实现了语音识别的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 srimport pandasimport 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

好了工作到此结束。

window下基于谷歌api和CUM Sphinx的简单语音识别相关推荐

  1. window下基于vscode编译下载AT32工程备忘录

    前言 大部分32位MCU在MDK平台都可以编译,但是MDK是基于window下.并且MDK在代码提示方面并没有做的有vscode好,并且vscode在linux平台下也能用,所以本人考虑将vscode ...

  2. window下键盘监控api函数详解

    在实际应用中,键盘监控是一种很常见的技术,它包括按键的记录.按键的过滤.按键的修改(映射)等.比方说,我们想统计用户的击键情况,这个就是按键的记录:我们想屏蔽某些系统键(例如Alt键.Win键),这个 ...

  3. c语言免杀程序源码,Window下基于C/C++源码免杀理论及思路(新手篇)

    作者:冷锋(LengF) [BHST] 博客:www.81sec.com      时间:2011-5-22 0x00 概述 最近搞一个国外的网站,对方是用的赛门铁克的诺顿杀毒软件,而内网又只对外开放 ...

  4. linux/window 下 solr5.1 tomcat7.x 环境搭建即简单功能测试

    2019独角兽企业重金招聘Python工程师标准>>> 之所以想使用solr来进行学习,很大一部分原因就是,solr能够在某种程度上提供RESTFUL相关的URL请求连接,可以把它理 ...

  5. window下eclipse搭建C/C++开发环境(超简单无需插件版) .

    经过若干google之后(百度就不用说了),又经过了若干尝试,终于用最简单的步骤配起来了.(一些比较旧的文章写的太繁杂了,随着各个工具的升级,搭建环境很简单了). 前言:写博客不是为了炫耀什么.发泄什 ...

  6. 嵌入式linux学习笔记--linux下基于imx6ullpro 的 CP2102 /CH340 驱动 以及简单的测试

    今天再次编译了linux 的内核,想起来之前一直没实现的嵌入式linux 的串口驱动,故想实验一下. 本文章会分别介绍CP2102 以及CH340两者的驱动 以及他们的简单的测试,后续可能会更新一个 ...

  7. 基于C API的MySQL数据库多线程访问方法

    说明:如何生成线程式客户端 客户端库总是线程安全的.最大的问题在于从套接字读取的net.c中的子程序并不是中断安全的.或许你可能希望用自己的告警中断对服务器的长时间读取,以此来解决问题.如果为SIGP ...

  8. [转]window下使用SetUnhandledExceptionFilter捕获让程序的崩溃

    [转]window下使用SetUnhandledExceptionFilter捕获让程序的崩溃 简单使用SetUnhandledExceptionFilter()函数让程序优雅崩溃 虽然是大公司的产品 ...

  9. 为支持两个语言版本,我基于谷歌翻译API写了一款自动翻译的 webpack 插件

    大家好,我是若川.持续组织了6个月源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步.同时极力推荐订阅我写的<学习源码整体架构系列& ...

最新文章

  1. 拓扑排序的非计算机应用
  2. 河中跳房子(noiopenjudge,noip2015)
  3. 改变软件开发者的形象,增加多样性
  4. 让您的Xcode键字如飞
  5. C++学习之路 | PTA乙级——1092 最好吃的月饼 (20 分)(精简)
  6. 二次元风格Kratos-pjax主题 WordPress主题
  7. ERDAS遥感图像配准、及其它一些基本处理
  8. 巴蒂尔7个三分火箭破网 麦蒂战表兄取缺姚后首胜
  9. Win11如何添加过时硬件?Win11添加过时硬件的方法
  10. 机器学习算法之手撕SVM-线性(理论)
  11. Java 接口和抽象类的异同点
  12. 《DNS与BIND(第5版)》——10.12 系统优化
  13. SpringBoot 多语言切换
  14. vue引入企业微信JS-SDK;企业微信开发步骤;vue开发企业微信;企业微信侧边栏应用开发
  15. CMDS目的端数据库碎片整理记录
  16. 永洪BI SQL带参数查询
  17. 【学习方法】如何才能高效学习
  18. 关于二分查找及其上下界问题的一些思考
  19. PCF8574AT驱动LCD1602
  20. 随笔-Android openGL-三棱锥纹理

热门文章

  1. 古方怡雪祛斑是真的吗,美丽源于调养!
  2. 修改office2007序列号
  3. 《围城》---方鸿渐 v1
  4. 【已解决】为什么每次打开word2010都显示windows正在配置
  5. CAJ文献格式转PDF格式(通过CAJViewer)
  6. win7安装Microsoft Visial C++2015 Redistributable提示:无法建立到信任根
  7. php捉迷藏,物理学家捉迷藏(一)
  8. C++11新特性——时间操作chrono库
  9. 如何自己搭建一个ai画图系统? 从0开始云服务器部署novelai
  10. 白炽灯护眼还是led护眼效果好?专家建议孩子用这种灯光更护眼