目录

思路

成果

步骤

录音代码

语音识别代码


思路

使用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相关推荐

  1. Qt中使用百度语音API将语音转化为文字

    在Qt中使用百度语音API将语音转化为文字 widget.cpp代码 yuyin1.pro代码 widget.h代码 main.cpp代码(没有改动可不看) 最近学校实训要做一个嵌入式智能家居项目,我 ...

  2. 百度云开放语音API 智能语音demo

    前置条件": 1.要在百度云创建对应的应用 2.python要安装对应api pip install baidu-apifrom aip import AipSpeech AppID='19 ...

  3. 使用Web Speech API制作语音控制的音频播放器

    /* For hiding / showing the extra block */ .sp_hiddenblock {margin: 2px;border: 1px solid rgb(250, 1 ...

  4. python语音转文字api_大数据分析Python PyAudio库语音API转文字教程

    在大数据分析Python语音转文字教程中,我将演示如何使用Python将语音转换为文本.这可以借助"语音识别" API和" PyAudio"库来完成. 语音是最 ...

  5. Java 语音识别(百度语音API)

    系列文章: Java 语音记录(录音,存储为WAV文件):https://blog.csdn.net/haoranhaoshi/article/details/87888382 Java 语音识别(百 ...

  6. API接口调用里的QPS指什么?百度语音API里的QPS实例说明

    QPS(query per second) 指每秒向服务发送的请求数量峰值,相当于每个API接口每秒可以允许请求的并发上限量. 举例: 百度语音 API 就有 QPS 限制. 如果你有多个客户端一起调 ...

  7. Python 技术篇-百度语音API鉴权认证获取Access Token实例演示

    百度语音官方鉴权认证文档 下面来为大家进行鉴权认证获取Access Token的演示: 首先需要创建自己的个人语音应用,在应用列表里进行创建. 百度语音个人应用列表 然后用这个应用里的 API Key ...

  8. 百度文字转语音Api,文字长度限制问题

    百度合成语音接口,文字内容长度限制,纯汉字不得超过2048个(不包含任何其他字符,否则报错) 百度语音合成接口使用,就不再累赘,去参考这个博主的文章 https://blog.csdn.net/bel ...

  9. 百度语音api的文字转语音,语音转文字-yellowcong

    百度语言api的实现中,我发现坑爹了,文字转语音很容易的就实现了,但是语言转文字,就坑死了,我后来发现是音频文件的问题,mp3的文件百度云不支持,后来才搞明白,百度支持pcm的,需要将mp3的转化为p ...

最新文章

  1. 快速幂 + 矩阵快速幂
  2. java中用数组模拟的酒店管理系统
  3. ThreadLocal是救火队长
  4. OpenCV:No value has been specified for property 'manifestOutputDirectory'
  5. 【转载】性能测试浅谈
  6. stotybord如何添加子视图_Revit软件技巧合集(建筑构件、视图处理、建筑表现、高级技巧)...
  7. codeforces CF986C AND Graph 建圖 dfs
  8. 【C#】使用DWM实现无边框窗体阴影或全透窗体
  9. android弹窗不能手动关闭_Android弹窗的实现及相关bug
  10. MySql类似Oracle的dual虚拟表
  11. 晶体(谐振器)震荡电路与参数
  12. Redis和Memcache和MongoDB简介及区别分析(整理)
  13. 柳神(柳婼)PAT甲级题目链接
  14. UE4 设置Play下的默认相机FOV(Field Of View)视角
  15. java实现微信退款
  16. 小程序开发.云数据库
  17. simulink模糊逻辑控制器的使用小结
  18. 云服务器被植入挖矿木马,CPU飙升200%
  19. 关于、主板BIOS中.调试与优化
  20. 移动端web开发技巧 -- 转载

热门文章

  1. 【HaaS Python硬件积木】HCSR04超声波测距传感器
  2. Hive之Order,Sort,Cluster and Distribute By
  3. Java8新特性之新时间API
  4. 如果你对自己有要求 | “回顾,再出发”——记2020软工提问回顾与个人总结
  5. 博弈论石子游戏——nim 游戏
  6. 怎么远程计算机控制系统,电脑远程控制怎么弄 电脑进行远程控制详细教程
  7. 有关国内的流氓软件和强制安装软件(上传附件防部分流氓软件)
  8. android指定sim卡拨号,使用双SIM卡设备中的指定SIM拨打电话
  9. webofscience入口注册_Web of Science科研数据库平台
  10. 熬夜肝了这一份C++开发详细学习路线