Python文本轉化語音模塊大比拼,看看青銅與王者的差別!
自從開始公眾號寫作,作息問題就成了一件讓人很頭大的事情,相對平時學習時間的基礎上,每天需要再多抽出來至少兩個小時進行公眾號寫作,這些時間只能從睡眠中擠出來。別人研究怎么碎片化學習,我現在每天盤算的是怎么碎片化打盹。不知道該怎么解決作息的問題,好苦惱….
如果把Python比喻成游戲中的一個英雄,你覺得它是誰?對于Dota老玩家來說,我會想到鋼琴手卡爾!感覺Python和卡爾一樣,除了生孩子什么都可以做的角色。日常生活中,我們會涉及到很多語音播報的場景,比如郭德綱版的高德地圖導航、超市門口的紅外感知提醒歡迎光臨、銀行的自助叫號系統,等等…今天就和大家聊聊Python文本轉語音,看看這些從青銅到王者的模塊。
通過pip install pywin32安裝模塊,pywin32是個萬金油的模塊,太多的場景使用到它,但在文本轉語音上,它卻是個青銅玩家,簡單無腦但效果不好。代碼示例:
import win32com.client
speaker = win32com.client.Dispatch("SAPI.SpVoice")
speaker.Speak("一天什么時候最安全?中午,因為早晚會出事...")
因為這個模塊使用了很多次,自信執行,結果報錯了….
Traceback (most recent call last):
File “D:\Python37\lib\site-packages\win32com\client\dynamic.py”, line 89, in _GetGoodDispatch
IDispatch = pythoncom.connect(IDispatch)
pywintypes.com_error: (-2147221005, ‘無效的類字符串’, None, None)
這個模塊之前在公司和家里筆記本用過很多次的,怎么會報錯呢?一臉懵逼…結果查了半天發現,代碼在調用語音識別組件的時候報錯了。
打開控制面板發現語音識別組件我的臺式機電腦沒有,原來現在很多GHOST版WIN系統為了精簡體積都去除了語音識別組件,所以在安裝語音朗讀語音叫號類軟件時,都不能正常發音。本來這種青銅小選手,像我這種王者級別的不羞于為伍,但既然是模塊介紹還是確定下到底是不是這個問題吧。網上找了一個語音識別的TTSwidnows補丁包安裝了一下,再次執行成功。如果跟我存在一樣問題的選手,可以網上搜索安裝一下。下載補丁包執行bat文件一鍵無腦安裝。
pyttsx3 is a text-to-speech conversion library in Python.
Unlike alternative libraries, it works offline, and is compatible with both Python 2 and 3.
SAPI5 on Windows XP and Windows Vista and Windows 8,8.1 , 10
NSSpeechSynthesizer on Mac OS X 10.5 (Leopard) and 10.6 (Snow Leopard)
espeak on Ubuntu Desktop Edition 8.10 (Intrepid), 9.04 (Jaunty), and 9.10 (Karmic)
pyttsx3使用pyttsx移植過來的,因為pyttsx不支持python3…針對不同的系統,模塊會自動所有系統對應的語音驅動,前提是你的系統存在該驅動…
它依賴pywin32模塊,可以說它時針對無腦的pywin32接口,進行了升級的個性化配置。先來看下最簡單的使用:
import pyttsx3
engine = pyttsx3.init()
engine.say("明天你好,我叫干不倒!")
engine.runAndWait()
代碼初始化模塊后,填寫你所需轉化的文本,之后執行runAndWait方法完成語音轉化。再來看看其相關操作:
事件監聽
import pyttsx3
def onStart(name):
print('starting', name)
def onWord(name, location, length):
print('word', name, location, length)
def onEnd(name, completed):
print('finishing', name, completed)
engine = pyttsx3.init()
engine.connect('started-utterance', onStart)
engine.connect('started-word', onWord)
engine.connect('finished-utterance', onEnd)
engine.say('The quick brown fox jumped over the lazy dog.')
engine.runAndWait()
中斷話語
import pyttsx3
def onWord(name, location, length):
print 'word', name, location, length
if location > 10:
engine.stop()
engine = pyttsx3.init()
engine.connect('started-word', onWord)
engine.say('The quick brown fox jumped over the lazy dog.')
engine.runAndWait()
改變聲音
import pyttsx3
engine = pyttsx3.init()
voices = engine.getProperty('voices')
for voice in voices:
engine.setProperty('voice', voice.id)
engine.say('The quick brown fox jumped over the lazy dog.')
engine.runAndWait()
改變語速
import pyttsx3
engine = pyttsx3.init()
rate = engine.getProperty('rate')
engine.setProperty('rate', rate+50)
engine.say('The quick brown fox jumped over the lazy dog.')
engine.runAndWait()
改變音量
import pyttsx3
engine = pyttsx3.init()
volume = engine.getProperty('volume')
engine.setProperty('volume', volume-0.25)
engine.say('The quick brown fox jumped over the lazy dog.')
engine.runAndWait()
運行驅動程序事件循環
import pyttsx3
engine = pyttsx3.init()
def onStart(name):
print 'starting', name
def onWord(name, location, length):
print 'word', name, location, length
def onEnd(name, completed):
print 'finishing', name, completed
if name == 'fox':
engine.say('What a lazy dog!', 'dog')
elif name == 'dog':
engine.endLoop()
engine = pyttsx3.init()
engine.connect('started-utterance', onStart)
engine.connect('started-word', onWord)
engine.connect('finished-utterance', onEnd)
engine.say('The quick brown fox jumped over the lazy dog.', 'fox')
engine.startLoop()
使用外部事件循環
import pyttsx3
engine = pyttsx3.init()
engine.say('The quick brown fox jumped over the lazy dog.', 'fox')
engine.startLoop(False)
# engine.iterate() must be called inside externalLoop()
externalLoop()
engine.endLoop()
百度語音識別api:baidu-aip是百度開放的公共語音轉化服務。只需要在百度注冊相關的app及秘鑰信息即可使用。
使用流程如下:
訪問語音合成-百度AI開放平臺:http://ai.baidu.com/tech/speech/tts
之后使用百度賬號即可登陸(沒有百度賬號的,自己注冊一個)
創建應用,添加語音識別的功能,并完成注冊
保存你的app_id, API_Key, Secret_Key 三項數據留著后續使用
切換回語音合成首頁,點擊立即使用旁邊的技術文檔按鈕,進入API文檔
定位 語音合成—>SDK文檔—>Python SDK,即可看到詳細的開發文檔說明
接下來,我們看看文檔中的相關說明:
接口描述
基于該接口,開發者可以輕松的獲取語音合成能力
請求說明
合成文本長度必須小于1024字節,如果本文長度較長,可以采用多次請求的方式。文本長度不可超過限制
舉例,要把一段文字合成為語音文件:
from aip import AipSpeech
""" 你的 APPID AK SK """
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
result ?= client.synthesis('你好百度', 'zh', 1, {
'vol': 5,
})
# 識別正確返回語音二進制 錯誤則返回dict 參照下面錯誤碼
if not isinstance(result, dict):
with open('auido.mp3', 'wb') as f:
f.write(result)
# 識別正確返回語音二進制 錯誤則返回dict 參照下面錯誤碼
if not isinstance(result, dict):
with open('auido.mp3', 'wb') as f:
f.write(result)
在上面代碼中,常量APP_ID在百度云控制臺中創建,常量API_KEY與SECRET_KEY是在創建完畢應用后,系統分配給用戶的,均為字符串,用于標識用戶,為訪問做簽名驗證,可在AI服務控制臺中的應用列表中查看。
相比于前兩種模塊,baidu-aip卻是高端很多啊…喜歡的朋友可以下載了玩玩,感興趣的朋友可以看看我之前發表的文章使用Python將任正非400+篇演講批量轉化為語音https://www.jianshu.com/p/05f9874b6989
OK,今天的內容就到這里,如果覺得內容對你有所幫助,歡迎點擊文章右下角的“在看”。
期待你關注我的公眾號清風Python,如果覺得不錯,希望能動動手指轉發給你身邊的朋友們。
希望每周一至五清晨的7點10分,都能讓清風Python的知識文章叫醒大家!謝謝……
-----------------------------
本文來自清風Python公眾號
內容審核-文本 一句話識別 python
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。