实战:手把手教你实现用语音智能控制电脑 | 附完整代码
# encoding=utf-8
import jieba from aip
import AipSpeech
import os
import sys
import time
import win32con
import wave
import numpy as np from pyaudio
import PyAudio,paInt16
import pygame from pynput.keyboard
import Key, Controller from random
import choice
#开始录音标识
APP_ID = '15118279'#百度分配的APP_ID注册时可以看到,这里是我的
API_KEY ='xUx0Gm2AG2YMtA3FnGfwoKdP'#百度分配的API_KEY注册时可以看到,这里是我的
SECRET_KEY = 'hdxyMvABhUD4xnacGtDdeHbEOUGmdjNx'#百度分配的SECRET_KEY注册时可以看到,这里是我的
然后用代码client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)实现对百度语音识别的调用;result = client.synthesis('语音控制开始', 'zh', 1, {'vol': 5,})用以标志语音控制的开始语句,同时接上下面的判断语句判断模块调用是否成功:
# 识别正确返回语音二进制错误则返回dict 参照下面错误码
if not isinstance(result,dict): with open('audio.mp3', 'wb') as f: f.write(result)#将“语音控制开始”这段文字语音翻译成音频文件audio.mp3
pygame.mixer.init()
track = pygame.mixer.music.load('audio.mp3')
pygame.mixer.music.play()
time.sleep(2)
pygame.mixer.music.stop()
print("开始")
#############################
class GenAudio(object): def __init__(self): self.num_samples = 2000 # pyaudio内置缓冲大小 self.sampling_rate = 8000 # 取样频率 self.level = 1500 # 声音保存的阈值 self.count_num = 20 # count_num个取样之内出现COUNT_NUM个大于LEVEL的取样则记录声音 self.save_length = 8 # 声音记录的最小长度:save_length?*?num_samples?个取样 self.time_count = 8 # 录音时间,单位s self.voice_string = [] def save_wav(self, filename): wf = wave.open(filename, 'wb') wf.setnchannels(1) wf.setsampwidth(2) wf.setframerate(self.sampling_rate) wf.writeframes(np.array(self.voice_string).tostring()) wf.close() def read_audio(self): pa = PyAudio() stream = pa.open(format=paInt16,channels=1, rate=self.sampling_rate, input=True, frames_per_buffer=self.num_samples) save_count = 0 save_buffer = [] time_count = self.time_count while True: time_count -= 1 # ?读入num_samples个取样 string_audio_data =stream.read(self.num_samples) # ?将读入的数据转换为数组 audio_data =np.fromstring(string_audio_data, dtype=np.short) # 计算大于?level?的取样的个数 large_sample_count =np.sum(audio_data > self.level) print(np.max(audio_data)), "large_sample_count=>",large_sample_count # ?如果个数大于COUNT_NUM,则至少保存SAVE_LENGTH个块 if large_sample_count >self.count_num: save_count = self.save_length else: save_count -= 1 if save_count < 0: save_count = 0 if save_count > 0: save_buffer.append(string_audio_data) else: if len(save_buffer) > 0: self.voice_string =save_buffer save_buffer = [] print("Recode?a?piece?of??voice?successfully!") return True if time_count == 0: if len(save_buffer) > 0: self.voice_string =save_buffer save_buffer = [] print("Recode?a?piece?of??voice?successfully!") return True else: return True
r = GenAudio()
r.read_audio()
#百度语音识别
# 读取文件
def get_file_content(filePath): cmd_str = "ffmpeg -y -i %s -acodec pcm_s16le -f s16le -ac 1 -ar 16000 %s.pcm"%(filePath,filePath) os.system(cmd_str) # 调用系统命令ffmpeg,传入音频文件名即可 with open(filePath + ".pcm",'rb') as fp: return fp.read()
然后用# 识别本地文件
a =client.asr(get_file_content('test.wav'), 'pcm', 16000, { 'dev_pid': 1536,
})
if a.get('result'): a=a.get('result')[0]
print(a)即可实现对录音文件的识别,此时会输出识别的结果,例如a=“我想问下徐州的天气”。再接着依靠jieba分词对你说的话分段
seg_list = jieba.cut(a)
s=("".join(seg_list))
print(s)
a="["+s+"]"
此时就会将你说的话一个字一个字的分开,并保存为数组a。
再定义几个数组为
song=["歌","歌曲","音乐","听"]
movie=["播放","电视","看","电影"]
brower=["搜索","浏览"]
if "酷狗" in a: os.startfile("D:\program files(x86)\kugou\KuGou.exe")
if "优酷" in a: os.startfile(r"E:\YouKu\YoukuClient\proxy\YoukuDesktop.exe")
if "关机" in a: os.system("shutdown -p")
如果你说的话中有“wifi”这两个字的话,就连接wifi,具体代码如下:
if "wifi" in a: os.startfile(r'F:\代码\python\连接WiFi\jgh.exe')
for i in brower: if i in a: os.startfile(r"D:\program files(x86)\360se6\Application\360se.exe") time.sleep(20) keyboard = Controller() keyboard.type(s) time.sleep(2) keyboard.press(Key.enter)
for i in song: if i in a: Newdir = [] path = r'C:\Users\asus\Music' filelist = os.listdir(path) # 该文件夹下所有的文件(包括文件夹) for files in filelist: # 遍历所有文件 Olddir = os.path.join(path,files) # 原来的文件路径 if os.path.isdir(Olddir): # 如果是文件夹则跳过 continue filename =os.path.splitext(files)[0] # 文件名 filetype = os.path.splitext(files)[1] # 文件扩展名 new = path + "\\" + files if filetype == ".mp3": Newdir.append(new) os.startfile(choice(Newdir))
◆
精彩推荐
◆
2019 中国大数据技术大会(BDTC)再度来袭!豪华主席阵容及百位技术专家齐聚,15 场精选专题技术和行业论坛,超强干货+技术剖析+行业实践立体解读,深入解析热门技术在行业中的实践落地。
即日起,限量 5 折票开售,数量有限,扫码购买,先到先得!

