Python 百度語音識別與合成REST API及ffmpeg使用
作業系統:Windows
Python:3.5
歡迎加入學習交流QQ群:657341423
注意事項:介面支援 POST 和 GET兩種方式,個人支援用post模式,因為get的話,如果get資料太長,會出現缺失的。
語音識別要求支援的語音格式
原始 PCM 的錄音引數必須符合 8k/16k 取樣率、16bit 位深、單聲道,支援的壓縮格式有:pcm(不壓縮)、wav、opus、amr、x-flac。
簡單說,語音引數必需要 8k/16k 取樣率、16bit 位深、單聲道,不然會出現內容和文字不相符的情況。
網上這類教程基本上都是Python urllib2實現的,這裡我使用requests實現。
import requests
import json
import base64
import wave
from pydub import AudioSegment ###需要安裝pydub、ffmpeg
import io
class BaiduRest:
def __init__(self, cu_id, api_key, api_secert):
# token認證的url
self.token_url = "https://openapi.baidu.com/oauth/2.0/token"
# 語音合成的resturl
self.getvoice_url = "http://tsn.baidu.com/text2audio"
# 語音識別的resturl
self.upvoice_url = 'http://vop.baidu.com/server_api'
self.cu_id = cu_id
self.getToken(api_key, api_secert)
return
def getToken(self, api_key, api_secert):
# 1.獲取token
data={'grant_type':'client_credentials','client_id':api_key,'client_secret':api_secert}
r=requests.post(self.token_url,data=data)
Token=json.loads(r.text)
self.token_str = Token['access_token']
def getVoice(self, text, filename):
# 2. 向Rest介面提交資料
data={'tex':text,'lan':'zh','cuid':self.cu_id,'ctp':1,'tok':self.token_str}
r=requests.post(self.getvoice_url,data=data,stream=True)
voice_fp = open(filename,'wb')
voice_fp.write(r.raw.read())
# for chunk in r.iter_content(chunk_size=1024):
# voice_fp.write(chunk)
voice_fp.close()
def getText(self, filename):
# 2. 向Rest介面提交資料
data = {"format":"wav","rate":16000, "channel":1,"token":self.token_str,"cuid":self.cu_id,"lan":"zh"}
# 語音的一些引數
wav_fp = open(filename,'rb')
voice_data = wav_fp.read()
data['len'] = len(voice_data)
data['speech'] = base64.b64encode(voice_data).decode('utf-8')
post_data = json.dumps(data)
r=requests.post(self.upvoice_url,data=bytes(post_data,encoding="utf-8"))
# 3.處理返回資料
return r.text
def ConvertToWav(self,filename,wavfilename):
#先從本地獲取mp3的bytestring作為資料樣本
fp=open("out.mp3",'rb')
data=fp.read()
fp.close()
#主要部分
aud=io.BytesIO(data)
sound=AudioSegment.from_file(aud,format='mp3')
raw_data = sound._data
#寫入到檔案,驗證結果是否正確。
l=len(raw_data)
f=wave.open(wavfilename,'wb')
f.setnchannels(1)
f.setsampwidth(2)
f.setframerate(16000)
f.setnframes(l)
f.writeframes(raw_data)
f.close()
return wavfilename
if __name__ == "__main__":
#api_key和api_secert 自行編寫
api_key = ""
api_secert = ""
# 初始化
bdr = BaiduRest("test_python", api_key, api_secert)
# 將字串語音合成並儲存為out.mp3
bdr.getVoice("問題,作為開發人員,你的職責是什麼,答按照工作進度和程式設計工作規範編寫系統中的關鍵模組,設計編寫詳細設計,配合測試員修改相應的程式,提供軟體的後期技術支援,進行編碼實現,程式碼走查,單元測試,產品交付,", "out.mp3")
# 識別test.wav語音內容並顯示
print(bdr.getText(bdr.ConvertToWav("out.mp3","test.wav")))
執行結果:
設計思想:這裡先將語音合成,生成MP3格式,然後將這段語音轉換wav格式。然後再去語音識別。
在實際開發中,可以通過錄音,得到一段音訊檔案,然後再轉換wav格式。再去識別即可。
這裡涉及到pydub 的安裝。直接pip install pydub安裝即可。
ffmpeg安裝可以參考:ffmpeg安裝
ffmpeg下載一定是static
總結:基本上都是呼叫百度的api介面就完成語音的識別和合成,但是值得注意的語音識別的要求和條件,就算得到wav格式,建議都轉換一下格式。不然識別上會與內容不同。
相關文章
- python使用百度語音識別API注意事項PythonAPI
- 百度API---語音識別API
- 【JAVA】使用百度語音識別 Rest API,遇到識別結果顯示亂碼的問題和解決JavaRESTAPI
- 用python呼叫百度語音識別api批量處理本地語音檔案PythonAPI
- C# 10分鐘完成百度語音技術(語音識別與合成)——入門篇C#
- python語音識別入門及實踐Python
- 百度語音識別cordova外掛
- 安裝百度語音識別sdk
- 如何用Python語音合成,以及文字轉語音~Python
- 新一代 Kaldi: 支援 JavaScript 進行本地語音識別和語音合成啦!JavaScript
- ffmpeg實戰-音視訊合成案例
- Python語音識別終極指南Python
- ASR-使用whisper語音識別
- Xamarin開發筆記—百度線上語音合成筆記
- HTML5語音合成Speech Synthesis API簡介HTMLAPI
- 語音合成在語音助手中的應用及擴充套件套件
- [譯] 使用 WFST 進行語音識別
- JavaScript的語音識別JavaScript
- 語音識別技術
- 谷歌開放語音識別API 釋出機器學習雲平臺谷歌API機器學習
- 深度瞭解語音識別之發音詞典及語音資料採集標註
- Python3呼叫百度OCR圖片文字識別APIPythonAPI
- 微信下載錄音檔案(音軌分離 ffmpeg視訊合成)
- 開源語音合成庫 coqui TTS 使用記錄UITTS
- 百度音樂 APIAPI
- PocketSphinx語音識別系統的安裝和使用
- 樹莓派語音互動--語音輸入識別樹莓派
- 【Recorder.js+百度語音識別】全棧方案技術細節JS全棧
- 微信小程式:nodejs+百度語音識別開發實踐微信小程式NodeJS
- 語音識別中使用Cool Edit Pro的使用注意事項
- Windows Phone 8 新增功能:TTS文字朗讀功能 和 語音識別 APIWindowsTTSAPI
- 人工智慧 (08) 語音識別人工智慧
- Swift-語音識別、翻譯Swift
- 語音識別----音高的處理
- 語音識別開源專案
- 語音識別方向的資料
- 使用Python結合Face++ API識別人臉PythonAPI
- laravel通過classmap整合第三方包百度語音識別LaravelSSM