1.获取的API Key及Secret Key
1.1 在控制台中选择语音
1.2 进入到如下界面进行创建应用(“接口选择”这一项不用填写)
2.调用接口
2.1 pycharm中新建一个python文件(voice.py),输入以下代码。
from aip import AipSpeech
""" 你的 APPID AK SK """
APP_ID = '#'
API_KEY = '#'
SECRET_KEY = '#'
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
说明:
- AipSpeech是语音识别的Python SDK客户端,为使用语音识别的开发人员提供了一系列的交互方法。python SDK(python软件开发工具包)中集成了python中所有的范例、技术文档以及工具。
- APP_ID:标识用户创建的一个应用
- API_KEY:公钥
- SECRET_KEY:用户用于加密认证字符串和百度云用来验证认证字符串的密钥,其中SK必须保密,只有用户和百度云知道。
- 注:APP_ID、API_KEY、SECRET可在“应用列表”中查看,它们三个对应同一个应用
- 认证过程:当百度云接收到用户的请求后,系统将使用相同的SK和同样的认证机制生成认证字符串,并与用户请求中包含的认证字符串进行比对。如果认证字符串相同,系统认为用户拥有指定的操作权限,并执行相关操作;如果认证字符串不同,系统将忽略该操作并返回错误码。
- client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)用于用户和百度云之间的认证,认证通过后,返回一个用于识别语音的客户端对象。
2.2 在voice.py文件中输入以下代码
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
# 识别本地文件
res = client.asr(get_file_content(r'C:\Users\Administrator\Desktop\public\8k.pcm'), 'pcm', 8000, {
'dev_pid': 1536,
})
print(res)
- get_file_content(filePath):编写了一个调用文件的函数
- asr(path, fomat, rate, {"dev_pid" : "语种代码"})
- 作用:识别别本地文件
- path:本地文件路径,文件的格式必须是pcm、war或者amr格式(本地文件是一个音频文件)
- fomat :文件的类型(pcm、wav、amr)
- rate:采样率(8k、16k)
- 语种代码
dev_pid | 语言 | 模型 | 是否有标点 | 备注 |
1536 | 普通话(支持简单的英文识别) | 搜索模型 | 无标点 | 支持自定义词库 |
1537 | 普通话(纯中文识别) | 输入法模型 | 有标点 | 不支持自定义词库 |
1737 | 英语 |
| 有标点 | 不支持自定义词库 |
1637 | 粤语 |
| 有标点 | 不支持自定义词库 |
1837 | 四川话 |
| 有标点 | 不支持自定义词库 |
1936 | 普通话远场 | 远场模型 | 有标点 | 不支持 |
- 示例
-
#调用麦克分 from pyaudio import PyAudio, paInt16 import numpy as np import wave class recoder: NUM_SAMPLES = 2000 #pyaudio内置缓冲大小 SAMPLING_RATE = 8000 #取样频率 LEVEL = 500 #声音保存的阈值 COUNT_NUM = 20 #NUM_SAMPLES个取样之内出现COUNT_NUM个大于LEVEL的取样则记录声音 SAVE_LENGTH = 8 #声音记录的最小长度:SAVE_LENGTH * NUM_SAMPLES 个取样 TIME_COUNT = 15 #录音时间,单位s Voice_String = [] def savewav(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.writeframes(self.Voice_String.decode()) wf.close() def recoder(self): pa = PyAudio() stream = pa.open(format=paInt16, channels=1, rate=self.SAMPLING_RATE, input=True, frames_per_buffer=self.NUM_SAMPLES) save_count = 0 save_buffer = [] time_count = self.TIME_COUNT while True: time_count -= 1 # print time_count # 读入NUM_SAMPLES个取样 string_audio_data = stream.read(self.NUM_SAMPLES) # 将读入的数据转换为数组 audio_data = np.fromstring(string_audio_data, dtype=np.short) # 计算大于LEVEL的取样的个数 large_sample_count = np.sum( audio_data > self.LEVEL ) print(np.max(audio_data)) # 如果个数大于COUNT_NUM,则至少保存SAVE_LENGTH个块 if large_sample_count > self.COUNT_NUM: save_count = self.SAVE_LENGTH else: save_count -= 1 if save_count < 0: save_count = 0 if save_count > 0 : # 将要保存的数据存放到save_buffer中 #print save_count > 0 and time_count >0 save_buffer.append( string_audio_data ) else: #print save_buffer # 将save_buffer中的数据写入WAV文件,WAV文件的文件名是保存的时刻 #print "debug" if len(save_buffer) > 0 : self.Voice_String = save_buffer save_buffer = [] print("Recode a piece of voice successfully!") return True if time_count==0: if len(save_buffer)>0: self.Voice_String = save_buffer save_buffer = [] print("Recode a piece of voice successfully!") return True else: return False def radio(): r = recoder() r.recoder() r.savewav("test.wav")
#调用我写的接口 from aip import AipSpeech from yuying import radio import time """ 你的 APPID AK SK """ APP_ID = '#' API_KEY = '#' SECRET_KEY = '#' client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) # 读取文件 def get_file_content(filePath): with open(filePath, 'rb') as fp: return fp.read() def radio(): r = recoder() r.recoder() r.savewav("test.wav") # 识别本地文件 while True: radio() res = client.asr(get_file_content(r'test.wav'), 'wav', 8000, { 'dev_pid': 1536, }) if "result" in res.keys(): for i in res["result"]: print(i) else: break