推荐阅读
@程序员:Python 3.8正式发布,重要新功能都在这里
AutoML很火,过度吹捧的结果?
AI大佬“互怼”:Bengio和Gary Marcus隔空对谈深度学习发展现状
Python脚本BUG引发学界震动,影响有多大?
太鸡冻了!我用Python偷偷查到暗恋女生的名字
苹果 5G 芯片“难产”
如果把线程当作一个人来对待,秒懂
C 语言这么厉害,它自身是用什么语言写的?
从4个维度深度剖析闪电网络现状,在CKB上实现闪电网络的理由 | 博文精选

你点的每个“在看”,我都认真当成了AI
相关文章:

C++/C++11中左值、左值引用、右值、右值引用的使用
C的表达式要不然是右值(rvalue),要不然就是左值(lvalue)。这两个名词是从C语言继承过来的,原本是为了帮助记忆:左值可以位于赋值语句的左侧,右值则不能。 在C语言中,二者的区别就没那么简单了。一个左值表达式的求值结…

Could not create the view: An unexpected exception was thrown. Myeclipse空间报错
转载于:https://blog.51cto.com/82654993/1424339

Banknote Dataset(钞票数据集)介绍
Banknote Dataset(钞票数据集):这是从纸币鉴别过程中的图像里提取的数据,用来预测钞票的真伪的数据集。该数据集中含有1372个样本,每个样本由5个数值型变量构成,4个输入变量和1个输出变量。小波变换工具用于从图像中提取特征。这是…

快速适应性很重要,但不是元学习的全部目标
作者 | Khurram Javed, Hengshuai Yao, Martha White译者 | Monanfei出品 | AI科技大本营(ID:rgznai100)实践证明,基于梯度的元学习在学习模型初始化、表示形式和更新规则方面非常有效,该模型允许从少量样本中进行快速适应。这些方…

面试题-自旋锁,以及jvm对synchronized的优化
背景 想要弄清楚这些问题,需要弄清楚其他的很多问题。 比如,对象,而对象本身又可以延伸出很多其他的问题。 我们平时不过只是在使用对象而已,怎么使用?就是new 对象。这只是语法层面的使用,相当于会了一门编…

