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("\n\n==================================================")

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的简单调用,正好写文章记录下.目前搜到的帖子里,有现成的调用百度语音API来对音频文件进行识别的:也有通过谷歌语音服务来实现了实时 ...

  2. python检测键盘输入_python实时检测键盘输入函数的示例

    在嵌入式.尤其是机器人的python编程中,经常需要实时检测用户的键盘输入来随时控制机器人,这段代码可以帮助我们提取用户输入的字符,并在按下键盘的时候作出反应. import sys import t ...

  3. python和手势控制_Python手势识别与控制

    # Python手势识别与控制 ## 概述 本文中的手势识别与控制功能主要采用 [OpenCV](https://opencv.org/) 库实现, OpenCV是一个基于BSD许可(开源)发行的跨平 ...

  4. python怎么输出小数部分_python 输出小数控制

    一.要求较小的精度 将精度高的浮点数转换成精度低的浮点数. 1.round()内置方法 round()不是简单的四舍五入的处理方式. >>> round(2.5) 2 >> ...

  5. python自动化控制_python用于自动化控制编程

    Python自动化是做什么的 软件测试里面有Python自动化测试这个课程吗? 在人工智能+大数据的飞速发展的大环境下,Python开发语言日渐火爆,Python自动化测试也将逐渐取代传统的软件测试, ...

  6. python键盘控制_python如何直接控制鼠标键盘

    一.简介 我们知道在windows下输入:win + r,会弹出下面的窗口,而在下面的窗口出现后我们接着按下esc键,下面的窗口会消失 现在设想我们想在python代码里控制键盘,想通过运行代码-&g ...

  7. python黄金走势预测_python实时获取和讯网纸黄金价格信息

    python实时获取和讯网纸黄金价格信息 #!/usr/bin/env python #encoding:utf-8 '''getHexunGold.py 获取和讯网最新的黄金价格信息(人民币/克)' ...

  8. python控制软件点击_Python小程序 控制鼠标循环点击代码实例

    Python小程序 控制鼠标循环点击代码实例 这篇文章主要介绍了Python小程序 控制鼠标循环点击代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以 ...

  9. python麦克风监听_python实时监听麦克风

    首先安装pyaudio 到官网下载pa_stable_v190600_20161030.tgz (←或者直接点击下载) 2, 下载之后解压进入文件夹 3, 在文件夹下打开命令行输入以下命令 conda ...

最新文章

  1. Blender2.9全流程创建逼真未来科幻蝙蝠汽车视频教程
  2. poj1129Channel Allocation
  3. linux 批量创建用户和删除用户
  4. 知新 | koa框架入门到熟练第二章
  5. crossorigin注解添加了解决不了跨域问题_springboot 处理跨域的2种方式
  6. 3-unit8 Mariadb数据库
  7. python方法调用名字不一样怎么办_python如何通过实例方法名字调用方法
  8. tp3.2 视图中常用使用
  9. ubuntu 10.04 下安装 wine 所得所获【转】
  10. U盘安装CentOS系统
  11. 无人车系统(七):Udacity ‘s无人驾驶仿真环境(社区介绍)
  12. NBA数据爬取及存取
  13. Pygame详解(十一):Rect 对象
  14. 论文阅读—图像分割方法综述(二)(arXiv:[cs:cv]20200410)
  15. 12个有趣的c面试题目
  16. 第三方App接入微信登录 解读
  17. 从哪里租vps远程桌面服务器,vps远程桌面服务器出租费用
  18. PS透视模型动作插件:Perspective Mockups mac(支持ps2021)
  19. (转)设置Sysctl.conf用以提高Linux的性能(最完整的sysctl.conf优化方案)
  20. CSS3 帧动画(Sprite,直译叫雪碧图)

热门文章

  1. python3.7.0怎么运行_安装运行Python 3.7的步骤
  2. 【河北工业大学】考研初试复试资料分享
  3. 长沙云图,VR全景“云探校”招生择校新潮流!
  4. [Python开发] 使用python读取图片的EXIF
  5. Fastone api provided for SMIC
  6. 如何在WPS Office 个人版中使用VBA语言
  7. 关于女孩子日记本的最新动态
  8. 温度报警器c语言课程设计,温度报警器课程设计报告.doc
  9. 编写一个19*19的围棋游戏
  10. 如何将文字转换成语音,这种简单方法,建议收藏