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://www.jb51.net/article/195212.htm

广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。