DNS解析故障
在实际应用过程中可能会遇到DNS解析错误的问题,就是说当我们访问一个域名时无法完成将其解析到IP地址的工作,而直接输入网站IP却可以正常访问,这就是因为DNS解析出现故障造成的。这个现象发生的机率比较大,所以本文将从零起步教给…

cinder存储服务
一、cinder 介绍: 理解 Block Storage 操作系统获得存储空间的方式一般有两种: 1、通过某种协议(SAS,SCSI,SAN,iSCSI 等)挂接裸硬盘,然后分区、格式化、创建文件系统;或者直接使用裸硬盘存储数据࿰…
Ubuntu 14.04 64位机上配置Android Studio操作步骤
Android Studio是一个为Android平台开发程序的集成开发环境。2013年5月16日在Google I/O上发布,可供开发者免费使用。Android Studio基于JetBrains IntelliJ IDEA,为Android开发特殊定制,并在Windows、OS X和Linux平台上均可运行。1. 从 htt…

大规模1.4亿中文知识图谱数据,我把它开源了
作者 | Just出品 | AI科技大本营(ID:rgznai100)人工智能从感知阶段逐步进入认知智能的过程中,知识图谱技术将为机器提供认知思维能力和关联分析能力,可以应用于机器人问答系统、内容推荐等系统中。不过要降低知识图谱技术应用的门…

使用CSS 3创建不规则图形
2019独角兽企业重金招聘Python工程师标准>>> 前言 CSS 创建复杂图形的技术即将会被广泛支持,并且应用到实际项目中。本篇文章的目的是为大家开启它的冰山一角。我希望这篇文章能让你对不规则图形有一个初步的了解。 现在,我们已经可以使用CSS…

谷歌丰田联合成果ALBERT了解一下:新轻量版BERT,参数小18倍,性能依旧SOTA
作者 | Less Wright编译 | ronghuaiyang来源 | AI公园(ID:AI_Paradise)【导读】这是来自Google和Toyota的新NLP模型,超越Bert,参数小了18倍。你以前的NLP模型参数效率低下,而且有些过时。祝你有美好的一天。谷歌Resear…

C++中extern C的使用
C程序有时需要调用其它语言编写的函数,最常见的是调用C语言编写的函数。像所有其它名字一样,其它语言中的函数名字也必须在C中进行声明,并且该声明必须指定返回类型和形参列表。对于其它语言编写的函数来说,编译器检查…

Linux之tmpwatch命令
1、tmpwatch命令功能简介[rootvms002 /]# whatis tmpwatch tmpwatch (8) - removes files which havent been accessed for a period of... #删除一段时间内未被访问的文件tmpwatch删除最近一段时间内没有被访问的文件,时间以小时为单位,节省磁盘空间。…

你不得不知道的Visual Studio 2012(1)- 每日必用功能
2019独角兽企业重金招聘Python工程师标准>>> Visual Studio 2012已经正式发布,有很多花哨的新特性,也有很多方便使用者的新功能,当然也有负面声音。对于我们程序员,最关心的还是如何快速掌握VS2012,用于平时…

C++11中std::unique_lock的使用
std::unique_lock为锁管理模板类,是对通用mutex的封装。std::unique_lock对象以独占所有权的方式(unique owership)管理mutex对象的上锁和解锁操作,即在unique_lock对象的声明周期内,它所管理的锁对象会一直保持上锁状态;而unique…

为何Google将几十亿行源代码放在一个仓库?| CSDN博文精选
作者 | Rachel Potvin,Josh Levenberg译者 | 张建军编辑 | apddd【AI科技大本营导读】与大多数开发者的想象不同,Google只有一个代码仓库——全公司使用不同语言编写的超过10亿文件,近百TB源代码都存放在自行开发的版本管理系统Piper中&#…

小小hanoi
为什么80%的码农都做不了架构师?>>> View Code #include " iostream " using namespace std; int k 0 ; void hanoi( int m , char a , char b, char c){ if (m 1 ) { k ; printf( " %c->%c " ,a , c); return…

Unity3D心得分享
本篇文章的内容以各种tips为主,不间断更新 2019/05/10 最近更新: 使用Instantiate初始化参数去实例对象 Unity DEMO学习 Unity3D Adam Demo的学习与研究 Unity3D The Blacksmith Demo部分内容学习 Viking Village维京村落demo中的地面积水效果 Viking V…

