Python实时语音识别控制

概述

本文中的语音识别功能采用 百度语音识别库 ,首先利用 PyAudio 库录制语音指令,保存为受支持的 wav 音频文件,然后利用 百度语音识别库 提供的方法实现语音识别,最后检测识别结果,利用 PyUserInput 库提供的方法模拟控制web页面滚动。

百度语音识别为开发者提供业界优质且免费的语音服务,通过场景识别优化,为车载导航,智能家居和社交聊天等行业提供语音解决方案,准确率达到90%以上,让您的应用绘“声”绘色。

准备工作

安装百度语音识别SDK

pip install baidu-aip

安装Python音频处理库 PyAudio

python -m pip install pyaudio

安装鼠标控制库 PyUserInput

pip install pyuserinput

PyUserInput 库依赖另外两个库 pywin32 和 pyHook ,需要单独安装。

安装方法可以参考下面这篇文章:Win10 Python3.5安装PyUserInput

令附文中提到的资源下载链接:lfd-pythonlibs

另外文中提到的两个包, 需要根据自己的系统和python版本来选择。

如果系统是64位的,就要选择带 amd64 的。

如果python版本为python3.7的,就要选择带 cp37 的。

比如:pywin32-223-cp37-cp37m-win_amd64.whl

pyHook-1.5.1-cp37-cp37m-win_amd64.whl

申请百度开发者帐号

参考下面链接中的文章注册百度帐号,完成开发者认证,创建应用,获取密钥

百度AI开放平台接入流程

用Pyaudio库录制音频

Pyaudio 是一个非常强大的音频处理库,简单几行代码即可实现音频播放,录制等功能.

百度语音识别API支持的语音格式有: pcm(不压缩)、wav(不压缩,pcm编码)、amr(压缩格式).

推荐 pcm , 采样率: 16000 固定值, 编码: 16bit , 位深: 单声道 .百度服务端会将非pcm格式, 转为pcm格式, 因此使用wav, amr会有额外的转换耗时.

为了实现实时语音识别功能, 这里通过pyaudio录制一段wav格式的音频, 报文成wav音频文件, 供后续识别时调用.

# 用Pyaudio库录制音频

# out_file:输出音频文件名

# rec_time:音频录制时间(秒)

def audio_record(out_file, rec_time):

CHUNK = 1024

FORMAT = pyaudio.paInt16 #16bit编码格式

CHANNELS = 1 #单声道

RATE = 16000 #16000采样频率

p = pyaudio.PyAudio()

# 创建音频流

stream = p.open(format=FORMAT, # 音频流wav格式

channels=CHANNELS, # 单声道

rate=RATE, # 采样率16000

input=True,

frames_per_buffer=CHUNK)

print("Start Recording...")

frames = [] # 录制的音频流

# 录制音频数据

for i in range(0, int(RATE / CHUNK * rec_time)):

data = stream.read(CHUNK)

frames.append(data)

# 录制完成

stream.stop_stream()

stream.close()

p.terminate()

print("Recording Done...")

# 保存音频文件

wf = wave.open(out_file, 'wb')

wf.setnchannels(CHANNELS)

wf.setsampwidth(p.get_sample_size(FORMAT))

wf.setframerate(RATE)

wf.writeframes(b''.join(frames))

wf.close()

调用百度语音API

# 读取paudio录制好的音频文件, 调用百度语音API, 设置api参数, 完成语音识别

# client:AipSpeech对象

# afile:音频文件

# afmt:音频文件格式(wav)

def aip_get_asrresult(client, afile, afmt):

# 选项参数:

# cuid String 用户唯一标识,用来区分用户,填写机器 MAC 地址或 IMEI 码,长度为60以内

# dev_pid String 语言类型(见下表), 默认1537(普通话 输入法模型)

# 识别结果已经被SDK由JSON字符串转为dict

result = client.asr(get_file_content(afile), afmt, 16000, {"cuid": CUID, "dev_pid": DEV_PID,})

#print(result)

# 如果err_msg字段为"success."表示识别成功, 直接从result字段中提取识别结果, 否则表示识别失败

if result["err_msg"] == "success.":

#print(result["result"])

return result["result"]

else:

#print(result["err_msg"])

return ""

dev_pid 参数列表

dev_pid

语言

模型

是否有标点

备注

1536

普通话(支持简单的英文识别)

搜索模型

无标点

支持自定义词库

1537

普通话(纯中文识别)

输入法模型

有标点

不支持自定义词库

1737

英语

有标点

不支持自定义词库

1637

粤语

有标点

不支持自定义词库

1837

四川话

有标点

不支持自定义词库

1936

普通话远场

远场模型

有标点

不支持

控制(鼠标)页面滚动

# 控制鼠标滚动

def mouse_control(dir_tr):

MOVE_DX = 5 # 每次滚动行数

ms = PyMouse()

horizontal = 0

vertical = 0

if dir_tr.find("上") != -1: # 向上移动

vertical = MOVE_DX

#print("vertical={0}, 向上".format(vertical))

elif dir_tr.find("下") != -1: # 向下移动

vertical = 0 - MOVE_DX

#print("vertical={0}, 向下".format(vertical))

elif dir_tr.find("左") != -1: # 向左移动

horizontal = 0 - MOVE_DX

#print("horizontal={0}, 向左".format(horizontal))

elif dir_tr.find("右") != -1: # 向右移动

horizontal = MOVE_DX

#print("horizontal={0}, 向右".format(horizontal))

#print("horizontal, vertical=[{0},{1}]".format(horizontal, vertical))

# 通过scroll(vertical, horizontal)函数控制页面滚动

