這一次的目標是使用百度雲的人工智能接口,實現文字轉語音的實時轉換,將小說文字轉換成語音朗讀出來。
百度雲接口調用
百度的這個接口對於我們普通用戶非常友好,他的很多功能都是免費的,而且我們每天可以免費調用這個接口五千次,非常適合我們玩轉這些功能。
注冊百度雲賬號
首先打開百度雲語音合成模塊接口地址
打開網址后點擊《立即使用》選項,然后會出現登錄的選項界面。如果沒有賬號,需要先注冊一個百度雲賬號,注冊方法非常簡單,我就不過多贅述了
登錄賬號之后,會自動進入控制台界面,因為現在我們還沒有創建應用,這里顯示的就是0個
點擊應用列表,創建應用,彈出的創建應用配置項,其中的內容隨意填寫即可
填寫完成,點擊立即創建,返回到應用列表,此時可發現我的應用下多出了一個應用項目
使用接口
安裝模塊
在python環境下使用該接口必須要安裝模塊
pip install baidu-aip
安裝成功可見如下提示
生成一段語音
通過查看百度語音合成的技術文檔,可以發現如下的幾個參數:
將這些參數傳遞到技術文檔所給的框架中,就可以生成一段語音:
from aip import AipSpeech
app_id = '你的Appid'
api_key = '你的API key'
secret_key = '你的 screct key'
client = AipSpeech(app_id,api_key,secret_key)
result = client.synthesis('人生得意須盡歡,莫使金樽空對月','zh','1',
{"vol": 9,
"spd": 4,
"pit": 9,
"per": 3,
})
with open("audio.mp3","wb") as f:
f.write(result)
運行完這一段代碼之后,就會在當前文件夾下生成一個audio.mp3的音頻文件,打開之后就是可以聽到朗誦的詩句
小說文字轉語音
在閱讀了技術文檔之后,可知這個模塊最大的限制就是一次轉換的語音不能超過1024字節(大約是512個漢字),所以我們要進行的第一步操作就是將一篇小說切割成若干個五百字數的文本文檔。
首先我先找到一篇小說,將它復制到文檔中,命名為read.txt 接下來我准備使用代碼來切割小說內容,一段的字數為500字
先將小說的內容提取出來,每隔1000個字節(500字)加上“---”的符號作為切割標志
with open('read.txt','r') as a:
text = a.readlines()
for cut in text:
#以1000個字節的長度進行分割
text_cut = re.findall('.{1000}', cut)
text_cut.append(cut[(len(text_cut) * 1000):])
#在分割后的字符串中間插入"---"
text_final = '---'.join(text_cut)
#計算文本中有多少個"---"標志
times = text_final.count('---')
之后將文本以---為標志進行分割,並分別將內容賦值到name變量中。正常來說,列表的起始位為第0位,但是為了滿足我們的閱讀習慣,所以將這些文本從1開始計數
for n in range(0,times+1):
name = text_final.split('---')[n]
最后一步,將提取出來的文本內容傳入api接口,輸出語音文件
完整代碼(將三個參數替換成之前申請的內容)
import re
from aip import AipSpeech
app_id = 'id'
api_key = 'APIkey'
secret_key = 'screctkey'
client = AipSpeech(app_id,api_key,secret_key)
with open('read.txt','r') as a:
text = a.readlines()
for cut in text:
#以1000個字節的長度進行分割
text_cut = re.findall('.{1000}', cut)
text_cut.append(cut[(len(text_cut) * 1000):])
#在分割后的字符串中間插入"---"
text_final = '---'.join(text_cut)
#計算文本中有多少個"---"標志
times = text_final.count('---')
for n in range(0,times+1):
name = text_final.split('---')[n]
result = client.synthesis(name, 'zh', '1',
{"vol": 9,
"spd": 4,
"pit": 9,
"per": 3,
})
with open('test/' + str(n + 1) + '.mp3', "wb") as d:
print('正在生成第' + str(n + 1) + '段語音......')
d.write(result)
實現結果:
打開test文件夾,點擊mp3文件就可以開始聽小說了
有一說一,這個百度人工智能所裝換的語音非常像有個人在你旁邊給你讀書,體驗感遠超pyttsx3模塊,非常nice!
百度的人工智能接口還有非常多好用的功能,例如人臉識別、語音轉文字、人臉對比......感興趣的同學可以自己去探索一下