?最近有個項目需要做視覺自動化處理的工具,最后選用的軟件為python,剛好這個機會進行系統學習。短時間學習,需要快速開發,所以記錄要點步驟,防止忘記。
?鏈接:
開源 python 應用 開發(一)python、pip、pyAutogui、python opencv安裝-CSDN博客
開源 python 應用 開發(二)基于pyautogui、open cv 視覺識別的工具自動化-CSDN博客
開源 python 應用 開發(三)python語法介紹-CSDN博客
開源 python 應用 開發(四)python文件和系統綜合應用-CSDN博客
開源 python 應用 開發(五)python opencv之目標檢測-CSDN博客
開源 python 應用 開發(六)網絡爬蟲-CSDN博客
開源 python 應用 開發(七)數據可視化-CSDN博客
開源 python 應用 開發(八)圖片比對-CSDN博客
開源 python 應用 開發(九)目標跟蹤-CSDN博客
開源 python 應用 開發(十)音頻壓縮-CSDN博客
開源 python 應用 開發(十一)百度語音識別API-CSDN博客
?推薦鏈接:
開源 Arkts 鴻蒙應用 開發(一)工程文件分析-CSDN博客
開源 Arkts 鴻蒙應用 開發(二)封裝庫.har制作和應用-CSDN博客
開源 Arkts 鴻蒙應用 開發(三)Arkts的介紹-CSDN博客
開源 Arkts 鴻蒙應用 開發(四)布局和常用控件-CSDN博客
開源 Arkts 鴻蒙應用 開發(五)控件組成和復雜控件-CSDN博客
?推薦鏈接:
開源 java android app 開發(一)開發環境的搭建-CSDN博客
開源 java android app 開發(二)工程文件結構-CSDN博客
開源 java android app 開發(三)GUI界面布局和常用組件-CSDN博客
開源 java android app 開發(四)GUI界面重要組件-CSDN博客
開源 java android app 開發(五)文件和數據庫存儲-CSDN博客
開源 java android app 開發(六)多媒體使用-CSDN博客
開源 java android app 開發(七)通訊之Tcp和Http-CSDN博客
開源 java android app 開發(八)通訊之Mqtt和Ble-CSDN博客
開源 java android app 開發(九)后臺之線程和服務-CSDN博客
開源 java android app 開發(十)廣播機制-CSDN博客
開源 java android app 開發(十一)調試、發布-CSDN博客
開源 java android app 開發(十二)封庫.aar-CSDN博客
推薦鏈接:
開源C# .net mvc 開發(一)WEB搭建_c#部署web程序-CSDN博客
開源 C# .net mvc 開發(二)網站快速搭建_c#網站開發-CSDN博客
開源 C# .net mvc 開發(三)WEB內外網訪問(VS發布、IIS配置網站、花生殼外網穿刺訪問)_c# mvc 域名下不可訪問內網,內網下可以訪問域名-CSDN博客
開源 C# .net mvc 開發(四)工程結構、頁面提交以及顯示_c#工程結構-CSDN博客
??????開源 C# .net mvc 開發(五)常用代碼快速開發_c# mvc開發-CSDN博客
本章內容為將短語音轉文本的辦法,使用百度語音識別,通過百度云短語音的API將WAV音頻文件提交到百度云,轉換為文字返回。
一、主要內容
使用百度語音識別API(REST API)將WAV音頻文件轉換為文字的Python腳本
需要安裝pydub庫,在cmd命令行下安裝庫
pip install requests -i https://mirrors.aliyun.com/pypi/simple/
二、API Key 和 Secret Key獲取
進入百度智能云? ->? 選擇短語音識別標準版 ->??選擇開通付費,默認贈送10小時流量,不購買資源
->??實名認證后獲得,api key 和 secret key??
在以下頁面可以查看API Key 和 Secret Key
三、源代碼分析
1. 導入依賴
python
import base64 ? ? ?# Base64編碼
import urllib ? ? ?# URL編碼
import requests ? ?# HTTP請求
import json ? ? ? ?# JSON處理
import os ? ? ? ? ?# 文件操作
2. 核心函數分析
main() 函數
主要流程:
文件驗證:檢查音頻文件是否存在
文件信息獲取:獲取文件大小
構建請求:
使用正確的參數格式(format: "wav")
包含音頻參數(rate: 16000, channel: 1)
獲取access_token
將音頻文件轉為Base64編碼
發送請求:向百度API發送POST請求
響應處理:詳細打印響應信息和解析結果
get_file_content_as_base64() 函數
功能:將音頻文件轉換為Base64編碼
支持可選URL編碼
使用二進制讀取確保兼容性
get_access_token() 函數
功能:獲取百度API的訪問令牌
使用client_credentials授權模式
包含完整的錯誤處理
安全地顯示token(只顯示前20字符)
3. API接口細節
端點:https://vop.baidu.com/server_api
必需參數:
format: 音頻格式(wav)
rate: 采樣率(16000)
channel: 聲道數(1)
token: 訪問令牌
speech: Base64編碼的音頻內容
len: 文件大小
以下為源碼:
import base64
import urllib
import requests
import json
import osAPI_KEY = ""#自己的API_KEY
SECRET_KEY = ""#自己的API_KEYdef main():# 使用原始字符串或正斜杠來處理Windows路徑audio_file_path = r"C:\Users\Administrator\Desktop\test_16k.wav"# 檢查文件是否存在if not os.path.exists(audio_file_path):print(f"錯誤:文件不存在 - {audio_file_path}")return# 獲取文件大小file_size = os.path.getsize(audio_file_path)url = "https://vop.baidu.com/server_api"# 構建請求payloadpayload = json.dumps({"format": "wav", # 如果是wav文件,應該用wav而不是pcm"rate": 16000,"channel": 1,"cuid": "lOClNo961PMousWYLfpHH22FyeYGHqKr","token": get_access_token(),"speech": get_file_content_as_base64(audio_file_path, False),"len": file_size # 使用實際的文件大小}, ensure_ascii=False)headers = {'Content-Type': 'application/json','Accept': 'application/json'}try:response = requests.post(url, headers=headers, data=payload.encode("utf-8"))# 打印詳細的響應信息print(f"狀態碼: {response.status_code}")print("響應內容:")print(response.text)# 嘗試解析JSON響應try:result = response.json()print("\n解析后的結果:")print(json.dumps(result, ensure_ascii=False, indent=2))except json.JSONDecodeError:print("響應不是有效的JSON格式")except requests.exceptions.RequestException as e:print(f"請求錯誤: {e}")except Exception as e:print(f"其他錯誤: {e}")def get_file_content_as_base64(path, urlencoded=False):"""獲取文件base64編碼:param path: 文件路徑:param urlencoded: 是否對結果進行urlencoded :return: base64編碼信息"""try:with open(path, "rb") as f:content = base64.b64encode(f.read()).decode("utf8")if urlencoded:content = urllib.parse.quote_plus(content)return contentexcept Exception as e:print(f"讀取文件錯誤: {e}")return Nonedef get_access_token():"""使用 AK,SK 生成鑒權簽名(Access Token):return: access_token,或是None(如果錯誤)"""try:url = "https://aip.baidubce.com/oauth/2.0/token"params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY}response = requests.post(url, params=params)response.raise_for_status() # 檢查請求是否成功result = response.json()access_token = result.get("access_token")if access_token:print(f"成功獲取access_token: {access_token[:20]}...") # 只顯示前20個字符return access_tokenelse:print(f"獲取access_token失敗: {result}")return Noneexcept requests.exceptions.RequestException as e:print(f"獲取access_token請求錯誤: {e}")return Noneexcept Exception as e:print(f"獲取access_token其他錯誤: {e}")return Noneif __name__ == '__main__':main()
三、效果演示
將錄音文件test.wav文件放到和python文件同一個目錄,運行效果如下,生產了16K頻率的音頻文件。