國(guó)產(chǎn)牛B!這操作真的太愛了,御姐語(yǔ)音版!
哈嘍,大家好,我是月亮。一個(gè)工作n年的老程序員啦,平時(shí)喜歡研究各種有意思的小工具,每周定時(shí)分享給大家~
今天給大家分享一個(gè)國(guó)產(chǎn)的,文字和語(yǔ)音互轉(zhuǎn)的開源工具:PaddleSpeech。
說(shuō)起文字轉(zhuǎn)語(yǔ)音,應(yīng)用場(chǎng)景還是非常多的,月亮以前工作時(shí)就遇到過(guò)處理文字轉(zhuǎn)語(yǔ)音的情況,當(dāng)時(shí)需要給一篇簡(jiǎn)短的稿子進(jìn)行配音工作。
一般的公司都是沒有專門的配音人員的,所以當(dāng)時(shí)這項(xiàng)需求可是讓產(chǎn)品經(jīng)理小小的頭疼了一下。
后來(lái)調(diào)研了某度和某大訊飛,在試聽了這幾個(gè)平臺(tái)文字轉(zhuǎn)語(yǔ)音的效果后,成功制作出了一段還不錯(cuò)的音頻。
要是當(dāng)時(shí)研究過(guò)一些音頻技術(shù),可能處理起來(lái)就會(huì)更容易啦。
工具安裝
截止本文寫作的時(shí)間,PaddleSpeech在Github上收獲了4.6K Star,可以說(shuō)是很優(yōu)秀的工具包啦~
TA可以實(shí)現(xiàn)文字轉(zhuǎn)語(yǔ)音、語(yǔ)音轉(zhuǎn)文字、語(yǔ)音翻譯等功能,功能支撐還是挺齊全的。
首先,安裝PaddleSpeech。
由于PaddleSpeech是依賴于paddlepaddle的,所以先安裝paddlepaddle。
本文演示使用的是Windows操作系統(tǒng),如果你是其他操作系統(tǒng),請(qǐng)參考paddlepaddle官網(wǎng)進(jìn)行安裝。
python -m pip install paddlepaddle==2.3.1 -i https://mirror.baidu.com/pypi/simple
接著,安裝PaddleSpeech,命令如下。
pip install pytest-runner pip install paddlespeech
接著開始等待... ...
此處切換為國(guó)內(nèi)下載源,就會(huì)特別快。
注:安裝請(qǐng)使用python3.7,步驟、環(huán)境嚴(yán)格按照官網(wǎng)要求來(lái)執(zhí)行,否則出錯(cuò)很難處理。
30秒入門體驗(yàn)
文字轉(zhuǎn)語(yǔ)音
首先來(lái)體驗(yàn)一下最基礎(chǔ)的文字轉(zhuǎn)語(yǔ)音,這樣咱們就可以得到一份語(yǔ)音文件,語(yǔ)音可以用于后續(xù)的其他功能的測(cè)試。
直接在python代碼中,輸入想要轉(zhuǎn)換的文字即可,代碼如下。
使用的文字為:我愛吃西紅柿。
from paddlespeech.cli.tts.infer import TTSExecutor out = TTSExecutor() out(text="我愛吃西紅柿。", output="tomato.wav")
生成了一份名為 tomato.wav 的語(yǔ)音文件,我試聽了一下,雖然有一些明顯的AI合成聲音的味道,但是總體效果還是不錯(cuò)的。
音頻貼在下面,大家可以試聽一下。
語(yǔ)音轉(zhuǎn)文字
為了保證轉(zhuǎn)換正確,我這里直接使用上面生成的語(yǔ)音。
如果自己錄一段語(yǔ)音的話,肯定會(huì)有些雜音,不知道會(huì)不會(huì)影響轉(zhuǎn)換效果,用工具生成的語(yǔ)音肯定沒有問題。
轉(zhuǎn)換代碼如下。
from paddlespeech.cli.asr.infer import ASRExecutor asr = ASRExecutor() result = asr(audio_file="tomato.wav") print(result)
這里是轉(zhuǎn)換結(jié)果。
結(jié)果轉(zhuǎn)換非常正確,識(shí)別無(wú)誤。
如果大家想要測(cè)試更有難度的場(chǎng)景,可以自己錄制語(yǔ)音進(jìn)行嘗試,比如說(shuō)錄音里加一些窗外的鳴笛的嘀嘀聲,風(fēng)扇的呼呼聲...
自動(dòng)添加標(biāo)點(diǎn)符號(hào)
除開語(yǔ)音和文字轉(zhuǎn)換的處理,PaddleSpeech還可以對(duì)單獨(dú)的文字進(jìn)行處理。
比如下面這段缺少標(biāo)點(diǎn)的文字,TA能自動(dòng)給識(shí)別出來(lái)應(yīng)該斷句的位置,并且給加上合適的標(biāo)點(diǎn)。
要我說(shuō)呀那西紅柿有啥好吃的還是黑椒牛排好吃
代碼如下。
from paddlespeech.cli.text.infer import TextExecutor text_punc = TextExecutor() result = text_punc(text="要我說(shuō)呀那西紅柿有啥好吃的還是黑椒牛排好吃")
不知何故,在python代碼中執(zhí)行,沒有給到正確的運(yùn)行結(jié)果,所以我嘗試了一下用命令行的方式。
paddlespeech text --task punc --input "要我說(shuō)呀那西紅柿有啥好吃的還是黑椒牛排好吃"
運(yùn)行結(jié)果如下。
# 添加標(biāo)點(diǎn)的結(jié)果 要我說(shuō):呀,那西紅柿有啥好吃的?還是黑椒牛排好吃。
稍微有一點(diǎn)點(diǎn)不正確,感覺上,xx說(shuō),這個(gè)xx直接被當(dāng)作某人在說(shuō)話了。
這里我換了兩個(gè)例子,重新試了一下。
校長(zhǎng)說(shuō)胸前除了?;談e別別的
校長(zhǎng)說(shuō)今天中午作業(yè)沒交的全部留下
paddlespeech text --task punc --input "校長(zhǎng)說(shuō)胸前除了?;談e別別的" paddlespeech text --task punc --input "校長(zhǎng)說(shuō)今天中午作業(yè)沒交的全部留下" # 測(cè)試結(jié)果 校長(zhǎng)說(shuō):胸前除了?;眨瑒e,別,別的。 校長(zhǎng)說(shuō):今天中午,作業(yè)沒交的,全部留下。
測(cè)試結(jié)果不是特別精準(zhǔn),但是一些基本的、沒有歧義的句子,工具還是能自動(dòng)識(shí)別出來(lái)的。
自動(dòng)翻譯
PaddleSpeech另一個(gè)強(qiáng)悍的功能,在于TA可以直接將語(yǔ)音進(jìn)行翻譯。
下面用I like eating tomatoes來(lái)演示。
翻譯成中文,應(yīng)該是:我喜歡吃西紅柿。
示例中我用兩段音頻測(cè)試,但是沒有翻譯成功。
根據(jù)官方描述,語(yǔ)音翻譯功能當(dāng)前只能使用Ubuntn系統(tǒng)體驗(yàn)。
而我的服務(wù)器安裝的是centos系統(tǒng),這個(gè)功能就不演示了,同時(shí)官方也推薦大家使用Linux操作系統(tǒng)來(lái)使用本項(xiàng)目。
如果感興趣,大家可以自行嘗試PaddleSpeech更多功能。
重要提醒
在這里還是要提醒大家,一定按照官網(wǎng)要求的版本來(lái)進(jìn)行環(huán)境安裝,本文中的示例,我用了整整一天才把環(huán)境問題搞定。
可以說(shuō)是非常麻煩了,安裝到一半的時(shí)候,我就有預(yù)感要出問題,最后果然環(huán)境問題一個(gè)接著一個(gè)出現(xiàn)。
一般像這類耗時(shí)比較多的技術(shù)文,我都會(huì)周末一口氣寫完,這次直接消耗掉了半個(gè)周末。