【RP筆記6】RP3B: 好吧,谷歌

Google在2016年十一月推出了Google Home,很快就在2017年的四月開放了Google Assistant SDK給開發者用戶使用;然後兩個月後,就在市場上推出了一個小立方盒子,給愛動手做小機器的創客(maker)展示如何運用其SDK做出一個和Google Home同等功能的問答小Google Home。名稱延續DIY(Do It Yourself)的精神,Google把它稱為AIY (Artificial Intelligence Yourself)。到了年底,又推出了一款AIY小盒,可以從視頻識別出物體名稱來。前者叫 AIY Voice,後者叫 AIY Vision,這兩個小盒裡面所用的小電腦,就是Raspberry Pi。不過後者現在又被收回不賣了,據說是有些步驟太過麻煩(譬如焊接等),所以下一次再推出時可能會有所改進。下面想介紹一下組裝AIY Voice的步驟和其程序,這個產品很成功,市場上現在還有得賣,非常便宜。零件總計有:

AIY Voice Box: 5-10美元;
Raspberry Pi 2B / Raspberry Pi 3B: 30-35美元;
Raspberry Pi 2B/3B所需的 2.5A 充電器: 7-10美元;
8-16 microSD: 3-10美元;
需要接上HDMI屏幕,USB鍵盤和USB老鼠。
當然還需要WiFi網絡才能應用Google Assistant SDK程序。

這麼算下來,差不多是三分之一到半個Google Home的價錢了。而且喇叭、收音、外貌都很業餘嘛!這個啊:創客的樂趣是在“做”的方面,同時也學到如何應用。如果這個說法還算符合你的邏輯,可能我就不用多說了,我們開始吧!

aiy_materialsAIY Voice盒子裡除了硬紙片和零件,還有一本約70頁的彩色小冊子,小冊子先包括圖片說明動手組裝這個小立方體的步驟( 還沒買的可以參考 註1 的圖片步驟 ),然後列了幾個小項目,可以執行不同的程序來達成,啟發創客學習來應用在自己的創作裡。第一個項目是做出與Google Home問答類似的玩意兒。其它項目是講話來控制IO或屏幕展示文字.不過先提醒一下,除了所列的第一個SDK應用是免費的,後面幾個項目都要在Google Cloud網站個人賬號輸入信用卡;但也不要擔心,Google聲明了先允許前12個月三百美元免費使用,到12月後也不會自動扣錢,輸入信用卡只是為了識別是真人使用而不濫用,所以放心隨便測試好了。

https://dl.google.com/dl/aiyprojects/vision/aiyprojects-2018-01-03.img.xz 下載鏡像,用Etcher燒製(步驟可參考前文第三至第六步)入microSD卡。microSD卡放入Raspberry Pi (我買的是Raspberry Pi 3B) ,HDMI槽接上屏幕,兩個USB槽接上老鼠和鍵盤,然後就可以啟動了。

啟動後,要先點擊桌面上的兩個文件測試喇叭和錄音。沒有問題的話,就可以從右上角尋找自己的WiFi設置密碼。

aiy_osscreen點擊左上角屏幕的瀏覽器上 https://console.cloud.google.com 進入Google賬戶。按照步驟開啟谷歌雲層一個項目(Project),在這個項目裡激活(Enable) Google Assistant API。然後生成一個OAuth 2.0 用戶(client),再生成一個信用(credential),下載這個信用的json文件,改名成 assistant.json 放在/home/pi文件夾裡即可。這部分步驟的詳情可以參考那本附送的小冊子。

這時雙擊“Start dev terminal”進入指令界面(shell),注意:根據小冊子裡所說的src裡找,是找不到所說的源代碼文件的,要去 src/examples/voice:
cd src/examples/voice
再 ls 才能看到相關的python源代碼。我們看到assistant_library_demo.py ;打入以下指令運行:
./assistant_library_demo.py
這時,你已經有了一個Google Home的雛形,頂上的LED按鈕閃動表示接通了Google Assistant。
如果你問:“OK Google, how tall is Albert Einstein?”,它就會告訴你:”Albert Einstein is five-foot-nine.”
如果你問:“OK Google,how is the weather today?”,它就能回答本地的最高溫度、最低溫度、雨晴雪風等訊息,當然若是你的問題提到其它地區,它可以隨時回答地球上任何一個角落的天氣。

就這麼簡單。再問問題時,永遠以“OK Google”開頭即可。同一個問題問幾次,你會得到類似但略微不同的答案;如果你希望再聽一次同一答案,說“OK Google,repeat”即可,它就會說“I said:…”;如果你隔了太久要求重複,它就會說“Sorry, I forgot.” 有的答案能讓人噴飯,譬如問它生日是哪天之類的無厘頭問題。

可以用 Ctrl-C 停了程序,現在我們看看src/examples/voice 還有什麼程序。程序全都很小,每個程序都不超過三頁紙就能打出來,可以理解到,收入聲音的解讀、判斷、反應都在谷歌雲層上,所以一直需要網絡連接。還發現有一個 assistant_button_demo.py ,看了看程序又執行一下,是可以不用說“OK Google”,直接按上面的按鈕就能對話的程序;然後又發現一個 assistant_local_command_demo.py 的程序,發現它還賦予“power off”、“reboot”、“ip address”特殊意義的程序。試了試,發現 “power off”完美地關閉(shutdown)了這個小立方體,毫無問題;“ip address” 給的是192.168.*這個沒用的局域網地址(是這個python小程序自己發出的指令);可是 Google Home 總是聽錯“reboot” 為 “repeat”,最後我在這python程序內修改成關鍵字“restart please”(我再另存為my_assistant.py),念“OK Google, restart please”就能從新啟動系統了;所以這就顯示了Google Assistant SDK 的可用功能:你可以自設各種指令,等待人念出指令時執行程序。

最後,如果要讓系統開動時自動啟動任何一小程序,可以:
1. 先確定程序執行無誤,否則這種操作系統一啟動就執行的程序可能會造成問題。

2. 用nano開一個新文件 my_assistant.service 打入以下內容:


Description=My awesome assistant app

[Service]
ExecStart=/bin/bash -c ‘/home/pi/AIY-projects-python/env/bin/python3 -u src/examples/voice/my_assistant.py’
WorkingDirectory=/home/pi/AIY-projects-python
Restart=always
User=pi

[Install]
WantedBy=multi-user.target


(注意:上面從 ExecStart到 my_assistant.py’ 都是在同一行裡)

3. 把它移到系統文件夾裡:
sudo mv my_assistant.service /lib/systemd/system/

4. 啟動服務程序:
sudo systemctl enable my_assistant.service
5. 如果需要退出服務:
sudo systemctl disable my_assistant.service
6. 如果想手動啟動服務:
sudo service my_assistant start
7. 想手動關閉服務:
sudo service my_assistant stop

所以執行這個 my_assistant.service 的結果是:插上電一分鐘後,小盒子頂上的按鈕開始慢慢閃動,表明Google Assistant正在運行。然後可以問答問題,等到我說“OK Google, power off.” 它就說:“Goodbye!”然後自行關閉結束了。

參考:
https://aiyprojects.withgoogle.com/voice/

Posted in i.tech and tagged , , , , , , , , , , .