用Python编程实现语音控制电脑

yipeiwu_com5年前Python基础

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

在此告诉你,不要灰心,我们真的可以做一个。
做一个语音识别? 我相信很多人到这里会有两个心态,一是好奇,二是避之千里。

其实不然,你可以不用懂太多的编程技能,你甚至也可以不用懂自然语言处理技术,这篇文章虽然实现了语音操控但是绝没有你们想象的那么复杂。 如果仅仅把语音识别作为一个实现了的接口的话,剩下的逻辑就仅仅是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的代码是兼容,不会有异常。

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

开发阶段

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

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

复制代码 代码如下:

whileTrue:
    phrase =speech.input()
    speech.say("You said %s"%phrase)
    ifphrase =="turn off":
        break


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

1. 定义中文语义库

复制代码 代码如下:
closeMainSystem ="关闭人机交互"
openEclipse ="我要写程序"
listenMusic ="我好累啊"
blog ="看博客"
php ="php"
java ="JAVA"


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

复制代码 代码如下:
defcallback(phrase, listener):
    print(": %s"%phrase)
    ifphrase ==closeMainSystem:
        speech.say("Goodbye. 人机交互即将关闭,谢谢使用")
        listener.stoplistening()
        sys.exit()
    elifphrase ==openEclipse:
        speech.say("请问您要写PYTHON还是JAVA程序?")
        speech.listenforanything(callback)
    elifphrase ==listenMusic:
        speech.say("即将为你启动豆瓣电台")
        webbrowser.open_new("http://douban.fm/")
    elifphrase ==blog:
        speech.say("即将进入Dreamforce.me")
        webbrowser.open_new("http://dreamforce.me/")
    elifphrase ==php:
        speech.say("启动PHP编写器")
        os.popen("E:\IDE\php_eclipse\eclipse\eclipse.exe")
    elifphrase ==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)
whilelistener.islistening():
     text =input()
     iftext =="不要语音了":
         listener.stoplistening()
         sys.exit()
     else:
         speech.say(text)

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

相关文章

使用beaker让Facebook的Bottle框架支持session功能

bottle是一个小型web框架,很小只有一个文件,但功能确很强大,学起来也简单,简单和小巧的同时也有很多不足,某些功能支持还不是很完善,比如session.但是也有它自身的好处,我们可...

让Python代码更快运行的5种方法

不论什么语言,我们都需要注意性能优化问题,提高执行效率。选择了脚本语言就要忍受其速度,这句话在某种程度上说明了Python作为脚本语言的不足之处,那就是执行效率和性能不够亮。尽管Pyth...

Pytorch 多维数组运算过程的索引处理方式

背景:对 python 不熟悉,能看懂代码,也能实现一些简单的功能,但是对 python 的核心思想和编程技巧不熟,所以使 Pytorch 写 loss 的时候遇到很多麻烦,尤其是在 b...

web.py在SAE中的Session问题解决方法(使用mysql存储)

这段时间一直想尝试着在SAE中使用Python,初步选择了Web.py框架做为开发框架,但是可怜SAE上的资料少的可怜,有点问题基本上解决不了,今天解决一个Session在Session...

理解Python中的类与实例

面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,...