百度语音接口调用详解以及案例

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

猜你喜欢

转载自blog.csdn.net/Zp18189530679/article/details/84337044
今日推荐