月份彙整: 2019 年 8 月

試玩 Coral USB Accelerator

我不久前買了 Google 出的 Edge TPU 裝置:Coral USB Accelerator 來玩玩看,覺得這玩意非常不錯,台幣兩千多元,可以跑 TensorFlow Lite 格式的模型,我個人是覺得還蠻划算的。

我先用 Raspberry Pi 3 Model B+ 來測試 Pose Detection 模型,一開始使用預設的解析度:640×480,繪製的速度不是很理想,影片如下:

然後我把解析度設定成:480×360,繪製的速度有加快,但還是不盡理想,所以後來我改用一台 2013 年買的小筆電來跑,這次繪製的速度就相當不錯了,影片如下:

這台小筆電的規格為:CPU 是 Intel Celeron(R) CPU 847 @ 1.10GHz,記憶體 4GB,作業系統是 Debian 10 (buster) amd64 版,且有 USB 3 的插孔。

Raspberry Pi 3 Model B+ 除了 CPU 速度較慢之外,也沒有 USB 3 的插孔,所以整體上慢了一大截。但是前陣子出的 Raspberry Pi 4 Model B 有 USB 3 插孔,我已經訂了一台 Pi 4,等收到貨後再測試看看繪製速度是否有提升。

# 2019 年 11月 3 日補充: 我在 Raspberry Pi 4 (4GB 記憶體版本) 上測試了 Coral PoseNet,測試結果請看以下影片,TrueFPS 維持在 20.x 以上:

然後我還有嘗試 Object detection 與 MiniGo 圍棋:

Coral 官方網站也提供了好幾個已編譯好的模型讓人下載:https://coral.withgoogle.com/models/ ,可以先從這些模型開始玩起。

感想:這種 Edge TPU 裝置可以做很多有趣的應用,而且價格不算貴,有興趣的人快去買來玩玩看!

IchigoJam BASIC RPi 初體驗

IchigoJam BASIC RPi 是一個運作在 Raspberry Pi 上的 OS,這個 OS 很有趣,開機後會顯示一個黑白畫面的 BASIC 終端機,完全沒有 GUI,直接寫 BASIC 控制 Raspberry Pi,彷彿就像是 30 多年前的個人電腦。

下方是我嘗試用 IchigoJam BASIC RPi 控制 Pin 輸出的影片:

電子專案》Closed Eye Alarm

我寫了個 Android app,利用 Google Play Services Vision 的 FaceDetector 偵測人臉位置與眼睛打開的機率,然後只要發現有人的眼睛可能是閉上的,就傳送訊息給 micro:bit (透過 BLE) ,micro:bit 上接了一個 speaker,收到訊息就會逼逼叫。上方是 Demo 影片。

圖:micro:bit 與 speaker

在 Raspberry Pi 上安裝 Groovy

打開終端機,用 apt 指令安裝 OpenJDK 8 與 Groovy:

$ sudo apt install openjdk-8-jdk groovy

然後,我們試試是否可執行 groovy:

$ groovy -v
groovy: JAVA_HOME is not defined correctly, can not execute: /usr/lib/jvm/default-java/bin/java

會顯示「groovy: JAVA_HOME is not defined correctly, can not execute: /usr/lib/jvm/default-java/bin/java」這個訊息。

我們先切換到 /usr/lib/jvm 目錄下查看一下:

$ cd /usr/lib/jvm
$ ls -l
lrwxrwxrwx 1 root root   21  6月 17 02:24 java-1.11.0-openjdk-armhf -> java-11-openjdk-armhf
drwxr-xr-x 9 root root 4096  7月  8 01:20 java-11-openjdk-armhf
lrwxrwxrwx 1 root root   20  3月 29 21:54 java-1.8.0-openjdk-armhf -> java-8-openjdk-armhf
drwxr-xr-x 7 root root 4096  8月  2 13:52 java-8-openjdk-armhf
drwxr-xr-x 9 root root 4096  3月 14  2018 jdk-8-oracle-arm32-vfp-hflt

然後幫 java-8-openjdk-armhf/ 做一個名為 default-java 的 symlink:

$ sudo ln -s java-8-openjdk-armhf/ default-java
$ ls -l
lrwxrwxrwx 1 root root   21  8月  2 14:05 default-java -> java-8-openjdk-armhf/
lrwxrwxrwx 1 root root   21  6月 17 02:24 java-1.11.0-openjdk-armhf -> java-11-openjdk-armhf
drwxr-xr-x 9 root root 4096  7月  8 01:20 java-11-openjdk-armhf
lrwxrwxrwx 1 root root   20  3月 29 21:54 java-1.8.0-openjdk-armhf -> java-8-openjdk-armhf
drwxr-xr-x 7 root root 4096  8月  2 13:52 java-8-openjdk-armhf
drwxr-xr-x 9 root root 4096  3月 14  2018 jdk-8-oracle-arm32-vfp-hflt

然後再執行 groovy 試試看:

$ groovy -v
Groovy Version: 2.4.16 JVM: 1.8.0_212 Vendor: Oracle Corporation OS: Linux

寫個程式測試看看:

$ cd ~
$ vim hello.groovy
def hello(name) {
    println("Hi, " + name)
} 
hello("Pi")

執行程式:

$ groovy hello.groovy
Hi, Pi