山寨一個(gè)Siri

SiriKit 從6月份的 WWDC2016 推出已經(jīng)有一段時(shí)間了,不少應(yīng)用也慢慢的適配了Siri枕稀,但是可能很多童鞋還沒有來得及去試試杀赢,下面我們先試一下:

QQ

我們可以在在設(shè)置里查看已經(jīng)適配Siri 的應(yīng)用,可以在這里將應(yīng)用打開權(quán)限棋恼,也可以在Siri 觸發(fā)的時(shí)候通過提示來打開返弹。

目前我知道的已經(jīng)適配了Siri 的應(yīng)用

SiriKit 是以 Extension 的方式來給已有App 來提供支持,就目前Siri 支持的intent來說爪飘,還是有很多使用的限制义起,只能針對(duì)特定的詞匯通過命令來進(jìn)行識(shí)別處理。這里不介紹如何使用SiriKit 师崎,下面我想利用iOS中 目前已經(jīng)公開的其他 API 實(shí)現(xiàn)一個(gè)應(yīng)用內(nèi)的語(yǔ)音助手默终,來理解Siri 的實(shí)現(xiàn)。

其實(shí)想要實(shí)現(xiàn)Siri犁罩,我們只需要先將語(yǔ)音進(jìn)行識(shí)別齐蔽,然后再將語(yǔ)音內(nèi)容進(jìn)行分析,然后再將分析出來的結(jié)果進(jìn)行輸出床估,當(dāng)然這輸出不只是語(yǔ)音含滴,也可能是一些反饋信息和一些事件處理。
下面我們先來實(shí)現(xiàn)語(yǔ)音識(shí)別顷窒。

語(yǔ)音識(shí)別

Speech framework 也是在WWDC 2016 推出的一個(gè)語(yǔ)音識(shí)別框架蛙吏,并且支持多種語(yǔ)言,Siri 也是基于此框架來進(jìn)行語(yǔ)音識(shí)別鞋吉。還在iOS 3 鸦做、4 時(shí)代的時(shí)候就已經(jīng)開始有一些第三方的語(yǔ)音識(shí)別框架,但那時(shí)候不是價(jià)格高就是識(shí)別不精準(zhǔn)谓着,導(dǎo)致很多應(yīng)用軟件對(duì)語(yǔ)音識(shí)別都望而卻步泼诱。但目前的語(yǔ)音識(shí)別技術(shù)都已經(jīng)爐火純青,就中文來說赊锚,不僅僅是已經(jīng)能夠識(shí)別出普通話治筒,還能識(shí)別出粵語(yǔ)∠掀眩科大訊飛在國(guó)內(nèi)應(yīng)該是語(yǔ)音識(shí)別技術(shù)做的最好的了耸袜,在幾年前就已經(jīng)實(shí)現(xiàn)了離線語(yǔ)音識(shí)別的功能。
Speech 當(dāng)然也不甘落后牲平,也提供了離線的語(yǔ)音識(shí)別堤框,速度和精準(zhǔn)度也不必多說。

蘋果一直都是呈現(xiàn)出來最簡(jiǎn)單最易用的API 給開發(fā)者, 所以通過Speech 實(shí)現(xiàn)一個(gè)語(yǔ)音識(shí)別功能就是分分鐘搞定蜈抓。

主要類有:

  1. SFSpeechRecognizer
  2. SFSpeechRecognitionRequest
    1). SFSpeechURLRecognitionRequest
    2). SFSpeechAudioBufferRecognitionRequest
  3. SFSpeechRecognitionTask
  4. SFSpeechRecognitionResult

簡(jiǎn)單四步實(shí)現(xiàn)語(yǔ)音識(shí)別

// 請(qǐng)求獲取語(yǔ)音識(shí)別權(quán)限
SFSpeechRecognizer.requestAuthorization { (status) in   . . . }

// 初始化中文語(yǔ)音識(shí)別
let speechRecongnizer = SFSpeechRecognizer(locale: Locale(identifier: “zh_CN”))

// 初始化識(shí)別請(qǐng)求
let recognitionRequest = SFSpeechURLRecognitionRequest(url: NSURL(string: "...")!)

// 請(qǐng)求獲取語(yǔ)音識(shí)別
let recognitionTask = speechRecongnizer?.recognitionTask(with: recognitionRequest, resultHandler:{ (result, error) in
    if let result = result {
        print(result.bestTranscription.formattedString)
        let isFinal = result.isFinal
    }
 })

這里我們需要實(shí)現(xiàn)實(shí)時(shí)語(yǔ)音識(shí)別并轉(zhuǎn)化有效信息启绰,就需要使用SFSpeechAudioBufferRecognitionRequest來通過緩沖流實(shí)時(shí)將語(yǔ)音轉(zhuǎn)化為有效文字信息。

