在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>語音控制界面實(shí)驗(yàn)開源分享

語音控制界面實(shí)驗(yàn)開源分享

2022-12-14 | zip | 0.05 MB | 次下載 | 免費(fèi)

資料介紹

描述

介紹和動(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)目和技能也可以看出語音的流行和興奮,例如:

  • GooglePi - Raspberry Pi 上的 Google 助理

幾周前,我發(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.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-Notifywheretheiss.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è)不同文件,并具有特定的文件名約定:

?
poYBAGOYPp-AVkMjAACubWTHfN8579.png
來自 Mycroft 的 github 頁面,可以使用一個(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)試過程。

?
pYYBAGOYPqGAMKeGAADyfsPwA-0325.jpg
使用測(cè)試腳本驗(yàn)證 python 代碼。
?

我們實(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è)問題的答案是肯定的。dialogvocab__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)是非常值得的!


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1使用單片機(jī)實(shí)現(xiàn)七人表決器的程序和仿真資料免費(fèi)下載
  2. 2.96 MB   |  44次下載  |  免費(fèi)
  3. 2聯(lián)想E46L DAOLL6筆記本電腦圖紙
  4. 1.10 MB   |  2次下載  |  5 積分
  5. 3MATLAB繪圖合集
  6. 27.12 MB   |  2次下載  |  5 積分
  7. 4PR735,使用UCC28060的600W交錯(cuò)式PFC轉(zhuǎn)換器
  8. 540.03KB   |  1次下載  |  免費(fèi)
  9. 5UCC38C42 30W同步降壓轉(zhuǎn)換器參考設(shè)計(jì)
  10. 428.07KB   |  1次下載  |  免費(fèi)
  11. 6DV2004S1/ES1/HS1快速充電開發(fā)系統(tǒng)
  12. 2.08MB   |  1次下載  |  免費(fèi)
  13. 7模態(tài)分解合集matlab代碼
  14. 3.03 MB   |  1次下載  |  2 積分
  15. 8美的電磁爐維修手冊(cè)大全
  16. 1.56 MB   |  1次下載  |  5 積分

本月

  1. 1使用單片機(jī)實(shí)現(xiàn)七人表決器的程序和仿真資料免費(fèi)下載
  2. 2.96 MB   |  44次下載  |  免費(fèi)
  3. 2UC3842/3/4/5電源管理芯片中文手冊(cè)
  4. 1.75 MB   |  15次下載  |  免費(fèi)
  5. 3DMT0660數(shù)字萬用表產(chǎn)品說明書
  6. 0.70 MB   |  13次下載  |  免費(fèi)
  7. 4TPS54202H降壓轉(zhuǎn)換器評(píng)估模塊用戶指南
  8. 1.02MB   |  8次下載  |  免費(fèi)
  9. 5STM32F101x8/STM32F101xB手冊(cè)
  10. 1.69 MB   |  8次下載  |  1 積分
  11. 6HY12P65/HY12P66數(shù)字萬用表芯片規(guī)格書
  12. 0.69 MB   |  6次下載  |  免費(fèi)
  13. 7華瑞昇CR216芯片數(shù)字萬用表規(guī)格書附原理圖及校正流程方法
  14. 0.74 MB   |  6次下載  |  3 積分
  15. 8華瑞昇CR215芯片數(shù)字萬用表原理圖
  16. 0.21 MB   |  5次下載  |  3 積分

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935119次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
  4. 1.48MB  |  420061次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233084次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費(fèi)下載
  8. 340992  |  191367次下載  |  10 積分
  9. 5十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
  10. 158M  |  183335次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81581次下載  |  10 積分
  13. 7Keil工具M(jìn)DK-Arm免費(fèi)下載
  14. 0.02 MB  |  73807次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65987次下載  |  10 積分
主站蜘蛛池模板: 视频在线高清完整免费观看| 2022年永久免费观看| 日韩高清成人毛片不卡| 四虎永久在线精品免费观看地址 | 亚洲аv电影天堂网| 开心激情婷婷| 美女自熨出白浆视频在线播放| 日本在线免费| 免费无遮挡很爽很污很黄| 一级特级aaa毛片| 久草色在线| 久久精品国产亚洲aa| 99久久国产综合精品国| 久久精品99| 成人午夜亚洲影视在线观看| 一级黄色毛片免费看| 国产精品视频一区二区三区| 1024你懂的国产在线播放| 午夜性爽爽爽| 在线播放91灌醉迷j高跟美女| 酒色成人网| 人人爱人人射| 国产精品久久久久久久久福利| 99久免费精品视频在线观看2| 性欧美高清视频| 一级不卡毛片免费| 美女隐私黄www视频| 黄色三级在线看| 日本xxxxxxxxx69| 日本丶国产丶欧美色综合| 人人看人人做| 亚洲大尺度视频| 综合网在线观看| 欧美亚洲网站| 国产精品手机在线| h国产| 久优草| 丁香六月欧美| 六月天婷婷| 国产黄色在线网站| 久久九九国产精品怡红院|