通过百度语音api实现语音控制五子棋——基于flask
目录
思路
成果
步骤
录音代码
语音识别代码
思路
使用python的pyaudio库来进行语音录入,将语音存放在本地文件,然后再通过百度api进行语音识别,通过识别内容判断下一步棋落在哪。
成果
登录页面
游戏页面
步骤
因为代码太长,文章发不出来,所以这里只放最重要的录音代码和语音识别代码,完整代码仓库地址放在了最后
录音代码
#录音并存放在本地文件中
import os
import sys
import wave
import numpy as np
from datetime import datetime
from pyaudio import PyAudio, paInt16class GenAudio(object):def __init__(self):self.num_samples = 4000 # pyaudio内置缓冲大小self.sampling_rate = 16000 # 取样频率self.level = 1500 # 声音保存的阈值self.count_num = 20 # count_num个取样之内出现COUNT_NUM个大于LEVEL的取样则记录声音self.save_length = 8 # 声音记录的最小长度:save_length * num_samples 个取样self.time_count = 16 # 录音时间,单位sself.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 = 0save_buffer = []time_count = self.time_countwhile True:time_count -= 1# 读入num_samples个取样string_audio_data = stream.read(self.num_samples)# 将读入的数据转换为数组# audio_data = np.fromstring(string_audio_data, dtype=np.short)audio_data = np.frombuffer(string_audio_data, dtype='int16')# 计算大于 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_lengthelse:save_count -= 1if save_count < 0:save_count = 0if save_count > 0:save_buffer.append(string_audio_data)else:if len(save_buffer) > 0:self.voice_string = save_buffersave_buffer = []print("Recode a piece of voice successfully!")return Trueif time_count == 0:if len(save_buffer) > 0:self.voice_string = save_buffersave_buffer = []print("Recode a piece of voice successfully!")return Trueelse:return Falsereturn True# 单独测试录音时要把这块的代码去掉
# if __name__ == "__main__":
# r = GenAudio()
# r.read_audio()
# r.save_wav("./templates/test.wav")
语音识别代码
使用百度语音识别api要去短语音识别标准版_短语音识别-百度AI开放平台 (baidu.com)
注册一下,具体注册步骤可以上网搜索,新用户送了几万次调用机会,不是新用户也没关系,这个也不是很贵,调用100次也才3毛钱,用来自己测试demo足够了。
注册好了以后有一个api key和secret key,将这个两个放入下面对应的代码中就行了。
下面是代码:
# coding=utf-8
# 此文档参考百度api的官方demo
import sys
import json
import base64
import timeIS_PY3 = sys.version_info.major == 3if IS_PY3:from urllib.request import urlopenfrom urllib.request import Requestfrom urllib.error import URLErrorfrom urllib.parse import urlencodetimer = time.perf_counter
else:from urllib2 import urlopenfrom urllib2 import Requestfrom urllib2 import URLErrorfrom urllib import urlencodeif sys.platform == "win32":timer = time.clockelse:# On most other platforms the best timer is time.time()timer = time.time#你的API_KEY
API_KEY = 'fk6lgD'
#你的SECRET_KEY
SECRET_KEY = 'GELxN59GvdVBSpaErcG'# 需要识别的文件
AUDIO_FILE = './templates/test.wav' # 只支持 pcm/wav/amr 格式,极速版额外支持m4a 格式
# 文件格式
FORMAT = AUDIO_FILE[-3:] # 文件后缀只支持 pcm/wav/amr 格式,极速版额外支持m4a 格式CUID = '123456PYTHON'
# 采样率
RATE = 16000 # 固定值# 普通版DEV_PID = 1537 # 1537 表示识别普通话,使用输入法模型。根据文档填写PID,选择语言及识别模型
ASR_URL = 'http://vop.baidu.com/server_api'
SCOPE = 'audio_voice_assistant_get' # 有此scope表示有asr能力,没有请在网页里勾选,非常旧的应用可能没有#测试自训练平台需要打开以下信息, 自训练平台模型上线后,您会看见 第二步:“”获取专属模型参数pid:8001,modelid:1234”,按照这个信息获取 dev_pid=8001,lm_id=1234
# DEV_PID = 8001 ;
# LM_ID = 1234 ;# 忽略scope检查,非常旧的应用可能没有
# SCOPE = Falseclass DemoError(Exception):pass""" TOKEN start """TOKEN_URL = 'http://aip.baidubce.com/oauth/2.0/token'def fetch_token():params = {'grant_type': 'client_credentials','client_id': API_KEY,'client_secret': SECRET_KEY}post_data = urlencode(params)if (IS_PY3):post_data = post_data.encode( 'utf-8')req = Request(TOKEN_URL, post_data)try:f = urlopen(req)result_str = f.read()except URLError as err:result_str = err.read()if (IS_PY3):result_str = result_str.decode()result = json.loads(result_str)if ('access_token' in result.keys() and 'scope' in result.keys()):if SCOPE and (not SCOPE in result['scope'].split(' ')): # SCOPE = False 忽略检查raise DemoError('scope is not correct')return result['access_token']else:raise DemoError('MAYBE API_KEY or SECRET_KEY not correct: access_token or scope not found in token response')""" TOKEN end """# 单独测试语音转文字时要把这块的注释去掉
# if __name__ == '__main__':
# token = fetch_token()
#
# speech_data = []
# with open(AUDIO_FILE, 'rb') as speech_file:
# speech_data = speech_file.read()
#
# length = len(speech_data)
# if length == 0:
# raise DemoError('file %s length read 0 bytes' % AUDIO_FILE)
# speech = base64.b64encode(speech_data)
# if (IS_PY3):
# speech = str(speech, 'utf-8')
# params = {'dev_pid': DEV_PID,
# #"lm_id" : LM_ID, #测试自训练平台开启此项
# 'format': FORMAT,
# 'rate': RATE,
# 'token': token,
# 'cuid': CUID,
# 'channel': 1,
# 'speech': speech,
# 'len': length
# }
# post_data = json.dumps(params, sort_keys=False)
# # print post_data
# req = Request(ASR_URL, post_data.encode('utf-8'))
# req.add_header('Content-Type', 'application/json')
# try:
# begin = timer()
# f = urlopen(req)
# result_str = f.read()
# print ("Request time cost %f" % (timer() - begin))
# except URLError as err:
# print('asr http response http code : ' + str(err.code))
# result_str = err.read()
#
# if (IS_PY3):
# result_str = str(result_str, 'utf-8')
# print(result_str)
# with open("result.txt","w") as of:
# of.write(result_str)
有什么不会的地方可以给我留言,看到了会回复
完整项目的git仓库链接:基于flask的语音控制五子棋: 基于flask的语音控制五子棋,使用百度语音识别api (gitee.com)
通过百度语音api实现语音控制五子棋——基于flask相关推荐
- Qt中使用百度语音API将语音转化为文字
在Qt中使用百度语音API将语音转化为文字 widget.cpp代码 yuyin1.pro代码 widget.h代码 main.cpp代码(没有改动可不看) 最近学校实训要做一个嵌入式智能家居项目,我 ...
- 百度云开放语音API 智能语音demo
前置条件": 1.要在百度云创建对应的应用 2.python要安装对应api pip install baidu-apifrom aip import AipSpeech AppID='19 ...
- 使用Web Speech API制作语音控制的音频播放器
/* For hiding / showing the extra block */ .sp_hiddenblock {margin: 2px;border: 1px solid rgb(250, 1 ...
- python语音转文字api_大数据分析Python PyAudio库语音API转文字教程
在大数据分析Python语音转文字教程中,我将演示如何使用Python将语音转换为文本.这可以借助"语音识别" API和" PyAudio"库来完成. 语音是最 ...
- Java 语音识别(百度语音API)
系列文章: Java 语音记录(录音,存储为WAV文件):https://blog.csdn.net/haoranhaoshi/article/details/87888382 Java 语音识别(百 ...
- API接口调用里的QPS指什么?百度语音API里的QPS实例说明
QPS(query per second) 指每秒向服务发送的请求数量峰值,相当于每个API接口每秒可以允许请求的并发上限量. 举例: 百度语音 API 就有 QPS 限制. 如果你有多个客户端一起调 ...
- Python 技术篇-百度语音API鉴权认证获取Access Token实例演示
百度语音官方鉴权认证文档 下面来为大家进行鉴权认证获取Access Token的演示: 首先需要创建自己的个人语音应用,在应用列表里进行创建. 百度语音个人应用列表 然后用这个应用里的 API Key ...
- 百度文字转语音Api,文字长度限制问题
百度合成语音接口,文字内容长度限制,纯汉字不得超过2048个(不包含任何其他字符,否则报错) 百度语音合成接口使用,就不再累赘,去参考这个博主的文章 https://blog.csdn.net/bel ...
- 百度语音api的文字转语音,语音转文字-yellowcong
百度语言api的实现中,我发现坑爹了,文字转语音很容易的就实现了,但是语言转文字,就坑死了,我后来发现是音频文件的问题,mp3的文件百度云不支持,后来才搞明白,百度支持pcm的,需要将mp3的转化为p ...
最新文章
- 快速幂 + 矩阵快速幂
- java中用数组模拟的酒店管理系统
- ThreadLocal是救火队长
- OpenCV:No value has been specified for property 'manifestOutputDirectory'
- 【转载】性能测试浅谈
- stotybord如何添加子视图_Revit软件技巧合集(建筑构件、视图处理、建筑表现、高级技巧)...
- codeforces CF986C AND Graph 建圖 dfs
- 【C#】使用DWM实现无边框窗体阴影或全透窗体
- android弹窗不能手动关闭_Android弹窗的实现及相关bug
- MySql类似Oracle的dual虚拟表
- 晶体(谐振器)震荡电路与参数
- Redis和Memcache和MongoDB简介及区别分析(整理)
- 柳神(柳婼)PAT甲级题目链接
- UE4 设置Play下的默认相机FOV(Field Of View)视角
- java实现微信退款
- 小程序开发.云数据库
- simulink模糊逻辑控制器的使用小结
- 云服务器被植入挖矿木马,CPU飙升200%
- 关于、主板BIOS中.调试与优化
- 移动端web开发技巧 -- 转载
热门文章
- 【HaaS Python硬件积木】HCSR04超声波测距传感器
- Hive之Order,Sort,Cluster and Distribute By
- Java8新特性之新时间API
- 如果你对自己有要求 | “回顾,再出发”——记2020软工提问回顾与个人总结
- 博弈论石子游戏——nim 游戏
- 怎么远程计算机控制系统,电脑远程控制怎么弄 电脑进行远程控制详细教程
- 有关国内的流氓软件和强制安装软件(上传附件防部分流氓软件)
- android指定sim卡拨号,使用双SIM卡设备中的指定SIM拨打电话
- webofscience入口注册_Web of Science科研数据库平台
- 熬夜肝了这一份C++开发详细学习路线