let audioEngine = AVAudioEngine()
let recognitionRequest = SFSpeechAudioBufferRecognitionRequest()
guard let inputNode = audioEngine.inputNode else {
    fatalError("audioEngine error")
}
let recordingFormat = inputNode.outputFormat(forBus: 0)
inputNode.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { (buffer, when) in
    recognitionRequest?.append(buffer)
}
let recognitionTask = speechRecongnizer?.recognitionTask(with: recognitionRequest, resultHandler: { (result, error) in
    var isFinal = false
    if let result = result {
        print(result.bestTranscription.formattedString)
    }
})

audioEngine.prepare()
do {
    try audioEngine.start()
} catch {
    print("couldn't start")
}

這樣我們就可以實(shí)時(shí)監(jiān)聽語(yǔ)音輸入流自動(dòng)轉(zhuǎn)化為文字了沟使,下面我們需要對(duì)文字進(jìn)行解析委可,然后將反饋信息讀出來。

語(yǔ)音朗讀

AVSpeechSynthesizer 是隨著iOS 7.0 而推出的一個(gè)文字轉(zhuǎn)語(yǔ)音的特性腊嗡,幾行代碼就能實(shí)現(xiàn)文字轉(zhuǎn)成語(yǔ)音播放出來着倾,

  1. AVSpeechSynthesizer
  2. AVSpeechUtterance
  3. AVSpeechSynthesisVoice
// 通過文字初始化話語(yǔ)
let utterance = AVSpeechUtterance(string: "語(yǔ)音轉(zhuǎn)文字")

// 設(shè)置語(yǔ)言
utterance.voice = AVSpeechSynthesisVoice(language: "zh-CN")

// 讀出來
let synthesizer = AVSpeechSynthesizer()
synthesizer.speak(utterance)

通過分詞解析并反饋

下面我們就可以解析出一些詞匯或命令來做出相應(yīng)的反饋。就比如

var string = ""
if action.contains("叫爸爸") || action.contains("喊爸爸") {
    string = "爸爸"
} else if action.contains("笑話") {
    string = "我有個(gè)直覺叽唱,圣誕節(jié)那天屈呕,可能會(huì)有個(gè)人捧著鮮花和禮物對(duì)我說, 讓一讓兄弟,擋路了。"
} else if action.contains("繞口令") {
    string = "黑化黑灰化肥灰會(huì)揮發(fā)發(fā)灰黑諱為黑灰花會(huì)回飛棺亭;灰化灰黑化肥會(huì)會(huì)揮發(fā)發(fā)黑灰為諱飛花回化為灰"
}

當(dāng)然虎眨,這只是一些很簡(jiǎn)單的語(yǔ)音命令,如果要更精確的語(yǔ)音識(shí)別镶摘,肯定需要非常精準(zhǔn)的分詞算法來支持嗽桩。
那么這樣一個(gè)山寨的應(yīng)用內(nèi)Siri 就算完成了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末凄敢,一起剝皮案震驚了整個(gè)濱河市碌冶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌涝缝,老刑警劉巖扑庞,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異拒逮,居然都是意外死亡罐氨,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門滩援,熙熙樓的掌柜王于貴愁眉苦臉地迎上來栅隐,“玉大人,你說我怎么就攤上這事玩徊∽馇模” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵恩袱,是天一觀的道長(zhǎng)泣棋。 經(jīng)常有香客問我,道長(zhǎng)畔塔,這世上最難降的妖魔是什么外傅? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任纪吮,我火速辦了婚禮,結(jié)果婚禮上萎胰,老公的妹妹穿的比我還像新娘。我一直安慰自己棚辽,他們只是感情好技竟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著屈藐,像睡著了一般榔组。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上联逻,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天搓扯,我揣著相機(jī)與錄音,去河邊找鬼包归。 笑死锨推,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的公壤。 我是一名探鬼主播换可,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼厦幅!你這毒婦竟也來了沾鳄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤确憨,失蹤者是張志新(化名)和其女友劉穎译荞,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體休弃,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吞歼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了玫芦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浆熔。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖桥帆,靈堂內(nèi)的尸體忽然破棺而出医增,到底是詐尸還是另有隱情,我是刑警寧澤老虫,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布叶骨,位于F島的核電站,受9級(jí)特大地震影響祈匙,放射性物質(zhì)發(fā)生泄漏忽刽。R本人自食惡果不足惜天揖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望跪帝。 院中可真熱鬧今膊,春花似錦、人聲如沸伞剑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)黎泣。三九已至恕刘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間抒倚,已是汗流浹背褐着。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留托呕,地道東北人含蓉。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像镣陕,于是被迫代替她去往敵國(guó)和親谴餐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容