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


Posted in Python onApril 01, 2014

电脑面前的你,是否也希望能让电脑听命于你?   当你累的时候,只需说一声“我累了”,电脑就会放着优雅的轻音乐来让你放松。 或许你希望你在百忙之中,能让电脑郎读最新的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)

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

Python 相关文章推荐
python轻松查到删除自己的微信好友
Jan 10 Python
Python极简代码实现杨辉三角示例代码
Nov 15 Python
Python编程实现微信企业号文本消息推送功能示例
Aug 21 Python
Python标准库使用OrderedDict类的实例讲解
Feb 14 Python
Scrapy-Redis结合POST请求获取数据的方法示例
May 07 Python
Python绘制堆叠柱状图的实例
Jul 09 Python
python实现简易学生信息管理系统
Apr 05 Python
Django实现文件上传下载
Oct 06 Python
python 在threading中如何处理主进程和子线程的关系
Apr 25 Python
python实现数字炸弹游戏
Jul 17 Python
Python 测试框架unittest和pytest的优劣
Sep 26 Python
python 实现客户端与服务端的通信
Dec 23 Python
35个Python编程小技巧
Apr 01 #Python
ptyhon实现sitemap生成示例
Mar 30 #Python
python实现百度关键词排名查询
Mar 30 #Python
python获取网页状态码示例
Mar 30 #Python
python单线程实现多个定时器示例
Mar 30 #Python
python实现猜数字游戏(无重复数字)示例分享
Mar 29 #Python
使用python实现扫描端口示例
Mar 29 #Python
You might like
UCenter中的一个可逆加密函数authcode函数代码
2010/07/20 PHP
具有时效性的php加密解密函数代码
2013/06/19 PHP
解析php下载远程图片函数 可伪造来路
2013/06/25 PHP
php教程之魔术方法的使用示例(php魔术函数)
2014/02/12 PHP
ThinkPHP的MVC开发机制实例解析
2014/08/23 PHP
ThinkPHP实现非标准名称数据表快速创建模型的方法
2014/11/29 PHP
Mootools 1.2教程(3) 数组使用简介
2009/09/14 Javascript
jquery下json数组的操作实现代码
2010/08/09 Javascript
javascript学习之闭包分析
2010/12/02 Javascript
jQuery实现点击按钮弹出可关闭层的浮动层插件
2015/09/19 Javascript
Jquery 垂直多级手风琴菜单附源码下载
2015/11/17 Javascript
网站发布后Bootstrap框架引用woff字体无法正常显示的解决方法
2016/11/24 Javascript
JavaScript继承定义与用法实践分析
2018/05/28 Javascript
深入浅析Node环境和浏览器的区别
2018/08/14 Javascript
vue-cli脚手架的安装教程图解
2018/09/02 Javascript
浅谈JS中this在各个场景下的指向
2019/08/14 Javascript
整理 node-sass 安装失败的原因及解决办法(小结)
2020/02/19 Javascript
jquery实现轮播图特效
2020/04/12 jQuery
Vue 的双向绑定原理与用法揭秘
2020/05/06 Javascript
JS实现网站楼层导航效果代码实例
2020/06/16 Javascript
js+for循环实现字符串自动转义的代码(把后面的字符替换前面的字符)
2020/12/24 Javascript
[42:32]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第二局
2016/02/27 DOTA
[38:21]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS Newbee
2018/03/31 DOTA
星球大战与Python之间的那些事
2016/01/07 Python
Django app配置多个数据库代码实例
2019/12/17 Python
美国最值得信赖的宠物药房:Allivet
2019/03/23 全球购物
芬兰设计商店美国:Finnish Design Shop US
2019/03/25 全球购物
Myprotein法国官网:欧洲第一运动营养品牌
2019/03/26 全球购物
秘书行业自我鉴定范文
2013/12/30 职场文书
团队口号大全
2014/06/06 职场文书
幼儿老师求职信
2014/06/30 职场文书
项目委托协议书(最新)
2014/09/13 职场文书
初中英语教学随笔
2015/08/15 职场文书
护士旷工检讨书
2015/08/15 职场文书
抖音短视频(douyin)去水印工具的实现代码
2021/03/30 Javascript
MySQL Innodb关键特性之插入缓冲(insert buffer)
2021/04/08 MySQL