返回顶部
首页 > 资讯 > 后端开发 > Python >基于Python创建语音识别控制系统
  • 606
分享到

基于Python创建语音识别控制系统

2024-04-02 19:04:59 606人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

下面附上参考文章,这篇文章是通过识别出来的文字来打开浏览器中的默认网站。python通过调用百度api实现语音识别 题目很简单,利用语音识别识别说出来的文字,根据文字的内容来控制图形

下面附上参考文章,这篇文章是通过识别出来的文字来打开浏览器中的默认网站。python通过调用百度api实现语音识别

题目很简单,利用语音识别识别说出来的文字,根据文字的内容来控制图形移动,例如说向上,识别出文字后,画布上的图形就会向上移动。本文使用的是百度识别API(因为免费),自己做的流程图:

不多说,直接开始程序设计,首先登录百度云,创建应用

注意这里的API Key和Secret Key,要用自己的才能生效

百度语音识别有对应的文档,具体调用方法说的很清晰,如果想学习一下可以查看REST API文档

文档写的很详细,本文只说明用到的方法,语音识别使用方法为组装URL获取token,然后处理本地音频以JSON格式发送到百度语音识别服务器,获得返回结果。

百度语音识别支持pcm、wav等多种格式,百度服务端会将非pcm格式转成pcm格式,因此使用wav、amr格式会有额外的转换耗时。保存为pcm格式可以识别,只是windows自带播放器识别不了pcm格式的,所以改用wav格式,同时要引用wave库,功能为可读、写wav类型的音频文件。采样率使用了pcm采样率16000固定值,编码为16bit位深的单声道。

录音函数中使用了PyAudio库,是Python下的一个音频处理模块,用于将音频流输送到计算机声卡上。在当前文件夹打开一个新的音频进行录音并存放录音数据。本地录音:


def save_wave_file(filepath, data):
    wf = wave.open(filepath, 'wb')
    wf.setnchannels(channels)
    wf.setsampwidth(sampwidth)
    wf.setframerate(framerate)
    wf.writeframes(b''.join(data))
    wf.close()
 
 
# 录音
def my_record():
    pa = PyAudio()
    # 打开一个新的音频stream
    stream = pa.open(fORMat=paint16, channels=channels,
                     rate=framerate, input=True, frames_per_buffer=num_samples)
    my_buf = []  # 存放录音数据
    t = time.time()
    print('正在录音...')
    while time.time() < t + 5:  # 设置录音时间(秒)
        # 循环read,每次read 2000frames
        string_audio_data = stream.read(num_samples)
        my_buf.append(string_audio_data)
    print('录音结束.')
    save_wave_file(FILEPATH, my_buf)
    stream.close()

然后是获取token,根据创建应用得到的APIKey和SecreKey(这里要使用自己的)来组装URL获取token。在语音识别函数中调用获取的token和已经录制好的音频数据,按照要求的格式来写进jsON参数进行上传音频。

百度语音要求对本地语音二进制数据进行base64编码,使用base64库来进行编码。创建识别请求使用的是POST方式来进行提交,在识别函数中写入百度语音提供的短语音识别请求地址。识别结果会立刻返回,采用JSON格式进行封装,识别结果放在 JSON 的 “result” 字段中,统一采用 utf-8 方式编码。


# 组装url获取token
base_url = "https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=%s&client_secret=%s"
APIKey = "*****************"
SecreTKEy = "********************"
HOST = base_url % (APIKey, SecretKey)
 
 
def getToken(host):
    res = requests.post(host)
    r = res.json()['access_token']
    return r
 
 
# 传入语音二进制数据,token
# dev_pid为百度语音识别提供的几种语言选择,默认1537为有标点普通话
def speech2text(speech_data, token, dev_pid=1537):
    FORMAT = 'wav'
    RATE = '16000'
    CHANNEL = 1
    CUID = '*******'
    SPEECH = base64.b64encode(speech_data).decode('utf-8')
    data = {
        'format': FORMAT,
        'rate': RATE,
        'channel': CHANNEL,
        'cuid': CUID,
        'len': len(speech_data),
        'speech': SPEECH,
        'token': token,
        'dev_pid': dev_pid
    }
    url = 'Https://vop.baidu.com/server_api'  # 短语音识别请求地址
    headers = {'Content-Type': 'application/json'}
    print('正在识别...')
    r = requests.post(url, json=data, headers=headers)
    Result = r.json()
    if 'result' in Result:
        return Result['result'][0]
    else:
        return Result

