自宅待機のお供に。こどもとあそぶCoral Dev BoardとAutoML VisionとMicro:bitでジュゴンとマナティ識別。


EdgeTPUとかAutoML Visionとか使ってみたい

自宅待機で退屈しているこどものために、ジュゴンとマナティの識別モデルをAutoML Visionで学習し、tfliteモデルを作成。Coral Dev Boardにて実装し、カメラで撮影したものがジュゴンかマナティかの判別を行いMicro:bitのLEDで表示する。夏休みの自由研究にも最適、機械学習モデル総額約25,000円です。

ジュゴンかマナティかそれが問題だ

わたくしジュゴン

わたくしマナティ

おんなじやん

自力で見分けたい方はこちらをご参照ください→違いが判る事典

AutoML Visionで識別モデルを作成

ジュゴンとマナティの画像をできるだけ多く収集します。
「ジュゴン」「マナティ」でGoogle画像検索。全然数が足りません。
英語で「dugong」「manatee」。敢えてのタイポ「dugon」「manaty」。
中国語で「独贡」「海牛」。スペイン語、ロシア語…。
何とかジュゴン324枚、マナティ330枚を収集。
さすがにちょっと少ないですが諦めます。

  • 学習
     Edge用で学習。
     モデル最適化のオプションは精度MediumのBest trade-off。
     3 maximum node hoursで学習開始します。

  • 結果

 2.344 ノード時間で終了。
 費用US$11.6

十分じゃないでしょうか

EdgeTPUモデルのエクスポート

データをエクスポートします。
EdgeTPU用のtflite形式ファイルでGCSにエクスポートされます。
EdgeTPU用になっているので、TFLite converterもEdgeTPU compilerも必要ありません。
 

EdgeTPU Python APIの利用

今回はEdgeTPU APIの識別モデル用推論APIを利用します。
基本的には4行書けば識別できてしまいます。

from edgetpu.classification.engine imort ClassificationEngine
model = "edgetpu_model.tflite"
engine = ClassificationEngine(model)
ans = engine.classify_with_image(img, threshold=0.5, top_k=1)

今回はカメラで撮影した生き物がジュゴンかマナティかを見分ける仕組みにしたいので、CV2を利用してキャプチャしました。
結果を画像にオーバーレイして。

Micro:bitで結果表示

せっかくCoral Dev Boardが名刺サイズなのに結果表示がPCモニターだとちょっとアンバランス。お出かけにも不向きです。
単純にジュゴンかマナティかだけ表すなら簡易なLEDで十分です。そこで手元にあったこどものおもちゃのMicro:bit。各種入出力やセンサーも積んでいてお手軽かつ拡張性も望めそうです。

Dev Boardからの出力もperipheryを使うとらくちんです。

from periphery import GPIO
gpio73 = GPIO(73, "out")
gpio73.write(True)
gpio73.close()

Micro:bit側のプログラムはお子様にもかけるような単純なもので。

Dev BoardとMicro:bitのGPIO繋いで。電源供給もしてやると。


お、ジュゴン。お、マナティー。

これで、ポケットにCoral Dev Boardを忍ばせて、鳥羽水族館に行ったらドヤ顔できますね。お子様も大喜び。

少しでも早くコロナ騒動が収まり、鳥羽水族館でたくさんの魚や動物に会える日が来ることをこころより願っています。また医療関係に従事する方、生活を支える仕事をされているたくさんの方、家族を人々を守る皆様の毎日の努力に感謝を申し上げるとともに、皆様のご健康をお祈り申し上げます。(2020年4月25日)

参考サイト

費用まとめ

  product/service      price
AutoML Vision 1,250
Coral Dev Board 20,000
Micro:bit 3,200
その他雑品 550
 合計 25,000

Webカメラ、ケーブル等はその辺に落ちているものでプライスレスということで。