django搭建示例-ubantu环境
python3安装--------------------------------------------------------------------------- 最新的django依赖python3,同时ubantu系统默认自带python2与python3,这里单独安装一套python3,并且不影响原来的python环境 django demo使用sqlite3,…

C++11中std::lock_guard的使用
互斥类的最重要成员函数是lock()和unlock()。在进入临界区时,执行lock()加锁操作,如果这时已经被其它线程锁住,则当前线程在此排队等待。退出临界区时,执行unlock()解锁操作。更好的办法是采用”资源分配时初始化”(RAII)方法来加…

OpenAI机械手单手轻松解魔方,背靠强化学习+新技术ADR
编译 | 夕颜出品 | AI科技大本营(ID:rgznai100)【导读】10月15日,人工智能研究机构OpenAI发布了一条机械手单手解魔方的视频。这个自学式的类人机器人手臂名为 Dactyl,不仅可以单手解魔方,甚至能在外加各种干扰&#x…

AMD and CMD are dead之js模块化黑魔法
缘由 在2013-03-06 13:58的时候,曾甩下一片文章叫:《为什么不使用requirejs和seajs》,并放下豪言说发布一款完美的模块化库,再后来就把那篇文章删了,再然后就没有然后。该用seajs还用seajs,甚至我码的SCJ都…

一文了解Python常见的序列化操作
关于我 编程界的一名小小程序猿,目前在一个创业团队任team lead,技术栈涉及Android、Python、Java和Go,这个也是我们团队的主要技术栈。 联系:hylinux1024gmail.com 0x00 marshal marshal使用的是与Python语言相关但与机器无关的二…
TEE(Trusted Execution Environment)简介
TEE(Trusted Execution Environment),可信执行环境,该环境可以保证不被常规操作系统干扰的计算,因此称为”可信”。这是通过创建一个可以在TrustZone的”安全世界”中独立运行的小型操作系统实现的,该操作系统以系统调用(由TrustZ…

自动驾驶关键环节:行人的行为意图建模和预测(上)
作者 | 黄浴出品 | AI科技大本营(ID:rgznai100)【导读】介绍一下最近行人行为意图建模和预测的研究工作,还是分上下两部分,本文为上半部分。Social LSTM: Human Trajectory Prediction in Crowded Spaces比较早的是斯坦福大学 201…

自定义windows下自动清除文件夹或者文件的只读属性的脚本
脚本内容入下:其中脚本中 ”/d"作用 (可以用来改变当前驱动器目录)例如: 我现在是在D盘,现在我要切换到C:\windows目录 脚本参数中 ATTRIB -R /S /D 解释内容如下:(上述脚本参数中的 cd …

C++11容器中新增加的emplace相关函数的使用
C11中,针对顺序容器(如vector、deque、list),新标准引入了三个新成员:emplace_front、emplace和emplace_back,这些操作构造而不是拷贝元素。这些操作分别对应push_front、insert和push_back,允许我们将元素放置在容器头…

Silverlight+WCF 新手实例 象棋 主界面-棋谱-获取列表(三十八)
2019独角兽企业重金招聘Python工程师标准>>> 在线演示地址:SilverlightWCF 新手实例 象棋 在线演示 在SilverlightWCF 新手实例 象棋 主界面-棋谱-布局写谱(三十六)中,我们完成下棋双方的棋谱显示,这节,我们为观众增加…
确认!语音识别大牛Daniel Povey将入职小米,曾遭霍普金斯大学解雇,怒拒Facebook
整理 | 夕颜 出品 | AI科技大本营(ID:rgznai100) 【导读】10 月 17 日,语音界传奇 Daniel Povey 发布推特,宣布自己 2019 年末将要入职小米,目前正在签订合同阶段,入职后,他将带领一支团队研发…

软链接与硬链接
$ ln f1 f2 #创建f1的一个硬连接文件f2$ ln -s f1 f3 #创建f1的一个符号连接文件f3$ ls -li # -i参数显示文件的inode节点信息转载于:https://www.cnblogs.com/zhizouxiao/p/3794668.html