# 另外PyMouse还支持模拟move光标,模拟鼠标click,模拟键盘击键等

ms.scroll(vertical, horizontal)

完成实时语音识别控制

while(True):

# 请说出语音指令,例如["向上", "向下", "向左", "向右"]

print(" ==================================================")

print("Please tell me the command(limit within 3 seconds):")

#print("Please tell me what you want to identify(limit within 10 seconds):")

audio_record(AUDIO_OUTPUT, 3) # 录制语音指令

print("Identify On Network...")

asr_result = aip_get_asrresult(client, AUDIO_OUTPUT, AUDIO_FORMAT) # 识别语音指令

if len(asr_result) != 0: # 语音识别结果不为空,识别结果为一个list

print("Identify Result:", asr_result[0])

print("Start Control...")

mouse_control(asr_result[0]) # 根据识别结果控制页面滚动

print("Control End...")

if asr_result[0].find("退出") != -1: # 如果是"退出"指令则结束程序

break;

time.sleep(1) # 延时1秒

程序运行截图

语音识别

语音控制

项目内文件截图

Python实时语音识别控制

注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权

python语音在线编辑-Python实时语音识别控制相关推荐

  1. python语音在线编辑-python实现语音在线合成,让你的小说自己念给你听

    前言 有声小说相信大家都不陌生了, 里面的音频基本都是一些声优录制的.其实除了录制音频, 咱们可以利用百度开放的api接口使用python语言在线合成语音. 制作属于自己的有声小说, 一睹为快吧!! ...

  2. python语音在线编辑-Python如何实现文本转语音

    准备 我测试使用的Python版本为2.7.10,如果你的版本是Python3.5的话,这里就不太适合了. 使用Speech API 原理 我们的想法是借助微软的语音接口,所以我们肯定是要进行调用 相 ...

  3. python语音在线编辑-Python:语音处理,实现在线朗读RFC文档或本地文本文件

    本文主要讲解如何使用python来实现将文本转为语音,以一个小例子为例,写了一下用pyTTS来朗读本地方件或在线朗读RFC文档,当然也可以修改一下,做成在线朗读新闻之类的,另本来想实现一个读中文小说的 ...

  4. Python实时语音识别控制

    Python实时语音识别控制 概述 本文中的语音识别功能采用 百度语音识别库 ,首先利用 PyAudio 库录制语音指令,保存为受支持的 wav 音频文件,然后利用 百度语音识别库 提供的方法实现语音 ...

  5. python实时语音识别控制_Python实时语音识别控制

    Python实时语音识别控制 概述 本文中的语音识别功能采用 百度语音识别库 ,首先利用 PyAudio 库录制语音指令,保存为受支持的 wav 音频文件,然后利用 百度语音识别库 提供的方法实现语音 ...

  6. python语音播报库-python 语音库

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! 我需要自动分离两位发言者的声音. 我刚开始学习语音识别,我看了python的wav ...

  7. 【Buzz】离线语音转文字、实时语音识别

    Buzz是基于 OpenAI Whisper的离线语音转文字(字幕),实时语音识别工具. 功能 实时语音转文字.实时翻译(需麦克风权限) 导入音频.视频文件(mp3.wav.m4a.ogg.mp4.w ...

  8. ASP.NET Core环境Web Audio API+SingalR+微软语音服务实现web实时语音识别

    处于项目需要,我研究了一下web端的语音识别实现.目前市场上语音服务已经非常成熟了,国内的科大讯飞或是国外的微软在这块都可以提供足够优质的服务,对于我们工程应用来说只需要花钱调用接口就行了,难点在于整 ...

  9. 简明python教程在线-简明python教程

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. usrbinpython#hello_world.pyprinthell ...

最新文章

  1. 百度地图API(二)
  2. 聊聊elasticsearch的RoutingService
  3. python做大数据的框架_Python+大数据计算平台,PyODPS架构手把手教你搭建
  4. Express框架实现原理
  5. 计算机网络ppt_大学四年,我这样学操作系统和计算机网络,毕业后成为了别人眼中的大神(附书籍推荐)
  6. python粒子风暴代码_turtle爆炸粒子效果源码
  7. c语言用凹入表法输出学生成绩,《数据结构课程设计方案》指导书9.doc
  8. 学习nodejs之hello world
  9. mysql多数据库并发控制_什么是数据库并发控制?数据库并发控制的主要方法是?...
  10. 【FZU 2277】Change
  11. 整理:周鸿祎谈如何写商业计划书
  12. 星三角启动的优缺点和内外接的区别
  13. 人生永远没有太晚的开始
  14. python根据出生年份计算年龄_python根据出生日期计算年龄的代码详解
  15. 8.基本数据类型详细讲解-list/tuple
  16. Linux开机密码重置
  17. 电影图标-黑客帝国(The Matrix)
  18. 【python】python语法糖
  19. 取得目录和取得操作系统盘符以及获取系统盘可用空间
  20. 数据标注软件 【labelimg】

热门文章

  1. 神经网络和反向传播算法——反向传播算法本质上是随机梯度下降,链式求导法则而来的...
  2. JD AWS vue上传文件
  3. Vue2接口地址配置(webpack)
  4. 为HTML5的未来制定学习计划
  5. 使用netty编写IM通信界面
  6. 2018年春季个人阅读计划
  7. HDU 6035 Colorful Tree(补集思想+树形DP)
  8. 清华大学计算机系网络教学视频31门计算机课程
  9. 杨威(为奥运冠军名字作诗)
  10. CF Gym102028G Shortest Paths on Random Forests