#!/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步驟以下:
到這裏就結束啦!
給個讚唄~