是否经常好莱坞电影里看强大的语音识别系统? 是否每每看到都会羡慕嫉妒恨? 可是我们真心买不起啊。

电脑面前的你,是否也希望能让电脑听命于你?   当你累的时候,只需说一声“我累了”,电脑就会放着优雅的轻音乐来让你放松。 或许你希望你在百忙之中,能让电脑郎读最新的NBA比分赛况….一切都是那么惬意。

DreamForce在此告诉你,不要灰心,我们真的可以做一个。

做一个语音识别? 我相信很多人到这里会有两个心态,一是好奇,二是避之千里。

其实不然,你可以不用懂太多的编程技能,你甚至也可以不用懂自然语言处理技术,这篇文章虽然实现了语音操控但是绝没有你们想象的那么复杂。 如果仅仅把语音识别作为一个实现了的接口的话,剩下的逻辑就仅仅是IF-ELSE这些简单的元素了。

实现语音操控的原理

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

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

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

什么是SAPI?

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

准备阶段,你至少需要安装以下的工具:

Python2.7    http://www.python.org/

强烈建诡使用2.7,至今Python2.7拥有Python系列为数最多的工具和应用支持,同时也相对比较稳定。

Win32Com  http://starship.python.net/~skippy/win32/Downloads.html

Python Win32增强工具,可以使Python调用WIN32COM接口,这个工具的出现使得Python变得无比强大

Speech.py    http://pypi.python.org/pypi/speech/

这个是极为精简的封装模块,此处为可选项,当然我不建议重复造轮子,还是下吧,目前只支持Python2.6,但不用灰心,Python2.6和Python2.7的代码是兼容,不会有异常。

安装过程请依至上而下的顺序。

开发阶段

当你安装了上述的相关工具后,你就可以进行开发了:

先进行一个简单的环境调试:

while True:
    phrase = speech.input()
    speech.say("You said %s" % phrase)
    if phrase == "turn off":
        break

上述代码是启动语音识别器,同时系统将会重复你所录入的语音,当遇到“turn off”时,就会自动关闭识别系统。
如果你通过测试无误的话,我们就可以开始进行扩展开发了。

1. 定义中文语义库

closeMainSystem = "关闭人机交互"
openEclipse = "我要写程序"
listenMusic = "我好累啊"
blog = "看博客"
php = "php"
java = "JAVA"

2. 定义相关语义操作逻辑

def callback(phrase, listener):
    print (": %s" % phrase)
    if phrase == closeMainSystem:
        speech.say("Goodbye. 人机交互即将关闭,谢谢使用")
        listener.stoplistening()
        sys.exit()
    elif phrase == openEclipse:
        speech.say("请问您要写PYTHON还是JAVA程序?")
        speech.listenforanything(callback)
    elif phrase == listenMusic:
        speech.say("即将为你启动豆瓣电台")
        webbrowser.open_new("http://douban.fm/")
    elif phrase == blog:
        speech.say("即将进入Dreamforce.me")
        webbrowser.open_new("http://dreamforce.me/")
    elif phrase == php:
        speech.say("启动PHP编写器")
        os.popen("E:\IDE\php_eclipse\eclipse\eclipse.exe")
    elif phrase == php:
        speech.say("启动JAVA编写器")
        os.popen("E:\IDE\php_eclipse\eclipse\eclipse.exe")

其中,os.popen是异步开启程序,此操作不会单独开启一个SHELL窗口,也不会阻塞当前进程。
speech.say() 是调用SAPI进行参数朗读。
webbrowser.open_new()是打开网页。

3.程序运行主体搭建

listener = speech.listenforanything(callback)
while listener.islistening():
     text = input()
     if text == "不要语音了":
         listener.stoplistening()
         sys.exit()
     else:
         speech.say(text)

 

此段为运行主体,大意是开启语音监听,同时支持终端输入模式。如果你嗓子哑了的话,也可以打字来实现,哈哈~~

很简单吧,DreamForce试着启动程序,说了一句:我好累啊, 豆瓣FM就开始播放着喜欢的旋律了。~~~

享受程序员式的小资吧~~

18 Replies to “巧用Python实现语音操控电脑”

      1. 更正一下,运行speech后会自动打开win7的语音识别程序,你需要说 ‘开始聆听’ 使win7语音识别成为激活模式才有用。

  1. 1. win7 不支持
    2. 使用microsoft 语音识别引擎,识别率较低,体验度差
    3. 如果使用 google, ifly语音识别api 识别率高,再加上 python这个speech 好用的轮子进行交互会话那体验度马上就上去了,可是怎么使用?

    1. 感谢测试哈,我开发环境是WIN7的,理应说是可以使用,可能少了某些MicroSoft的组件吧。
      当初使用Microsoft语音识别是因为这个组件是系统自动的,但是识别率确实非常低,网上有很多语音识别的东东做的想些当不错,有机会可以更换,提高识别度

      1. 我找到http://campus.albion.edu/squirrel/2012/03/01/google-speech-recognition-with-python/ 用google 语音识别只是技术能力有限暂时无法做到像文中那么酷,每次识别打开py,下次识别又得重新打开。 please help me.thx

  2. Pingback: 电视棒
  3. When the accusation is definitely bogus, Romney can easily verify that bogus. Most they have to try and do is actually launch his or her income taxes. Often Romney is definitely concealing a thing, as well as he or she believes obstinacy can be a far more presidential trait when compared with openness in addition to credibility. In any case, he has wrongly recognized.

  4. 能把源码发下吗?我没了解过python,复制你发的代码运行老报错,所以只好做回伸手党,万分感谢博主

Leave a Reply

Your email address will not be published. Required fields are marked *

%d bloggers like this: