用Python编程实现语音控制电脑
发布时间:2022-01-06 22:53:57
电脑面前的你,是否也希望能让电脑听命于你? 当你累的时候,只需说一声“我累了”,电脑就会放着优雅的轻音乐来让你放松。 或许你希望你在百忙之中,能让电脑郎读最新的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)
此段为运行主体,大意是开启语音监听,同时支持终端输入模式。如果你嗓子哑了的话,也可以打字来实现,哈哈~~


猜你喜欢
- 1. 下载2. 解压缩3. 添加path环境变量,路径指向mysql所在bin目录下4. 在主目录下创建data文件夹5. 注册window
- 代码如下:USE TestDB declare @conversation uniqueidentifier while exists (s
- 定义流的作用是使用统一的方式处理文件、网络和数据压缩等共用同一套函数和用法的操作。简单而言,流是具有流式行为的资源对象。因此,流可以线性读写
- 在网络设计领域关于Eye-Tracking的研究十分火爆,但是如何把这些研究结果转变为具体可行的设计来运作依旧是个难点。以下就是一些来自于E
- 如何通过表单创建一个Word?举个例子吧,我们先创建一个表单文件docform.htm,再用ASP程序(doccreate.asp)来处理表
- 上篇使用Vue.js制作仿Metronic高级表格(一)静态设计介绍了需求、原型设计以及静态页面实现,这篇讲解如何使用Vue渲染数据,实现动
- 如何存放或更新缓存?缓存数据来源是预知的,我们可以预先定义哪些 mutation 是缓存相关的。我们期望这个过程更自然一点,通过某种变化自动
- 原文地址:30 Days of Mootools 1.2 Tutorials - Day 21 - Classes part
- Ajax 是异步的JavaScript和XML的简称,是一种更新页面某部分的机制。它赋予了你从服务器获取数据后,更新页面某部分的权力,从而避
- 相比于原生的python开发核心包,Anaconda已经集成了许多的第三方库,但是这在实际应用中是远远不够的,因此我们需要手动安装第三方库使
- 每一字符串字符文字有一个字符集和一个校对规则,它不能为空。一个字符串文字可能有一个可选的字符集引介词和COLLATE子句:[_charset
- 首先介绍两种编码方式硬编码和onehot编码,在模型训练所需要数据中,特征要么为连续,要么为离散特征,对于那些值为非数字的离散特征,我们要么
- Python编程中经常遇到一些莫名其妙的错误, 其实这不是语言本身的问题, 而是我们忽略了语言本身的一些特性导致的,今天就来看下使用Pyth
- 最近开发vue项目过程中,由于产品需要在项目中添加富文本编辑器,也在npm上找了几个基于vue开发的富文本编辑器,但是对兼容性比较高,不能兼
- df.fillna主要用来对缺失值进行填充,可以选择填充具体的数字,或者选择临近填充。官方文档DataFrame.fillna(self,
- JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它
- Python 是由吉多·范罗苏姆(Guido Van Rossum)在 90 年代早期设计。 它是如今最常用的编程语言之一。它的语法简洁且优
- 不知道工商银行帐号是否是这样的格式, 如果错了请大家见谅!<script language="javascript"
- 方式1:引入普通的js文件,如user.js1.1、属性和方法都写在一个变量内部const user={ logi
- 比如user_num表:例1:查询出现过2次的user往往初学者会错误地认为在where 语句里直接使用count()算法,很显然这个想法是