python之语音识别speech模块


Posted in Python onSeptember 09, 2020

1.原理

语音操控分为 语音识别和语音朗读两部分。

这两部分本来是需要自然语言处理技能相关知识以及一系列极其复杂的算法才能搞定,可是这篇文章将会跳过此处,如果你只是对算法和自然语言学感兴趣的话,就只有请您移步了,下面没有一个字会讲述到这些内容。

早在上世纪90年代的时候,IBM就推出了一款极为强大的语音识别系统-vio voice , 而其后相关产品层出不穷,不断的进化和演变着。 我们这里将会使用SAPI实现语音模块。

2. 什么是SAPI?

SAPI是微软Speech API , 是微软公司推出的语音接口,而细心的人会发现从WINXP开始,系统上就已经有语音识别的功能了,可是用武之地相当之少,他并没有给出一些人性化的自定义方案,仅有的语音操控命令显得相当鸡胁。 那么这篇文章的任务就是利用SAPI进行个性化的语音识别

代码

前提:打开win7的语音自动识别(控制面板--轻松访问--语音识别)

#!/usr/bin/env python
# -*- codinfg:utf-8 -*-
'''
@author: Jeff LEE
@file: .py
@time: 2018-07-19 11:15
@desc:
'''
from win32com.client import constants
import os
import win32com.client
import pythoncom
 
speaker = win32com.client.Dispatch("SAPI.SPVOICE")
 
 
class SpeechRecognition:
 def __init__(self, wordsToAdd):
 self.speaker = win32com.client.Dispatch("SAPI.SpVoice")
 self.listener = win32com.client.Dispatch("SAPI.SpSharedRecognizer")
 self.context = self.listener.CreateRecoContext()
 self.grammar = self.context.CreateGrammar()
 self.grammar.DictationSetState(0)
 self.wordsRule = self.grammar.Rules.Add("wordsRule", constants.SRATopLevel + constants.SRADynamic, 0)
 self.wordsRule.Clear()
 [self.wordsRule.InitialState.AddWordTransition(None, word) for word in wordsToAdd]
 self.grammar.Rules.Commit()
 self.grammar.CmdSetRuleState("wordsRule", 1)
 self.grammar.Rules.Commit()
 self.eventHandler = ContextEvents(self.context)
 self.say("Started successfully")
 def say(self, phrase):
 self.speaker.Speak(phrase)
 
class ContextEvents(win32com.client.getevents("SAPI.SpSharedRecoContext")):
 def OnRecognition(self, StreamNumber, StreamPosition, RecognitionType, Result):
 newResult = win32com.client.Dispatch(Result)
 print("你在说 ", newResult.PhraseInfo.GetText())
 speechstr=newResult.PhraseInfo.GetText()
 # 下面即为语音识别信息对应,打开响应操作
 if speechstr=="记事本":
  os.system('notepad') 
 elif speechstr=="写字板":
  os.system('write')
 elif speechstr=="画图板":
  os.system('mspaint')
 else:
  pass
 
if __name__ == '__main__':
 
 speaker.Speak("语音识别开启")
 wordsToAdd = ["记事本", "写字板","画图板",]
 speechReco = SpeechRecognition(wordsToAdd)
 while True:
 pythoncom.PumpWaitingMessages()

调试遇到问题

python调用语音模块时,遇见TypeError:NoneTypetakesnoarguments这种错误类型该如何解决

报错的原因是:不能调用语音开发包

解决方法:(如果你已经安装了pyWin32,它也安装了PythonWin)

1.在python35目录中找到pythonwin文件夹下的pythonwin.exe

python之语音识别speech模块

2.双击Pythonwin运行,然后选择工具tools/commakepyutility

python之语音识别speech模块

3.然后选择MicrosoftSpeechObjectLibrary5.4,点击OK键

python之语音识别speech模块

4.运行结果如下,问题解决

python之语音识别speech模块

后记

推荐一个不错的语音识别文档:https://3water.com/article/195212.htm

