python錄音並調用百度語音識別接口

#!/usr/bin/env python
import requests
import json
import base64
import pyaudio
import wave
import os
import psutil


#首先配置必要的信息
def bat(voice_path):
    baidu_server = 'https://aip.baidubce.com/oauth/2.0/token?'
    grant_type = 'client_credentials'
    client_id = 'uj70rS1LiwZ9sQDvMSUqKsie' #API KEY
    client_secret = 'Q88eav41PzeNLczZ3hlRjhR8e4WShXwD' #Secret KEY   這裏能夠本身去百度註冊,這裏是個人API KEY 和 Secret KEY

    #合成請求token的url
    url = baidu_server+'grant_type='+grant_type+'&client_id='+client_id+'&client_secret='+client_secret

    #獲取token
    res = requests.get(url).text
    data = json.loads(res)
    token = data['access_token']

    #設置音頻的屬性,採樣率,格式等
    VOICE_RATE = 8000
    FILE_NAME = voice_path
    # USER_ID = '16241950' #這裏的id隨便填填就好啦,我填的本身暱稱
    FILE_TYPE = 'wav'
    CUID="wate_play"
    #讀取文件二進制內容
    f_obj = open(FILE_NAME, 'rb')
    content = base64.b64encode(f_obj.read())   # 百度語音識別須要base64編碼格式
    speech = content.decode("utf-8")
    size = os.path.getsize(FILE_NAME)

    #json封裝
    datas = json.dumps({
        'format': FILE_TYPE,
        'rate': VOICE_RATE,
        'channel': 1,
        'cuid': CUID,
        'token': token,
        'speech': speech,
        'len': size,
        "dev_pid":"1536"
    })
    return datas

#設置headers和請求地址url
def post(datas):
    headers = {'Content-Type':'application/json'}
    url = 'https://vop.baidu.com/server_api'
    # url = "http://vop.baidu.com/server_api"

    #用post方法傳數據
    request = requests.post(url, datas, headers)
    result = json.loads(request.text)
    text = result.get("result")
    if result['err_no'] == 0:
        return text
    else:
        return "Error"


def get_audio(filepath):
    input("回車開始錄音 >>>")     #輸出提示文本,input接收一個值,轉爲str,賦值給aa
    CHUNK = 256                 #定義數據流塊
    FORMAT = pyaudio.paInt16    #量化位數(音量級劃分)
    CHANNELS = 1               # 聲道數;聲道數:能夠是單聲道或者是雙聲道
    RATE = 8000                # 採樣率;採樣率:一秒內對聲音信號的採集次數,經常使用的有8kHz, 16kHz, 32kHz, 48kHz, 11.025kHz, 22.05kHz, 44.1kHz
    RECORD_SECONDS = 5          #錄音秒數
    WAVE_OUTPUT_FILENAME = filepath     #wav文件路徑
    p = pyaudio.PyAudio()               #實例化

    stream = p.open(format=FORMAT,
                    channels=CHANNELS,
                    rate=RATE,
                    input=True,
                    frames_per_buffer=CHUNK)
    print("*"*10, "開始錄音:請在5秒內輸入語音")
    frames = []                                                 #定義一個列表
    for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):      #循環,採樣率11025 / 256 * 5
        data = stream.read(CHUNK)                               #讀取chunk個字節 保存到data中
        frames.append(data)                                     #向列表frames中添加數據data
    # print(frames)
    print("*" * 10, "錄音結束\n")

    stream.stop_stream()
    stream.close()          #關閉
    p.terminate()           #終結

    wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')                  #打開wav文件建立一個音頻對象wf,開始寫WAV文件
    wf.setnchannels(CHANNELS)                                   #配置聲道數
    wf.setsampwidth(p.get_sample_size(FORMAT))                  #配置量化位數
    wf.setframerate(RATE)                                       #配置採樣率
    wf.writeframes(b''.join(frames))                            #轉換爲二進制數據寫入文件
    wf.close()              #關閉
    return


def check_disk():
    list_drive = psutil.disk_partitions()  # 找出本地磁盤列表,保存的是結構體對象
    list_disk = []
    for drive in list_drive:
        list_disk.append(drive.device)
    return list_disk


if __name__ == '__main__':
    list_disk = check_disk() # 檢索本地磁盤
    dirname_path = os.path.join(list_disk[0], "voice") # 設置語音文件存放路徑, 
                                                                   (mac os下須要本身定存儲路徑)
    if not os.path.exists(dirname_path):
        os.makedirs(dirname_path)

    filename = "voice.wav"  # 定義語音文件名
    in_path = os.path.join(dirname_path, filename)

    get_audio(in_path) # 錄音

    datas = bat(in_path) # 封裝百度語音識別須要的配置信息,返回請求頭
    res = post(datas) # 鏈接百度語音識別接口,獲得識別結果
    print("識別結果:",res[0])

實現效果:python

 

在上述代碼中,須要裝到requests、psutil、pyaudio等庫,其中pyaudio這個庫在python3環境下裝比較特殊,json

windows環境下具體步驟以下:windows

第一步:下載whl文件支持api

url:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyaudioapp

注意:post

下載本身python解釋器對應版本的ui

不要下載錯了,資源不少編碼

 

 

第二步:打開cmd,cd 進入下載的whl所在目錄url

   執行命令:pip install Twisted-18.7.0-cp36-cp36m-win_amd64.whl     #  下載的什麼版本,後面就跟什麼版本spa

 

第三步:執行命令:pip install pyaudio     安裝

若是本地同時裝有python2和python3,想裝到python3裏能夠在cmd命令裏把 pip 改爲 pip3 便可

 

 

 

mac os 下安裝pyaudio步驟以下:

 

 

到這裏就結束啦!

給個讚唄~

相關文章
相關標籤/搜索