中文 | English

用樹梅派,自造Marvel影集的AI語音助理

翻攝自instructables官方網站,特此致謝!

(感謝作者 Neutrino-1開放授權,使我們得以摘譯這篇文章,特此致謝。原文網址:https://www.instructables.com/Mrs-Minutes-Voice-Assistant-Using-Raspberry-Pi-Zer/,若讀者想要下載相關檔案及程式碼,請至點及原文網址,並至相關步驟進行下載,謝謝。)

我是漫威超級英雄電影的超級粉絲,最近,漫威影業推出了新影集《洛基》(Loki),是截至目前為止我最喜愛的影集。所以,我想如果使影集中的一個角色栩栩如生,應該會很有趣!

所以,請大家與「分鐘小姐」(Miss Minutes)見個面。分鐘小姐是《洛基》中的AI角色,替影集中的一個虛構單位「時間變異管理局」(Time variance authority)工作。而分鐘小姐於影集中可執行許多任務:她說話;與其他角色互動;當然能獲取資料及訊息,幾乎等同於Friday與Jarvis在《鋼鐵人》(Iron Man)中所扮演的角色。

 所以,這就是我所自造、以及本文所要介紹的作品。

但為完成這個作品,我實際上借用了許多其他作者的概念、方法或作品。所以,請您務必閱讀所有指示,以建構您自己的AI分鐘小姐。此外,請務必取得下方的製作材料,好使您能輕鬆進行本專案。

材料:

  • 3D列印機
  • 橙色長絲材料
  • 領口麥克風
  • 桌面音箱
  • 樹梅派Zero W
  • 音效卡
  • 母直流插孔
  • 5V直流適配器
  • 公音頻插孔
  • 膠槍

第一步:建立分鐘小姐的外殼

通常,我從電子產品開始自造,然後逐步構建外殼,但本專案中我將以稍微不同的方式處理。 首先,我將製作外殼,然後在其中安裝電子設備。

在開始建模前,我試著搜索是否有人已完成了類似專案,我發現了 Thingiverse網站上的用戶PhilippHee令人驚艷地「分鐘小姐時鐘專案」。 但不幸的是,在記錄專案頁面時,Thingiverse 已將該頁面關閉,一旦頁面備份,我將會更新連結。

不論如何,幾週前我已經下載了STL檔案,所以我不是完全從頭開始創建專案。 我使用fusion 360軟體,根據我的需要編輯並重新混合了他的專案。您可查看上方圖像,了解如何修改圖像,以滿足該專案的需要。

第二步:多色3D列印

翻攝自instructables官方網站,特此致謝!




一旦STL檔案準備好,就可進行列印。我將模型放入Cura軟體並將其切片。 您可使用單一顏色進行列印,然後於其上繪製眼睛與輪廓,或者如我一樣在列印時更換長絲材料。

您可查看此連結,了解如何在僅使用一個噴嘴列印時更改顏色。

上方圖片是參考用,您需暫停以更改長絲材料的顏色。

  • 初始——橙色燈絲
  • 第一次變化——黑絲
  • 第二次變化——白絲
  • 第三次變化——黑絲

為了列印這個模型,我使用PLA和一個直徑為 0.6 毫米、層高為 0.4 毫米的更大噴嘴,以便更快列印。這個模型完整列印約需9小時,在列印過程中我不得不更換長絲材料3次。但是,我仍沒有選擇適合的圖層高度以改變顏色,所以把它搞砸了。

無論如何,這次失敗經驗提供了一個解釋的機會,使您了解若並未使用多色3D列印技術,如何改變顏色。

第三步:3D 列印後處理

列印後,我花了幾分鐘小心去除支撐材料。

請注意:去除支撐材料時,不要做任何大動作,因為面的厚度非常小,很容易折斷。

對我來說,顏色不是那麼有吸引力,所以我修改了顏色。我使用黑色記號筆勾勒輪廓,用增白劑勾勒眼睛,弄了一段時間後,我完全改變了顏色!您可於上圖中,看見模型看起來比我列印的原始顏色要好得多。

第四步:樹梅派Zero W和Google助理

由於3D模型已準備就緒,我們可以開始自造分鐘小姐的「大腦」。

我將使用樹梅派Zero W作為硬體;至於軟體,我將使用Google助理SDK。這在2年前是不可能的,因為Google助理SDK不支援樹莓派Zero。但去年Google發佈了一項新的Google助理服務,該服務支援各種硬體,包括了樹梅派Zero W。

第五步:音效硬體

在處理語音助理前,讓我們先處理一下硬體問題。您可看見樹梅派Zero W,沒有任何類型的音頻輸入或音頻輸出。

為解決這個問題,我使用了一個帶有微型 USB 至全尺寸 USB 適配器的USB音效卡,我們將透過USB獲取音頻輸入和輸出,並將其發送至相應的音頻外圍設備。

對於音頻輸入,讓我們使用領口麥克風,因為這將非常適用於分鐘小姐的鼻子。但麥克風附帶的 3.5毫米立體聲插孔不適用於音效卡,所以,我以音頻插孔取代它。至於音頻輸出,我們可使用任何普通揚聲器,但在這樣的情況下,我們至終也會構建一個音頻放大器電路,因此我將使用由USB供電的桌面揚聲器。

第六步:針對樹梅派Zero W,揚聲器和麥克風的設置

這似乎有點棘手,但其實相當容易,甚至Google助理服務的文檔網頁,也有關於如何設置揚聲器和麥克風的硬體指南。

首先,在SD卡上安裝樹莓派作業系統。如果您不確定如何安裝?請觀看我的影片,了解如何在沒有顯示器和鍵盤的情況下設置樹莓派。在安裝作業系統後,請使用 putty 透過 SSH 連接至樹梅派。

現在,請使用下方的命令,檢查樹莓派是否檢測到音效卡:

lsusb

透過命令,檢查麥克風與揚聲器的連結:

arecord -l

aplay -l

請您記下音效卡的ID和設備的ID。取得 ID後,請使用以下命令,在 /home/pi 中創建一個名為 .arecordrc 的新檔案:

sudo nano /home/pi/.arecordrc

請將以下的程式碼,貼入nano編輯器中:

type asym

  capture.pcm “mic”

  playback.pcm “speaker”

}

pcm.mic {

  type plug

  slave {

    pcm “plughw:[card ID]<card number=””>,[device ID]<device number=””>”

  }

}

pcm.speaker {

  type plug

  slave {

    pcm “hw:[card ID],[device ID]”<br><card number=””><device number=””>  }

}</device></card></device></card>

然後,請將卡號和設備號,替換為您在上一個命令中找到的 ID。接著按下ctrl+X退出,並按Y保存文件。最後,使用命令調整音量:

 alsamixer

第七步:測試音效和麥克風

請使用以下命令,測試麥克風:

speaker-test -t wav

您可以使用以下命令,將聲音錄製起來:

arecord --format=S16_LE --duration=5 --rate=16000 --file-type=raw out.raw

以下這個命令,可將您錄製的聲音播放:

aplay --format=S16_LE --rate=16000 out.raw

第八步:設定Google助理

要使用Google助理 SDK,您需前往此連結,創建一個新專案並設置任意名稱。在下一頁,用滑鼠向下移動至網頁底部,選擇設備註冊及設置設備。完成後,下載我們稍後將使用的憑證(credentials)。然後,前往此連結,並啟用Google助理API。最後,設置 oauth 同意螢幕。您可按照這份Google文件了解更多詳細訊息。

第九步:安裝Google助理SDK

在上一步驟的Google文件中,python 軟體包被安裝於虛擬環境中,但稍後在啟動並運作命令時可能會出現問題。所以,我使用以下命令:

sudo apt-get update

安裝python3:

sudo apt-get install python3-dev

安裝軟體包的系統依賴項:

sudo apt-get install portaudio19-dev libffi-dev libssl-dev

安裝Google助理SDK:

python3 -m pip install --upgrade google-assistant-sdk[samples]

取得授權碼:

 <pre>google-oauthlib-tool --scope https://www.googleapis.com/auth/assistant-sdk-prototype \

      --save --headless --client-secrets /path/to/<a rel="nofollow"></a>client_secret_client-id<a rel="nofollow"></a>.json

如果一切都運作順利,您將會看見類似於以下的回應:

credentials saved: /path/to/.config/google-oauthlib-tool/credentials.json

第十步:修改pushtotalk.py

首先,複製這個Github上的倉儲:https://github.com/googlesamples/assistant-sdk-pyt…

然後,開啟檔案pushtotalk.py(路徑:assistant-sdk-python/google-assistant-sdk/googlesamples/assistant/grpc/)。

刪除第456至465行的程式碼,並將它們替換為:

assistant-assist()

第十一步:在啟動時運作Google助理

運作以下命令:

sudo nano /etc/rc.local

請使用您的檔案目標輸入以下命令,然後在退出「 0 」之前接著「&」:

sudo -H -u pi python3  /[path to pushtotalk]/pushtotalk.py &

為在運作Google助理前,確保您有連接網際網路,請輸入以下命令:

sudo raspi-config

選擇「啟動選項」(boot option),接著選擇「在啟動時等待網路」(wait for the Network at boot),這將確保在啟動期間,有穩定的網際網路連接後,才啟動Google助理。

第十二步:測試Google助理

當重新啟動時,樹莓派在連接至wifi 網路前不會啟動。 一旦連接至網絡,樹莓派就會啟動並開始運作 pushtotalk.py 腳本。

由於我們修改了pushtotalk.py,Google助理會一直處於聽的狀態,我們並不需要觸發詞,這是我們將錯誤轉化為功能之處。 由於麥克風是全向性的,並且除了單向性外,語音是低沉的(以及錄音音量低),因此助理不會因背景聲音和語音而被觸發。

現在,您可在沒有任何觸發詞的情況下,與您的Google助理互動,也可按下按鈕並面對助理開始說話。

第十三步:將分鐘小姐的所有部件組裝起來

是時候把所有部件放進機箱。讓我們從電源的放置展開,接下是樹莓派Zero W和音效卡,再來便可安裝麥克風。至於揚聲器,我將打開桌面揚聲器並將其內部的揚聲器取出,如同我們對針對麥克風所做的一樣,我也會更改此揚聲器的音頻插孔。最後,請將所有部件焊接在一起,並運用一些熱熔膠粘住。最後,添加一些熱插件並蓋住分鐘小姐的背面,便大功告成了!

小結

若您喜歡這篇文章,請務必在instructables上追蹤,以閱讀更多有趣的專案;還有別忘記訂閱我的Youtube頻道喔!

分享到社群

This site or product includes IP2Location LITE data available from https://lite.ip2location.com.