資料介紹
描述
介紹和動(dòng)機(jī)
語音識(shí)別和語音界面在這方面發(fā)揮了重要作用,并將在我們未來的計(jì)算體驗(yàn)中發(fā)揮重要作用。長(zhǎng)期以來一直是科幻小說的主要內(nèi)容,現(xiàn)在可以成為每個(gè)人的科學(xué)現(xiàn)實(shí)。
我的第一個(gè)語音控制界面實(shí)驗(yàn),“借給我你的耳朵!”:網(wǎng)絡(luò)藍(lán)牙和語音識(shí)別,是一個(gè)令人興奮的實(shí)驗(yàn)。當(dāng)它成為Hackster.io live 的主題并啟發(fā)了我自己、VoiceBot101和其他人的許多新穎和衍生項(xiàng)目時(shí),我感到非常高興,例如:
此處為 Alexa 和 Google Assistant 發(fā)布的眾多項(xiàng)目和技能也可以看出語音的流行和興奮,例如:
幾周前,我發(fā)現(xiàn)了一個(gè)開源語音識(shí)別和人工智能平臺(tái)Mycroft.ai ,這聽起來非常令人興奮,我決定是時(shí)候?qū)φZ音界面進(jìn)行更多試驗(yàn)了。
這個(gè)項(xiàng)目描述將主要集中在我如何學(xué)會(huì)為 Mycroft 平臺(tái)編寫技能。我也會(huì)分享我的一些理解、困惑和總體印象。
Mycroft.ai網(wǎng)站和github 頁面有很多你應(yīng)該閱讀的信息。此外,還有一些關(guān)于該平臺(tái)的優(yōu)秀書面評(píng)論和評(píng)論,例如:
我探索 Mycroft 并編寫此技能和其他技能的最終目標(biāo)是回答以下問題:
- 什么是好的語音界面設(shè)計(jì)?
- Mycroft.al平臺(tái)是否允許我創(chuàng)建出色的語音設(shè)計(jì)?
Mycroft.ai/Picroft
Mycroft.ai是一個(gè)人工智能和語音識(shí)別系統(tǒng)。它類似于 Alexa、Google Assistant 或 Siri 等平臺(tái),但它是完全開源的,并且是用 Python 編寫的。它有 3 個(gè)不同的版本:
- Mycroft Mark 1 - 基于 Raspberry Pi 2 的開放硬件平臺(tái)
- 在 Linux Ubuntu 上運(yùn)行的桌面包
- 用于在 Raspberry Pi 3 上運(yùn)行的Picroft 0.8
我一直在尋找一個(gè)很好的理由來開始認(rèn)真地嘗試 Raspberry Pi 3,因此 Picroft 0.8 選項(xiàng)對(duì)我來說是一個(gè)自然的選擇。還有非常詳盡的安裝說明和兼容硬件指南也很吸引人。
從現(xiàn)在開始,我將交替使用 Mycroft 和 Picroft,但我專門為這個(gè)項(xiàng)目使用了 Picroft 0.8 版本。我也可以稱他或他為 Mycroft/Picroft,但在此我遵循 Manuel “Mannie” Garcia O'Kelly 的約定。
Picroft 安裝說明
對(duì)于這個(gè)項(xiàng)目,我使用了安裝在 Pi Top Ceed 外殼中的 Raspberry Pi 3。我使用它是因?yàn)榻ㄗh使用鍵盤和屏幕可以更輕松地與 Picroft 交互和安裝。不過不要太興奮,我沒有在 Pi Top OS 上運(yùn)行 Picroft,我只是覆蓋了 SD 卡。這是我感興趣的鍵盤和屏幕!
我還購買了兼容硬件列表中推薦的麥克風(fēng)/揚(yáng)聲器組合之一。
在 Raspberry Pi 3 上安裝 Mycroft 之前,有 2 套安裝說明和提示需要查看:
執(zhí)行和完成這些步驟不到 1 小時(shí),令人驚訝的是,這一切都奏效了!直到我告訴Mycroft去睡覺。當(dāng)我試圖用喚醒詞喚醒他時(shí),他拒絕這樣做。無奈之下,我重啟了。然后他會(huì)認(rèn)出喚醒詞,我可以看到屏幕上顯示的文本響應(yīng),但聽不到任何音頻。所以我回到了安裝說明。. .
在上面第一個(gè)鏈接的安裝說明和提示的底部,是有關(guān)如何配置 USB 麥克風(fēng)的提示:
使用 USB 音頻作為輸出
通常,USB 音頻應(yīng)連接到 hwplug:1,0 但要驗(yàn)證運(yùn)行以下命令:
aplay -L
找到您要使用的設(shè)備的 hwplug 輸出,使用它并相應(yīng)地更新 /etc/mycroft/mycroft.conf 文件:
"play_wav_cmdline": "aplay -Dhw:0,0 %1" 這行現(xiàn)在變成了 "play_wav_cmdline": "aplay -Dplughw:1,0 %1"
您現(xiàn)在可以運(yùn)行 ./auto_run.sh 來啟動(dòng)程序備份和測(cè)試,并確保輸出來自 USB 揚(yáng)聲器。
按照這些說明使用nano作為文本編輯器并重新啟動(dòng),解決了麥克風(fēng)問題。然而,讓他入睡仍然需要完全重啟才能讓他對(duì)喚醒詞做出反應(yīng)。希望通過更多的工作,我將能夠解決這個(gè)問題。
這帶來了使用 Picroft 版本的重要一點(diǎn)。您應(yīng)該對(duì) Linux 中的基本命令行技能充滿信心。到目前為止,它只是簡(jiǎn)單的東西,例如在目錄中移動(dòng)、安全刪除文件和使用 nano。
技能的想法
我想創(chuàng)建一種比“Hello, World”示例更復(fù)雜的技能(他們已經(jīng)有一個(gè)),但又不會(huì)復(fù)雜到阻止我完成它。
經(jīng)過一番思考,我想出讓 Mycroft 告訴我國際空間站 (ISS) 相對(duì)于其地球經(jīng)緯度坐標(biāo)的當(dāng)前軌道位置。由于這兩個(gè)數(shù)字對(duì)我沒有太多意義,我還希望 Mycroft 告訴我這些坐標(biāo)對(duì)應(yīng)于地圖上的什么。
好的,所以這不是最有用的技能,但它很有趣,并且有機(jī)會(huì)學(xué)習(xí)。以下兩個(gè)部分是特定領(lǐng)域的信息,雖然對(duì)于編寫技能不是必需的,但很有趣并且與技能的“輸出”相關(guān)。
國際空間站(ISS)
國際空間站是一個(gè)巨大的太空科學(xué)實(shí)驗(yàn)室。它已經(jīng)建成到目前的規(guī)模,航天飛機(jī)的許多最后任務(wù)都用于建造它。有趣的是,航天飛機(jī)的最初概念是讓它與軌道空間實(shí)驗(yàn)室協(xié)同工作。它每 90 分鐘繞地球一圈,平均高度為 240 英里。通過計(jì)算,它在一天內(nèi)繞地球運(yùn)行 16 次(24*60/90)。它的速度為每小時(shí) 17,500 英里。意味著從洛杉磯到紐約的旅行只需不到 9 分鐘!這與我們的技能相關(guān),因?yàn)橥ㄟ^如此快速的移動(dòng),它賦予了技能一些多樣性和對(duì)其響應(yīng)的興趣,這是語音設(shè)計(jì)的一個(gè)重要特征。
反向地理編碼
我找到了兩個(gè)免費(fèi)的開源 API,它們提供實(shí)時(shí) ISS 坐標(biāo)Open-Notify和wheretheiss.at 。我選擇為這個(gè)項(xiàng)目使用 Open-Notify。
這兩個(gè) API 都以 JSON 有效載荷的形式提供相對(duì)于地球的 ISS 軌道位置,以及 ISS 最新的經(jīng)緯度。我們可以簡(jiǎn)單地訪問其中之一,解碼 JSON 有效載荷以獲取緯度和經(jīng)度,并讓 Mycroft 報(bào)告這兩個(gè)數(shù)字。但是,“緯度 5.218 經(jīng)度 115.008”(南海上空)或“緯度 44.590 經(jīng)度 -104.715”(美國懷俄明州魔鬼塔上空)的報(bào)告對(duì)普通用戶意味著什么?讓技能提供地圖坐標(biāo)和有意義的地理特征名稱(又名地名)提供了上下文,甚至可能與技能建立個(gè)人聯(lián)系。因此,我們付出更多的努力將獲得更好的用戶體驗(yàn)。
當(dāng)我們與地圖服務(wù)(例如谷歌地圖)交互時(shí),我們會(huì)在地圖上給它一個(gè)地址或 2 個(gè)已知點(diǎn)并詢問方向,或者我們可能會(huì)使用 Uber 等乘車服務(wù)應(yīng)用程序讓我們的司機(jī)知道我們?cè)谀睦铮⑶椅覀兿肴サ牡胤健?/font>這就是地理編碼:我們識(shí)別地圖上的點(diǎn),然后應(yīng)用程序?qū)⑦@些點(diǎn)轉(zhuǎn)換為可計(jì)算的坐標(biāo)。然而,我們的技能要求我們做相反的事情,我們給它一組坐標(biāo),它為我們提供了一個(gè)可識(shí)別的地理特征。這就是所謂的反向地理編碼。許多映射 API 會(huì)將其作為功能提供到其服務(wù)中。
所以我們都準(zhǔn)備好了,只需使用我們最喜歡的(和免費(fèi)的)地圖服務(wù)的反向地理編碼功能,并解碼生成的 JSON 有效負(fù)載!但是,有一個(gè)問題!您會(huì)發(fā)現(xiàn),這些服務(wù)中的大多數(shù)都不涵蓋主要水域,例如海洋!嘗試使用大西洋和太平洋等要素的坐標(biāo),“未找到結(jié)果”是報(bào)告!我想這與將服務(wù)貨幣化有關(guān)。你真的找不到人去珊瑚海中央最近的星巴克!
幸運(yùn)的是,GeoNames.org提供了一個(gè) Web 服務(wù),它確實(shí)在主要水域返回了有意義的有效載荷!我找不到另一個(gè)這樣做的免費(fèi)服務(wù)。如果你這樣做,請(qǐng)告訴我!
訪問 GeoNames.org 網(wǎng)站,申請(qǐng)用戶名/帳戶,每天最多可獲得 30,000 次訪問!請(qǐng)記住為您的用戶名/帳戶激活網(wǎng)絡(luò)服務(wù)!問題解決了。
寫作技巧
Mycroft 核心文檔包含一個(gè)關(guān)于創(chuàng)建技能的優(yōu)秀教程,并且在Mycroft github 頁面上有許多技能可供學(xué)習(xí)。我不會(huì)在這里重復(fù)該教程,但會(huì)指出我在創(chuàng)建此技能時(shí)使用的要點(diǎn)。
創(chuàng)建技能需要具有特定結(jié)構(gòu)的多個(gè)不同文件,并具有特定的文件名約定:
/dialog文件夾包含基于語言的文件,這些文件告訴 Mycroft 在執(zhí)行技能時(shí)要說什么。這是來自 Mycroft.ai 的 github 存儲(chǔ)庫的Skill-hello-world/dialog/en-us/hello.world.dialog :
Hello world
Hello
Hi to you too
在回應(yīng)你說“Hey Mycroft,Hello world”時(shí),Mycroft 會(huì)從上面的 3 個(gè)回應(yīng)中選擇一個(gè)說出來。“Hey Mycroft”或只是“Mycroft”這些詞是指示 Mycroft 應(yīng)該開始聆聽的喚醒詞或觸發(fā)詞。
他怎么知道要聽什么才能執(zhí)行這項(xiàng)技能?這就是 /vocab 文件夾的來源。從教程中,
- “ vocab 文件夾包含支持的每種語言的子文件夾,例如 en-us。在每個(gè)語言文件夾中,我們放置 .voc 文件,其中包含確定 Mycroft 將聽什么來觸發(fā)技能的短語或關(guān)鍵字。 ”
我的技能的對(duì)話和 voc 文件有點(diǎn)復(fù)雜。這是Skill-iss-location/dialog/en-us/location.current.dialog:
{{latitude}} latitude {{longitude}} longitude which corresponds to {{toponym}}
The space station is at {{latitude}} latitude {{longitude}} longitude over {{toponym}}
It's at {{latitude}} latitude {{longitude}} longitude, {{toponym}}
The ISS is now over {{toponym}} at {{latitude}} latitude {{longitude}} longitude
{{toponym}} at {{latitude}} latitude and {{longitude}} longitude
術(shù)語{{latitude}}、{{longitude}}和{{toponym}}是在執(zhí)行與此技能關(guān)聯(lián)的__init__.py文件期間填充的值的鍵。您在 python 代碼中獲得的值與這些鍵之間存在一對(duì)一的關(guān)系,這使得提供交互式體驗(yàn)變得非常容易。這些鍵周圍的文本是自由形式的,您可以在此處放置任何內(nèi)容,Mycroft 會(huì)在這些選項(xiàng)中進(jìn)行選擇以進(jìn)行響應(yīng)。
技能的核心在于__init__.py文件。我是這樣看的:用python寫的任何東西,都可以融入技能!有了可用的 Python 庫的數(shù)量和種類,這里沒有限制!該文件有一個(gè)特定的結(jié)構(gòu),我建議閱讀教程并查看Mycroft.al github 站點(diǎn)中的技能,以了解如何從這里開始。我將在這里詳細(xì)介紹我的代碼。看來這一切都在 Python 2.7 中)。
/test/intent文件夾是什么?我花了一段時(shí)間才開始理解這個(gè)文件夾的用途,我還在學(xué)習(xí)它。為了理解它,這些用 JSON 編寫的文件允許 Mycroft 確保您的技能意圖和您創(chuàng)建的文件中定義的聲音表達(dá)都可以正常工作。他們沒有定義聲音交互,而是測(cè)試它,因此得名。在我比較了來自維基百科的測(cè)試/意圖文件和hello-world技能之前,我并不清楚這一點(diǎn):
來自 hello-world的測(cè)試/意圖文件之一:
{
"utterance": "Hello world",
"intent_type": "HelloWorldIntent",
"intent": {
"HelloWorldKeyword": "hello world"
}
}
這是來自維基百科的技能:
{
"utterance": "tell me about the first world war",
"intent_type": "WikipediaIntent",
"intent": {
"WikipediaKeyword": "tell me about",
"ArticleTitle": "the first world war"
}
}
比較這些文件,幫助我理解了這些文件的作用。該話語是 Mycroft 可能會(huì)聽到的內(nèi)容的示例,其中包含關(guān)鍵字和細(xì)節(jié)。intent_type對(duì)應(yīng)于您的__init__.py文件中定義的意圖處理程序,當(dāng)您比較 JSON 文件的“intent:”鍵時(shí)可以看到,該鍵包含來自您的 vocab 文件的關(guān)鍵字,并且在 wiki 技能的情況下是鍵:值對(duì)通過。
所以這些文件并沒有定義你可能的交互,而是特定的測(cè)試用例,以確保你的技能文件一起工作。
上面沒有顯示可選的/regex文件夾,它包含正則表達(dá)式,幫助 Mycroft 響應(yīng)并解析它所聽到的信息!這是非常令人興奮的,但不是這個(gè)項(xiàng)目的主題。
使用安裝了 Picroft 0.8 的 Raspberry PI 3 編寫技能,需要您熟悉使用 linux 命令行。為了方便編寫這項(xiàng)技能,我在我的 Windows 10 筆記本電腦上使用 atom 編寫了所有需要的文件,然后將所有內(nèi)容上傳到 Github。
為了安裝這項(xiàng)技能,我從我的 github 頁面克隆了存儲(chǔ)庫并從那里開始工作。這不是處理軟件的理想方式。但是,既然我對(duì)這個(gè)過程感到滿意,我可能會(huì)提取模板技能并直接從那里使用nano作為我的編輯器,并正確地將更改推送/合并到我自己的存儲(chǔ)庫中。
該技能必須放在/opt/mycroft/skills 技能文件夾中。使用sudo reboot 重新啟動(dòng)系統(tǒng)后,我可以使用該技能。MSM(Mycroft Skill Manager)提供了一個(gè)工具,但我沒有在這個(gè)項(xiàng)目中使用它。我還有很多東西要學(xué)!
Python 代碼亮點(diǎn)
我發(fā)現(xiàn)通過命令行/納米/語音界面進(jìn)行調(diào)試的過程有點(diǎn)挑戰(zhàn)。因此,我編寫了一個(gè)測(cè)試腳本issTest006.py來調(diào)試__init__.py 意圖函數(shù)處理程序的基本功能,以便在我的桌面上運(yùn)行。
通過確保將非 Mycroft 相關(guān)功能與我的代碼中與 Mycroft 平臺(tái)相關(guān)的錯(cuò)誤分開,這有助于簡(jiǎn)化我的調(diào)試過程。
我們實(shí)際上只是在這里編寫一個(gè) Python 腳本。該技能在 Python 中被創(chuàng)建為一個(gè)類。要在 Mycroft 環(huán)境中工作,該類必須包含它的功能。這些在教程和模板技能中都有概述:
class HelloWorldSkill(MycroftSkill):
def __init__(self):
def initialize(self):
def handle_thank_you_intent(self, message):
...
def stop(self):
def create_skill():
return HelloWorldSkill()
就我而言,我修改了這個(gè)模板以適應(yīng) ISS 定位技能:
__init__(self)函數(shù)用于創(chuàng)建 Skill 的實(shí)例:
class ISSLocationSkill(MycroftSkill):
def __init__(self):
super(ISSLocationSkill, self).__init__(name="ISSLocationSkill")
...
這與任何其他 Python 類的__init__(self)構(gòu)造函數(shù)沒有什么不同。我沒有要在這里設(shè)置的實(shí)例變量,所以這就是這里所需要的。
def initialize(self)是我們構(gòu)建意圖和注冊(cè)意圖處理程序的地方。就我而言,只有一個(gè)。
您還可以在此處看到傳遞給函數(shù)的值匹配文件名、關(guān)鍵字 .voc 或我們之前編碼中的 JSON 鍵。這是關(guān)鍵字、意圖測(cè)試和意圖處理程序之間建立聯(lián)系的地方。因此,遵守 Mycroft 平臺(tái)的命名約定很重要。
def initialize(self):
iss_location_intent = IntentBuilder("ISSLocationIntent").require("ISSKeyword").build()
self.register_intent(iss_location_intent, self.handle_intent)
...
我的技能只有一個(gè)意圖,但您可以從Hello World Skill 中看到注冊(cè)多個(gè)意圖處理程序的樣子:
def initialize(self):
thank_you_intent = IntentBuilder("ThankYouIntent"). \
require("ThankYouKeyword").build()
self.register_intent(thank_you_intent, self.handle_thank_you_intent)
how_are_you_intent = IntentBuilder("HowAreYouIntent"). \
require("HowAreYouKeyword").build()
self.register_intent(how_are_you_intent,
self.handle_how_are_you_intent)
hello_world_intent = IntentBuilder("HelloWorldIntent"). \
require("HelloWorldKeyword").build()
self.register_intent(hello_world_intent,
self.handle_hello_world_intent)
我的技能的大部分代碼都包含在意圖處理程序中,這與稀疏的Hello World Skill 意圖處理程序形成對(duì)比。他們只需將 Mycroft 指向?qū)υ捒蛭募纯稍L問:
def handle_how_are_you_intent(self, message):
self.speak_dialog("how.are.you")
需要注意的是,傳遞的值是執(zhí)行技能時(shí)要訪問的對(duì)話文件的名稱,而不是您希望 Mycroft 說出的實(shí)際文本!傳遞的值是不帶.dialog擴(kuò)展名的文件名。
讓我們深入了解我的意圖處理程序,并嘗試關(guān)注來自意圖處理程序的信息是如何傳遞回 Mycroft 的。
我們要做的第一件事是從 open-notify 獲取當(dāng)前 ISS 位置。我們使用urllib2庫發(fā)出請(qǐng)求,然后使用json解析 JSON 有效負(fù)載響應(yīng)(請(qǐng)注意,urllib2 不是 Python3 中的單個(gè)庫)。
def handle_intent(self, message):
# get the 'current' latitude and longitude of the ISS from open-notify.org in JSON
reqISSLocation = urllib2.Request("http://api.open-notify.org/iss-now.json")
resISSLocation = urllib2.urlopen(reqISSLocation)
issObj = json.loads(resISSLocation.read()) # JSON payload of ISS location data
latISS = issObj['iss_position']['latitude']
lngISS = issObj['iss_position']['longitude']
你能看出上面的代碼有問題嗎?我可以并且經(jīng)歷過。如果 Open-Notify 的服務(wù)器已關(guān)閉或連接出現(xiàn)問題,會(huì)發(fā)生什么情況?這將導(dǎo)致程序崩潰。它不會(huì)使 Mycroft 崩潰,它只是不會(huì)為這種“錯(cuò)誤”情況提供可接受的語音響應(yīng),讓用戶(像我一樣)想知道到底發(fā)生了什么。為了糾正這個(gè)問題,在未來的版本中,我將使用 Python 中最棒的異常處理機(jī)制,就像我在后面的代碼中所做的那樣。
接下來,我們將使用從 Open-Notify 中解析出的 JSON 有效負(fù)載中的緯度和經(jīng)度來創(chuàng)建 URL 請(qǐng)求字符串以訪問GeoNames.org Web 服務(wù)。我們?cè)谶@里創(chuàng)建 2 個(gè)字符串,因?yàn)閷?duì)陸地和海洋/水特征有不同的反向地理編碼 api 調(diào)用:
...
oceanGeoNamesReq = "http://api.geonames.org/oceanJSON?lat="+ latISS +"&lng="+ lngISS +"&username=YourUserName"
landGeoNamesReq = "http://api.geonames.org/countryCodeJSON?formatted=true&lat=" + latISS + "&lng=" + lngISS +"&username=YourUserName&style=full"
...
不要忘記將您的用戶名插入到上面的字符串中!
盡管國際空間站的軌道旨在一次覆蓋全球 90% 的人口,但地球是 3/4 的水,每當(dāng)我看時(shí),大部分軌道似乎都在一片水域之上。因此,正如下面代碼中的注釋所示,我們首先檢查坐標(biāo)是否將地理編碼反向到海洋位置。再次在這里我應(yīng)該把它放在異常處理塊中。未來的東西。. .
# Since the Earth is 3/4 water, we'll chek to see if the ISS is over water first;
# in the case where this is not so, we handle the exception by searching for a country it is
# over, and is this is not coded for on GenNames, we just we say we don't know
oceanGeoNamesRes = urllib2.urlopen(oceanGeoNamesReq)
toponymObj = json.loads(oceanGeoNamesRes.read())
在下一段代碼中,我們絕對(duì)必須將其包裝在異常處理塊中。當(dāng)我們嘗試從海洋位置解析從GeoNames.org返回的 JSON 有效負(fù)載時(shí),如果國際空間站位于陸地上方,則會(huì)產(chǎn)生錯(cuò)誤,因?yàn)橛行ж?fù)載中不存在海洋名稱密鑰。
如果我們得到這個(gè)錯(cuò)誤,我們的第一個(gè)假設(shè)將是我們?cè)陉懙厣稀?/font>因此,我們將嘗試訪問土地的反向地理編碼服務(wù)。實(shí)際上,我們可以通過檢查返回的狀態(tài)/錯(cuò)誤代碼來使這更復(fù)雜,但是這個(gè)假設(shè),陸地與水體,似乎工作得很好:
try:
toponym = "the " + toponymObj['ocean']['name']
except KeyError:
landGeoNamesRes = urllib2.urlopen(landGeoNamesReq)
toponymObj = json.loads(landGeoNamesRes.read())
toponym = toponymObj['countryName']
except:
toponym = "unknown"
因此,在這里,如果出現(xiàn) KeyError,我們會(huì)嘗試從有效負(fù)載中解析海洋名稱鍵,然后我們通過對(duì)陸地特征進(jìn)行反向地理編碼來處理此錯(cuò)誤,并從中獲取國家名稱。在訪問此 Web 服務(wù)產(chǎn)生錯(cuò)誤的情況下,我們通過將其稱為未知位置來處理此問題。也許不是最好的,但它是開始處理海洋和陸地坐標(biāo)都不能正確反轉(zhuǎn)地理編碼的情況的好方法。如果您從 GeoNames.org 探索許多反向地理編碼 Web 服務(wù),您可能會(huì)發(fā)現(xiàn)來自 Mycroft 的其他有用的 JSON 有效負(fù)載項(xiàng)。看看,讓我知道或自己修改!
到目前為止,為 intent_handler 描述的所有代碼都只是 Python。我們還沒有與 Mycroft 互動(dòng)!您可以通過將此代碼與我編寫的 Python 測(cè)試腳本進(jìn)行比較來看到這一點(diǎn)。我想展示這一點(diǎn),因?yàn)椴粌H再次用 Python 編寫很有趣,而且還證明在我看來,如果你可以用 Python 編寫它,你就可以讓 Mycroft 在語音控制下運(yùn)行它!這是非常強(qiáng)大的東西!
現(xiàn)在讓我們看看我們?nèi)绾螌⑽覀冃掳l(fā)現(xiàn)的關(guān)于 ISS 在哪里的知識(shí)傳遞給 Mycroft:
if toponym == "unknown":
self.speak_dialog("location.unknown",{"latitude": latISS, "longitude": lngISS})
else:
self.speak_dialog("location.current",{"toponym":toponym, latitude": latISS, "longitude": lngISS})
就在這里!還記得我們討論過location.current.dialog文件中的{{latitude}}鍵嗎?好吧,這是我們將值傳遞給這些鍵的地方!
正如您在此處看到的,如果我們找到了陸地或水的地名,我們會(huì)將緯度、經(jīng)度和地名傳回對(duì)話文件以供 Mycroft 發(fā)言。如果兩者都失敗了,并且我們?yōu)榻o定的緯度和經(jīng)度生成了一個(gè)未知的地名,我們選擇location.unknown.dialog文件并讓 Mycroft 從那里執(zhí)行一個(gè)短語!
很酷,對(duì)吧?
如您所知,為 Mycroft 編寫代碼比記錄所有這些更容易!
示威
讓我們看看幾種不同情況下的技能:
需要改進(jìn)
完美是完整的敵人。所以我選擇了代碼,因?yàn)槲业玫搅撕芏辔蚁雵L試的想法,但我也想把它拿出來,這樣人們就可以看到在這個(gè)平臺(tái)上構(gòu)建語音應(yīng)用程序是多么容易和有趣.
話雖如此,正如您將在下面的演示中看到的那樣,我仍然沒有弄清楚如何讓 Mycroft 在識(shí)別方面正確處理首字母縮寫詞或首字母縮寫詞,如 ISS。
在語音方面,從請(qǐng)求到響應(yīng)也有一點(diǎn)延遲。這可能是由于我的設(shè)置、編碼或此時(shí)平臺(tái)固有的。我知道所有這些都可能會(huì)隨著時(shí)間的推移而改善。
我們還依賴 2 個(gè) Web 服務(wù),Open-Notify 和 GeoNames。如您所見,我真的沒有嘗試處理服務(wù)器錯(cuò)誤。一個(gè)簡(jiǎn)單的修復(fù),但仍然需要做一個(gè)來提高這個(gè)技能!
結(jié)論/一些觀察
我已經(jīng)讓 Mycroft(Picroft 0.8) 在 Raspberry Pi 3 上運(yùn)行了一周多一點(diǎn),并為此編寫了我的第一個(gè)技能。這個(gè)平臺(tái)激勵(lì)我的一件事是我對(duì)它的參與感。我覺得我想要進(jìn)行的不僅僅是“單回合”事件或技能。一旦我習(xí)慣了在命令行上并再次使用 nano,就很容易編寫該技能,我真的很喜歡一切都在 Python 中。我最近沒有機(jī)會(huì)用 Python 編寫代碼,所以這是一個(gè)再次這樣做的好機(jī)會(huì),也開始?jí)粝?Mycroft 和 Python 可以在 Raspberry Pi 3 上組合完成的所有事情。
到目前為止,對(duì)于 Mycroft 是否允許我創(chuàng)建一個(gè)好的聲音設(shè)計(jì)這個(gè)問題的答案是肯定的。dialog、vocab和__init__.py文件之間的相互聯(lián)系清晰且易于使用。
沿消息總線傳遞信息的意圖和意圖處理程序的概念對(duì)我來說很有意義。我期待在我的語音詢問中探索正則表達(dá)式,然后嘗試創(chuàng)建多輪技能。
什么是好的聲音設(shè)計(jì)?我希望通過這個(gè)平臺(tái)更多地探索這個(gè)問題并提高我的能力。如果你有一個(gè) Raspberry Pi 3 和 Ubuntu 盒子可以使用,或者即使你可以購買 Mycroft Mark 1,我認(rèn)為在這個(gè)平臺(tái)上進(jìn)行實(shí)驗(yàn)是非常值得的!
- Dexter獨(dú)立語音助手開源分享
- 飛船界面開源硬件
- 開源硬件之語音控制LED
- 語音控制機(jī)器人開源分享
- 使用語音命令控制LED開源分享
- 節(jié)能和語音可控的LED開源分享
- 智能家居控制系統(tǒng)方案開源資料
- 用于Modbus RTU的控制界面的Modbus RTUv1.02 30次下載
- 自動(dòng)控制原理實(shí)驗(yàn)測(cè)試圖匯總 2次下載
- 基于DSP的排險(xiǎn)機(jī)器人車體控制系統(tǒng) 14次下載
- 串口人機(jī)界面和普通顯示屏的區(qū)別及優(yōu)勢(shì) 5次下載
- 用串行DAC7513芯片對(duì)語音信號(hào)進(jìn)行采集的實(shí)驗(yàn)工程文件資料合集 11次下載
- MATLAB圖形用戶界面設(shè)計(jì)的實(shí)驗(yàn)詳細(xì)概述 0次下載
- ACTEL FPGA實(shí)驗(yàn)教程 332次下載
- 語音識(shí)別在EWB電路基礎(chǔ)實(shí)驗(yàn)教學(xué)中的應(yīng)用
- 離線語音控制技術(shù)特點(diǎn) 230次閱讀
- 【插針機(jī)HMI開發(fā)】用AWTK開發(fā)人機(jī)界面 391次閱讀
- AWTK 開源串口屏開發(fā)(14) - 界面重用 245次閱讀
- 基于單片機(jī)的語音識(shí)別控制系統(tǒng)設(shè)計(jì) 829次閱讀
- 電子設(shè)備中的語音和音頻控制進(jìn)展 584次閱讀
- 兩款價(jià)格低至個(gè)位數(shù)的語音控制方案 494次閱讀
- 基于HIL+RCP的boost電路實(shí)驗(yàn)步驟 1200次閱讀
- 編寫機(jī)智云安卓開源框架的UI界面 1626次閱讀
- 當(dāng)語音控制和語音接口開始滲透到所有消費(fèi)類邊緣設(shè)備 1673次閱讀
- dfrobot語音識(shí)別控制板 介紹 2972次閱讀
- 語音芯片選型_語音芯片如何使用 3983次閱讀
- 基于Linux和QT的簡(jiǎn)便步進(jìn)電機(jī)控制界面設(shè)計(jì)與實(shí)現(xiàn) 9054次閱讀
- 詳細(xì)解析WORLD語音合成系統(tǒng)的原理以及使用方法 1.5w次閱讀
- 人機(jī)界面的發(fā)展歷程和組成結(jié)構(gòu)及工作原理,人機(jī)界面如何控制plc? 6906次閱讀
- ZedBoard學(xué)習(xí)手記(十) 圖形界面控制ZedBoard硬件 2147次閱讀
下載排行
本周
- 1使用單片機(jī)實(shí)現(xiàn)七人表決器的程序和仿真資料免費(fèi)下載
- 2.96 MB | 44次下載 | 免費(fèi)
- 2聯(lián)想E46L DAOLL6筆記本電腦圖紙
- 1.10 MB | 2次下載 | 5 積分
- 3MATLAB繪圖合集
- 27.12 MB | 2次下載 | 5 積分
- 4PR735,使用UCC28060的600W交錯(cuò)式PFC轉(zhuǎn)換器
- 540.03KB | 1次下載 | 免費(fèi)
- 5UCC38C42 30W同步降壓轉(zhuǎn)換器參考設(shè)計(jì)
- 428.07KB | 1次下載 | 免費(fèi)
- 6DV2004S1/ES1/HS1快速充電開發(fā)系統(tǒng)
- 2.08MB | 1次下載 | 免費(fèi)
- 7模態(tài)分解合集matlab代碼
- 3.03 MB | 1次下載 | 2 積分
- 8美的電磁爐維修手冊(cè)大全
- 1.56 MB | 1次下載 | 5 積分
本月
- 1使用單片機(jī)實(shí)現(xiàn)七人表決器的程序和仿真資料免費(fèi)下載
- 2.96 MB | 44次下載 | 免費(fèi)
- 2UC3842/3/4/5電源管理芯片中文手冊(cè)
- 1.75 MB | 15次下載 | 免費(fèi)
- 3DMT0660數(shù)字萬用表產(chǎn)品說明書
- 0.70 MB | 13次下載 | 免費(fèi)
- 4TPS54202H降壓轉(zhuǎn)換器評(píng)估模塊用戶指南
- 1.02MB | 8次下載 | 免費(fèi)
- 5STM32F101x8/STM32F101xB手冊(cè)
- 1.69 MB | 8次下載 | 1 積分
- 6HY12P65/HY12P66數(shù)字萬用表芯片規(guī)格書
- 0.69 MB | 6次下載 | 免費(fèi)
- 7華瑞昇CR216芯片數(shù)字萬用表規(guī)格書附原理圖及校正流程方法
- 0.74 MB | 6次下載 | 3 積分
- 8華瑞昇CR215芯片數(shù)字萬用表原理圖
- 0.21 MB | 5次下載 | 3 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935119次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
- 1.48MB | 420061次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233084次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191367次下載 | 10 積分
- 5十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183335次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81581次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73807次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65987次下載 | 10 積分
評(píng)論
查看更多