最后我们编写控制移动函数,首先我们要知道如何来把控制图形移动来呈现出来。本项目中我们使用的是tkinter模块,Tkinter是一个python模块,是一个调用Tcl/Tk的接口,它是一个跨平台的脚本图形界面接口。是一个比较流行的python图形编程接口。最大的特点是跨平台,缺点是性能不太好,执行速度慢。

我们利用tkinter中的canvas来设置一个画布,并创建一个事件ID为1的矩形,把矩形放在画布中显示。在画布中添加Button按钮,回调中写入对应的函数,点击触发录制音频和语音识别。为了使代码更加简洁,我们把移动函数放在语音识别函数中调用,返回识别结果后对结果做出判断,最后使图形进行移动。


def move(result):
    print(result)
    if "向上" in result:
        canvas.move(1, 0, -30)  # 移动的是 ID为1的事物【move(2,0,-5)则移动ID为2的事物】,使得横坐标加0,纵坐标减30
    elif "向下" in result:
        canvas.move(1, 0, 30)
    elif "向左" in result:
        canvas.move(1, -30, 0)
    elif "向右" in result:
        canvas.move(1, 30, 0)
 
 
tk = Tk()
tk.title("语音识别控制图形移动")
Button(tk, text="开始录音", command=AI.my_record).pack()
Button(tk, text="开始识别", command=speech2text).pack()
canvas = Canvas(tk, width=500, height=500)  # 设置画布
canvas.pack()  # 显示画布
r = canvas.create_rectangle(180, 180, 220, 220, fill="red")  # 事件ID为1
mainloop()

个人习惯,我把语音识别和图形控制写在了两个文件里,这就导致main.py文件中没有办法使用AI.py文件函数中的返回值,因为我们使用的tkinter模块是不断循坏的,通过mainloop()才能结束循环,这样不断循坏就调用不了返回值,使用的方法是在main.py中重新构建一样函数来调用AI.py文件中的函数,并声明全局变量,把AI.py文件中的返回值放在main.py文件的全局变量中,这样就得到了返回值,再将函数写到Button回调中就实现了对应的功能。

其实代码写的十分麻烦,写在一个文件里会简单些,我画了两个文件的调用关系:

完整demo如下

AI.py


import wave  # 可读、写wav类型的音频文件。
import requests  # 基于urllib,采⽤Apache2 Licensed开源协议的 HTTP 库。在本项目中用于传递headers和POST请求
import time
import base64  # 百度语音要求对本地语音二进制数据进行base64编码
from pyaudio import PyAudio, paInt16  # 音频处理模块,用于将音频流输送到计算机声卡上
 
framerate = 16000  # 采样率
num_samples = 2000  # 采样点
channels = 1  # 声道
sampwidth = 2  # 采样宽度2bytes
FILEPATH = 'speech.wav'
 
# 组装url获取token
base_url = "https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=%s&client_secret=%s"
APIKey = "8bv3inF5roWBtEXYpZViCs39"
SecretKey = "HLXYiLGCpeOD6ddF1m6BvwcDZVOYtwwD"
HOST = base_url % (APIKey, SecretKey)
 
 
def getToken(host):
    res = requests.post(host)
    r = res.json()['access_token']
    return r
 
 
def save_wave_file(filepath, data):
    wf = wave.open(filepath, 'wb')
    wf.setnchannels(channels)
    wf.setsampwidth(sampwidth)
    wf.setframerate(framerate)
    wf.writeframes(b''.join(data))
    wf.close()
 
 
# 录音
def my_record():
    pa = PyAudio()
    # 打开一个新的音频stream
    stream = pa.open(format=paInt16, channels=channels,
                     rate=framerate, input=True, frames_per_buffer=num_samples)
    my_buf = []  # 存放录音数据
    t = time.time()
    print('正在录音...')
    while time.time() < t + 5:  # 设置录音时间(秒)
        # 循环read,每次read 2000frames
        string_audio_data = stream.read(num_samples)
        my_buf.append(string_audio_data)
    print('录音结束.')
    save_wave_file(FILEPATH, my_buf)
    stream.close()
 
 
def get_audio(file):
    with open(file, 'rb') as f:
        data = f.read()
    return data
 
 
