譯者:王悅
會(huì)上,蘋果介紹了一個(gè)很好的語音識(shí)別API,那就是。事實(shí)上,這個(gè) Kit 就是 Siri 用于語音識(shí)別的框架。今天有一些語音識(shí)別框架可用,但它們要么太貴要么不好。在今天的教程中,我將向您展示如何創(chuàng)建一個(gè)類似 Siri 的應(yīng)用程序,該應(yīng)用程序使用 Kit 進(jìn)行語音轉(zhuǎn)文本。
設(shè)計(jì)應(yīng)用程序用戶界面
先決條件:您需要 Xcode 8 beta 和運(yùn)行 iOS 10 beta 的 iOS 設(shè)備。
首先創(chuàng)建一個(gè)名為 . 接下來,將 a、a 和 a 添加到 Main。你的應(yīng)該是這樣的:
接下來為 .swift 文件定義變量。在這個(gè)demo中,我設(shè)置的名字是“”,名字是“”。然后創(chuàng)建一個(gè)空按鈕執(zhí)行方法,該方法在單擊按鈕時(shí)觸發(fā)。
@(:){
}
如果您不想從創(chuàng)建最原始的項(xiàng)目開始,您可以在此處下載原始項(xiàng)目并繼續(xù)下面的指導(dǎo)說明。
采用
為了使用它,您必須先導(dǎo)入它,然后遵循協(xié)議。因此,讓我們導(dǎo)入框架并將其協(xié)議添加到文件中。您的 .swift 文件現(xiàn)在應(yīng)該如下所示:
:,{
@iew:!
@:!
加載(){
極好的。()
}
@(:){
}
}
用戶授權(quán)
在使用它進(jìn)行語音識(shí)別之前,你必須先獲得用戶的許可,因?yàn)椴粌H本地 ios 設(shè)備會(huì)識(shí)別它,蘋果的服務(wù)器也會(huì)識(shí)別它。所有的語音數(shù)據(jù)都會(huì)傳到蘋果的后臺(tái)進(jìn)行處理。因此,必須獲得用戶授權(quán)。
讓我們?cè)诜椒ㄖ惺跈?quán)語音識(shí)別。用戶必須允許應(yīng)用使用麥克風(fēng)和語音識(shí)別。首先語音識(shí)別轉(zhuǎn)換文字軟件mac,聲明一個(gè)變量:
=(:.init(:'en-US'))//1
然后更新方法如下:
加載(){
極好的。()
.=假//2
.=自我//3
.{()in//4
=假
{//5
案子。:
=真
案子。:
=假
打印('')
案子。:
=假
打印('')
案子。:
=假
打?。?')
}
。主要的。(){
自我..=
}
}
}
首先,我們創(chuàng)建一個(gè)標(biāo)識(shí)符為 en-US 的實(shí)例,以便語音識(shí)別 API 可以知道用戶說哪種語言。這個(gè)實(shí)例是處理語音識(shí)別的對(duì)象。
默認(rèn)情況下,我們禁用該按鈕,直到激活語音識(shí)別。
接下來,將語音識(shí)別代理設(shè)置為 self ,這是我們的 .
之后,我們必須通過調(diào)用 . 方法。
最后,檢查驗(yàn)證的狀態(tài)。如果授權(quán),使按鈕處于活動(dòng)狀態(tài)。如果沒有,打印一條錯(cuò)誤消息并禁用該按鈕。
現(xiàn)在,如果您認(rèn)為在應(yīng)用程序啟動(dòng)并運(yùn)行后會(huì)看到授權(quán)彈出窗口,那您就錯(cuò)了。如果運(yùn)行,應(yīng)用程序?qū)⒈罎ⅰ:冒?,既然你知道了結(jié)果,為什么還要問呢?(不要打我),請(qǐng)參閱下面的解決方案。
提供授權(quán)消息
Apple 要求應(yīng)用程序中的所有授權(quán)都具有自定義消息。例如語音授權(quán)語音識(shí)別轉(zhuǎn)換文字軟件mac,我們必須請(qǐng)求2個(gè)授權(quán):
麥克風(fēng)使用權(quán)。
語音識(shí)別。
對(duì)于自定義消息,您必須在 info.plist 配置文件中提供這些自定義消息。
讓我們打開 info.plist 配置文件的源代碼。首先,右鍵單擊 info.plist。然后選擇打開方式 > 代碼。最后,復(fù)制以下 XML 代碼,然后在
在標(biāo)記前插入此代碼。
現(xiàn)在您已向 info.plist 文件添加了兩個(gè)鍵:
您可以自己更改這些消息的內(nèi)容?,F(xiàn)在點(diǎn)擊運(yùn)行按鈕,您應(yīng)該能夠成功編譯和運(yùn)行應(yīng)用程序而不會(huì)出現(xiàn)任何錯(cuò)誤。
注意:如果后面工程運(yùn)行完沒有看到語音輸入授權(quán)框,那是因?yàn)槟闶窃谀M器上運(yùn)行程序。iOS 模擬器無權(quán)訪問您的 mac 計(jì)算機(jī)的麥克風(fēng)。
處理語音識(shí)別
現(xiàn)在我們已經(jīng)實(shí)現(xiàn)了用戶授權(quán),我們現(xiàn)在去實(shí)現(xiàn)語音識(shí)別功能。首先在里面定義以下對(duì)象:
:?
n任務(wù):?jiǎn)枺?/p>
e=()
該對(duì)象處理語音識(shí)別請(qǐng)求。它為語音識(shí)別提供語音輸入。
任務(wù)對(duì)象告訴您語音識(shí)別對(duì)象的結(jié)果。擁有這個(gè)對(duì)象很方便,因?yàn)槟梢允褂盟鼇韯h除或中斷任務(wù)。
是您的語音引擎。它負(fù)責(zé)提供您的語音輸入。
接下來,創(chuàng)建一個(gè)名為 () 的新方法。
(){
!=無{
?.()
=無
}
=.()
做{
.()
.()
.(真的,有:.)
}抓住{
打印(''。')
}
=()
=.{
('tnode')
}
=se{
('')
}
.=真
=.(with:,:{(,error)in
=假
!=無{
自我..文本=?..
=(?。)!
}
!=無||{
自我..停止()
.(onBus:0)
自我。=無
自我。=無
自我..=真
}
})
=.(:0)
.(onBus:0,:1024,:){(,when)in
自己。?。()
}
.()
做{
。開始()
}抓住{
打?。?'或。')
}
.text=',我'!'
}
單擊“開始”按鈕時(shí)將調(diào)用此方法。它的主要功能是打開語音識(shí)別并收聽您的麥克風(fēng)。我們逐行分析上面的代碼:
觸發(fā)語音識(shí)別
我們需要確保在創(chuàng)建語音識(shí)別任務(wù)時(shí)語音識(shí)別是可用的,所以我們必須給它添加一個(gè)委托方法。如果語音輸入不可用或其狀態(tài)已更改,則 . 將設(shè)置屬性。對(duì)于這種情況,我們實(shí)現(xiàn)了協(xié)議的 e 方法。實(shí)施見下文:
(:,:布爾){
{
.=真
}別的{
.=假
}
}
當(dāng)可用性狀態(tài)發(fā)生變化時(shí),將調(diào)用此方法。如果語音識(shí)別可用,錄制按鈕將設(shè)置為啟用。
最后一件事是我們必須更新響應(yīng)方法 (:):
@(:){
.{
。停止()
?.()
.=假
。('',為了:。)
}別的{
()
。('',為了:。)
}
}
在這種方法中,我們必須檢查它是否有效。如果是這樣,應(yīng)用程序應(yīng)該停止,中止按鈕的音頻輸入,使按鈕不可用,并將按鈕的標(biāo)題設(shè)置為“開始”
如果它正在工作,應(yīng)用程序應(yīng)該調(diào)用 () 并將按鈕的標(biāo)題設(shè)置為“停止”。
很好!現(xiàn)在您已準(zhǔn)備好測(cè)試應(yīng)用程序。將應(yīng)用程序部署到 iOS10 設(shè)備,然后單擊“開始”按鈕。去說點(diǎn)什么吧!
注意:
Apple 對(duì)每臺(tái)設(shè)備的識(shí)別能力都有限制。確切的限制尚不清楚,但您可以聯(lián)系 Apple 以獲取更多信息。
蘋果還對(duì)每個(gè)應(yīng)用程序的識(shí)別能力有限制。
如果您經(jīng)常遇到限制,請(qǐng)務(wù)必聯(lián)系 Apple,他們應(yīng)該能夠解決問題。
語音識(shí)別非常耗電并且使用大量數(shù)據(jù)。
語音識(shí)別一次只持續(xù)大約一分鐘。
總結(jié)
在本教程中,您學(xué)習(xí)了如何利用 Apple 向開發(fā)人員開放的令人驚嘆的新語言 API 來進(jìn)行語音識(shí)別和文本轉(zhuǎn)換。使用與 Siri 相同的語音識(shí)別框架。這是一個(gè)相對(duì)較小的 API。但是,它非常強(qiáng)大,允許開發(fā)人員創(chuàng)建非凡的應(yīng)用程序,例如將語音文件轉(zhuǎn)換為文本。
我建議您觀看 WWDC 2016 509 以獲取更多有用信息。希望您喜歡這篇文章,并在探索這個(gè)新 API 時(shí)玩得開心。
作為參考,您可以在此處查看完整的項(xiàng)目