1. 程式人生 > 程式設計 >python錄音並呼叫百度語音識別介面的示例

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環境下裝比較特殊,

windows環境下具體步驟如下:

第一步:下載whl檔案支援

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

python錄音並呼叫百度語音識別介面的示例

注意:

下載自己python直譯器對應版本的

不要下載錯了,資源很多

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

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

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

如果本地同時裝有python2和python3,想裝到python3裡可以在cmd命令裡把 pip 改成 pip3 即可

mac os 下安裝pyaudio步驟如下:

python錄音並呼叫百度語音識別介面的示例

到這裡就結束啦!

以上就是python錄音並呼叫百度語音識別介面的示例的詳細內容,更多關於python 錄音並呼叫語音識別介面的資料請關注我們其它相關文章!