# 传入语音二进制数据,token
# dev_pid为百度语音识别提供的几种语言选择,默认1537为有标点普通话
def speech2text(speech_data, token, dev_pid=1537):
    FORMAT = 'wav'
    RATE = '16000'
    CHANNEL = 1
    CUID = '*******'
    SPEECH = base64.b64encode(speech_data).decode('utf-8')
    data = {
        'format': FORMAT,
        'rate': RATE,
        'channel': CHANNEL,
        'cuid': CUID,
        'len': len(speech_data),
        'speech': SPEECH,
        'token': token,
        'dev_pid': dev_pid
    }
    url = 'https://vop.baidu.com/server_api'  # 短语音识别请求地址
    headers = {'Content-Type': 'application/json'}
    print('正在识别...')
    r = requests.post(url, json=data, headers=headers)
    Result = r.json()
    if 'result' in Result:
        return Result['result'][0]
    else:
        return Result

main.py


import AI
from tkinter import *  # 导入tkinter模块的所有内容
 
token = None
speech = None
result = None
 
 
def getToken():
    temptoken = AI.getToken(AI.HOST)
    return temptoken
 
 
def speech2text():
    global token
    if token is None:
        token = getToken()
    speech = AI.get_audio(AI.FILEPATH)
    result = AI.speech2text(speech, token, dev_pid=1537)
    print(result)
    move(result)
 
 
def move(result):
    print(result)
    if "向上" in result:
        canvas.move(1, 0, -30)  # 移动的是 ID为1的事物【move(2,0,-5)则移动ID为2的事物】,使得横坐标加0,纵坐标减30
    elif "向下" in result:
        canvas.move(1, 0, 30)
    elif "向左" in result:
        canvas.move(1, -30, 0)
    elif "向右" in result:
        canvas.move(1, 30, 0)
 
 
tk = Tk()
tk.title("语音识别控制图形移动")
Button(tk, text="开始录音", command=AI.my_record).pack()
Button(tk, text="开始识别", command=speech2text).pack()
canvas = Canvas(tk, width=500, height=500)  # 设置画布
canvas.pack()  # 显示画布
r = canvas.create_rectangle(180, 180, 220, 220, fill="red")  # 事件ID为1
mainloop()

文件关系

录制的音频会自动保存在当前文件夹下,就是speech文件

测试结果,运行

点击开始录音

点击开始识别

然后可以看到图形往右移动

经测试,大吼效果更佳 

到此这篇关于基于Python创建语音识别控制系统的文章就介绍到这了,更多相关Python 语音识别控制系统内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 基于Python创建语音识别控制系统

