实战:手把手教你实现用语音智能控制电脑 | 附完整代码
# 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
实战:手把手教你实现用语音智能控制电脑 | 附完整代码相关推荐
- 手把手教你入门深度强化学习(附链接代码)
来源:机器之心 本文约2600字,建议阅读10分钟. GitHub 开源了一份深度强化学习的教程,总结了从 DQN 到彩虹模型的理论和代码实现. 深度强化学习在机器学习领域的热度一直很高.最近,Git ...
- 实战:掌握PyTorch图片分类的简明教程 | 附完整代码
作者 | 小宋是呢 转载自CSDN博客 1.引文 深度学习的比赛中,图片分类是很常见的比赛,同时也是很难取得特别高名次的比赛,因为图片分类已经被大家研究的很透彻,一些开源的网络很容易取得高分.如果大家 ...
- 内网渗透-实战|手把手教你如何进行内网渗透
实战|手把手教你如何进行内网渗透 x00 Preface 内网渗透主要是基于前期外围打点getshell的webserver,通过收集webserver上的信息,然后对其他内网主机进行口令上的攻击,当 ...
- 简单有趣的 NLP 教程:手把手教你用 PyTorch 辨别自然语言(附代码)
简单有趣的 NLP 教程:手把手教你用 PyTorch 辨别自然语言(附代码) 雷锋网(公众号:雷锋网)按:本文作者甄冉冉,原载于作者个人博客,雷锋网已获授权. 最近在学pyTorch的实际应用 ...
- 手把手教你开发photoshop面板插件(附demo和工具)
手把手教你开发photoshop面板插件(附demo和工具) 一.前言 二.插件演示 三.目录文件介绍 3.1 插件安装 3.2 开启ps开发模式 3.3 插件文件介绍 3.4 manifest 文件 ...
- 实战|手把手教你如何使用抓包神器MitmProxy
大家好,我是阿辰,今天教大家如何使用MitmProxy抓包工具. 玩爬虫的小伙伴都知道,抓包工具除了MitmProxy外,还有Fiddler.Charles以及浏览器netwrok等 既然都有这么多抓 ...
- AST实战|手把手教你还原ob混淆:ob混淆代码特征
ob混淆过的代码有那些特征? 特征一: 大数组 + 移位自执行函数 + 解密字符串函数. 下面的代码是一个之前我在官网上混淆的一个例子: 可以看到,大数组为变量 _0x33fc,移位自执行函数体比 ...
- 实战案例,手把手教你构建电商用户画像 | 附代码
导读:本文以真实案例,手把手教你搭建电商系统的用户画像. 先来看该电商用户画像用到的标签. 数据内容包括user_id(用户身份).item_id(商品).IDbehavior_type(用户行为类型 ...
- 最详细的爬虫实战 | 手把手教你用Python爬虫(附详细源码)
什么是爬虫? 实践来源于理论,做爬虫前肯定要先了解相关的规则和原理,要知道互联网可不是法外之地,你一顿爬虫骚操作搞不好哪天就- 首先,咱先看下爬虫的定义:网络爬虫(又称为网页蜘蛛,网络机器人,在FOA ...
最新文章
- Unity UI和引用的管理中心
- sql表中只有子节点的递归_动态规划与静态规划、递归、分治、回溯
- linux内核关闭tcp校验,linux内核tcp调优规范与方案
- 王道408数据结构——第五章 树与二叉树
- 阿里P8架构师谈:多线程、架构、异步消息、Redis等性能优化策略
- “用于无监督图像生成解耦的正交雅可比正则化”论文解读
- 在 Kubernetes 集群中使用 MetalLB 作为 Load Balancer(上)
- 垃圾回收算法与实现系列-String在虚拟机中的实现
- 将ONNX对象检测模型转换为iOS Core ML(一)
- 力扣 二叉搜索树的最小绝对差
- 如何用C#代码判断一个类的类型
- 解决Iphonex 底部按钮fixed,bottom:0 底部留白问题
- ValueError: You are trying to load a weight file containing 0 layers into a model with 16 layers.
- Intellij IDEA 初学入门图文教程(六) —— IDEA 在 Performing VCS Refresh 卡死
- vivo Xplay的usb调试模式在哪里,打开vivo Xplayusb调试模式的教程
- 网站使用微信登录接口,所踩的坑...
- 2021-03-03 地理配准
- 神州数码交换机CS6200命令(一)
- SYN480R模块解码EV1527教程
- 2021-2027全球与中国植物基牛奶替代品市场现状及未来发展趋势