到此这篇关于python之语音识别speech模块的文章就介绍到这了,更多相关python 语音识别内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python使用Socket(Https)Post登录百度的实现代码
May 18 Python
Python字符串格式化
Jun 15 Python
使用pyecharts无法import Bar的解决方案
Apr 23 Python
利用python将pdf输出为txt的实例讲解
Apr 23 Python
基于python requests库中的代理实例讲解
May 07 Python
10 行 Python 代码教你自动发送短信(不想回复工作邮件妙招)
Oct 11 Python
Python cv2 图像自适应灰度直方图均衡化处理方法
Dec 07 Python
Python实现直播推流效果
Nov 26 Python
Django2 连接MySQL及model测试实例分析
Dec 10 Python
Python多线程threading join和守护线程setDeamon原理详解
Mar 18 Python
关于tf.matmul() 和tf.multiply() 的区别说明
Jun 18 Python
用Python仅20行代码编写一个简单的端口扫描器
Apr 08 Python
python speech模块的使用方法
Sep 09 #Python
python计算auc的方法
Sep 09 #Python
详解anaconda离线安装pytorchGPU版
Sep 08 #Python
python如何将图片转换素描画
Sep 08 #Python
Python自动化之UnitTest框架实战记录
Sep 08 #Python
Python Opencv实现单目标检测的示例代码
Sep 08 #Python
python获取本周、上周、本月、上月及本季的时间代码实例
Sep 08 #Python
You might like
PHP面向对象学习笔记之二 生成对象的设计模式
2012/10/06 PHP
在smarty中调用php内置函数的方法
2013/02/07 PHP
php使用异或实现的加密解密实例
2013/09/04 PHP
使用PHP强制下载PDF文件示例
2014/01/17 PHP
win7安装php框架Yii的方法
2016/01/25 PHP
数组Array的排序sort方法
2017/02/17 Javascript
vue router2.0二级路由的简单使用
2017/07/05 Javascript
详解Vue组件实现tips的总结
2017/11/01 Javascript
vuejs 切换导航条高亮(路由菜单高亮)的方法示例
2018/05/29 Javascript
在Node.js下运用MQTT协议实现即时通讯及离线推送的方法
2019/01/24 Javascript
vue组件三大核心概念图文详解
2019/05/30 Javascript
为nuxt项目写一个面包屑cli工具实现自动生成页面与面包屑配置
2019/09/29 Javascript
node.js文件操作系统实例详解
2019/11/05 Javascript
vue实现数字滚动效果
2020/06/29 Javascript
一文秒懂JavaScript构造函数、实例、原型对象以及原型链
2020/08/25 Javascript
JavaScript 实现下雪特效的示例代码
2020/09/09 Javascript
解决vue使用vant轮播组件swipe + flex时文字抖动问题
2021/01/07 Vue.js
[23:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
[01:31:02]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第一场
2019/08/22 DOTA
Python socket.error: [Errno 98] Address already in use的原因和解决方法
2014/08/25 Python
用python写的一个wordpress的采集程序
2016/02/27 Python
python用reduce和map把字符串转为数字的方法
2016/12/19 Python
利用Django内置的认证视图实现用户密码重置功能详解
2017/11/24 Python
python如何把嵌套列表转变成普通列表
2018/03/20 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
2018/04/27 Python
Python socket套接字实现C/S模式远程命令执行功能案例
2018/07/06 Python
浅谈django的render函数的参数问题
2018/10/16 Python
Python Excel处理库openpyxl使用详解
2019/05/09 Python
Python分析最近大火的网剧《隐秘的角落》
2020/07/02 Python
新东网科技Java笔试题
2012/07/13 面试题
GWT都有什么特性
2016/12/02 面试题
信息技术专业大学生职业生涯规划书
2014/01/24 职场文书
2014年公司工作总结
2014/11/22 职场文书
离婚代理词范文
2015/05/23 职场文书
跳高加油稿
2015/07/21 职场文书
浅谈mysql执行过程以及顺序
2021/05/12 MySQL