本文链接: https://lsjlt.com/news/159297.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 基于Python创建语音识别控制系统
    下面附上参考文章,这篇文章是通过识别出来的文字来打开浏览器中的默认网站。python通过调用百度api实现语音识别 题目很简单,利用语音识别识别说出来的文字,根据文字的内容来控制图形...
    99+
    2024-04-02
  • 基于Python实现语音识别和语音转文字
    目录前言直接使用获取权限1.环境准备2.获取权限代码实现1.获取access_token2.获取转换后音频3.配置接口参数4.完整demo5.执行前言 嗨嗨,大家好呀 ~ 今天给你们...
    99+
    2024-04-02
  • 基于Python搭建人脸识别考勤系统
    目录介绍人脸识别的实际应用构建人脸识别系统的步骤安装库导入库加载图像查找人脸位置并绘制边界框为人脸识别训练图像构建人脸识别系统人脸识别系统面临的挑战结论介绍 在本文中,你将学习如何使...
    99+
    2024-04-02
  • 基于Python手写拼音识别
    目录一、算法构造1.简单介绍一下knn算法2.Python实现KNN二、准备数据1、将图片转换成数组矩阵三、处理数据:训练集与测试集1、区分训练集和测试集2、加载数据3、建立训练数据...
    99+
    2024-04-02
  • Android基于讯飞语音SDK实现语音识别
    一、准备工作 1、你需要android手机应用开发基础 2、科大讯飞语音识别SDK android版 3、科大讯飞语音识别开发API文档 4、android手机 关于科大讯飞S...
    99+
    2022-06-06
    讯飞 sdk 语音识别 Android
  • win8系统语音识别在哪里?怎样激活windows8系统语音识别功能
      激活windows8系统语音识别功能:   1、打开语音识别设置界面后,点击下一步;   2、选择使用麦克风的类型;   3、以头戴式麦克风为例,设置麦克风;   4、朗读上面的文本,调整音量; ...
    99+
    2022-06-04
    语音识别 系统 功能
  • 基于Python的车牌识别系统实现
    本文将以基于Python的车牌识别系统实现为方向,介绍车牌识别技术的基本原理、常用算法和方法,并详细讲解如何利用Python语言实现一个完整的车牌识别系统。 目录 引言车牌识别技...
    99+
    2023-10-18
    python 车牌识别 计算机视觉 机器学习 原力计划
  • win8语音识别怎么用?win8语音控制使用教程
    不知道win8语音识别怎么用下文将演示win8语音控制使用教程,有了语音识别功能,我们就可以完全抛弃鼠标。想要体验语音控制的朋友请参考下文步骤操作吧~    --启动语音识别功能   首先,用户需要准备一部笔记...
    99+
    2023-06-04
    win8 语音识别 语音控制 教程 语音
  • 基于C#实现语音识别功能详解
    在.NET4.0中,我可以借助System.Speech组件让电脑来识别我们的声音。 以上,当我说"name",显示"Darren",我说&...
    99+
    2024-04-02
  • 基于C#怎么实现语音识别功能
    今天小编给大家分享一下基于C#怎么实现语音识别功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。在.NET4.0中,我可以借...
    99+
    2023-06-30
  • 基于Python编写一个图片识别系统
    目录项目介绍环境准备程序原理实现脚本测试效果总结项目介绍 本项目将使用python3去识别图片是否为色情图片,会使用到PIL这个图像处理库,并且编写算法来划分图像的皮肤区域 介绍一下...
    99+
    2024-04-02
  • 基于Python的车牌识别系统的实现
    目录 第1章 绪论 1 1.1研究背景与意义 1 1.2课题研究现状 1 1.3研究目标 1 1.4研究内容与论文组织结构 1 第2章 相关理论与关键技术 3 2.1计算机视觉概述 3 2.2 Ope...
    99+
    2023-10-20
    python 计算机视觉 opencv 车牌识别系统 毕业设计
  • 基于Python编写一个语音合成系统
    目录背景语音合成系统准备工作步骤代码实现背景 一直对语音合成系统比较感兴趣,总想能给自己合成一点内容,比如说合成小说,把我下载的电子书播报给我听等等。 语音合成系统 其实就是一个基于...
    99+
    2024-04-02
  • 如何使用Python和创建简单语音识别引擎
    如何使用Python和创建简单语音识别引擎,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。语音识别是机器或程序识别口语中的单词和短语并将其转换为机器可读格式的能力。通常,这些...
    99+
    2023-06-16
  • 基于Python如何实现植物识别小系统
    这篇文章主要介绍了基于Python如何实现植物识别小系统,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。正文1)环境安装本文用到的环境:Python3.7  Pych...
    99+
    2023-06-22
  • 基于Python实现简单的人脸识别系统
    目录前言基本原理代码实现创建虚拟环境安装必要的库前言 最近又多了不少朋友关注,先在这里谢谢大家。关注我的朋友大多数都是大学生,而且我简单看了一下,低年级的大学生居多,大多数都是为了完...
    99+
    2024-04-02
  • Python实战之手势识别控制电脑音量
    目录一、环境配置二、代码介绍三、使用方式今天给大家带来一个OpenCV的实战小项目——手势识别控制电脑音量 先上个效果图: 通过大拇指和食指间的开合距离来...
    99+
    2023-05-18
    Python手势识别控制电脑音量 Python手势识别 Python控制音量
  • 基于Python实现简易的植物识别小系统
    导语 "  花草树木 皆有呈名 热爱自然,从认识自然开始 " 现在的植物爱好者,遇到不认得的植物。怎么办呢? 前几天去逛商场,一进商城一一一一门口的花店吸引了我的注意:摆放...
    99+
    2024-04-02
  • 基于Python怎么编写一个语音合成系统
    这篇文章主要介绍了基于Python怎么编写一个语音合成系统的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇基于Python怎么编写一个语音合成系统文章都会有所收获,下面我们一起来看看吧。背景一直对语音合成系统比较...
    99+
    2023-06-29
  • win10系统如何关闭语音识别功能
    小编给大家分享一下win10系统如何关闭语音识别功能,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!使用win+r打开运行,输入“control.exe”并点击确定。修改查看方式为大图标,然后打开语音识别。接着点击高级语音选...
    99+
    2023-06-28
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作