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

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

##ジュゴンかマナティかそれが問題だ
わたくしジュゴン
![dugong.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592375/47a52def-3960-2f8f-5c6f-977a85759044.jpeg)
わたくしマナティ
![manatee.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592375/3bedfa3f-4973-379c-7f2c-181bc0060007.jpeg)

:thinking:**おんなじやん**:thinking:

自力で見分けたい方はこちらをご参照ください→[違いが判る事典](https://chigai-allguide.com/%E3%82%B8%E3%83%A5%E3%82%B4%E3%83%B3%E3%81%A8%E3%83%9E%E3%83%8A%E3%83%86%E3%82%A3%E3%83%BC/)

##AutoML Visionで識別モデルを作成
ジュゴンとマナティの画像をできるだけ多く収集します。
「ジュゴン」「マナティ」でGoogle画像検索。全然数が足りません。
英語で「dugong」「manatee」。敢えてのタイポ「dugon」「manaty」。
中国語で「独贡」「海牛」。スペイン語、ロシア語…。
何とかジュゴン324枚、マナティ330枚を収集。
さすがにちょっと少ないですが諦めます。
![dugongdataset.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592375/820f213e-770b-6ca4-5619-dd5c57a9a8da.png)

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

- 結果

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

![dugonghyouka.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592375/77a3ab01-a39c-4c66-85d5-4efb95c7ce95.jpeg)

:upside_down:**十分じゃないでしょうか**:upside_down:

##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を利用してキャプチャしました。
結果を画像にオーバーレイして。

<img width="400" alt="スクリーンショット 2020-04-25 16.30.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592375/50bcc3b9-3f46-bc3d-8916-b2a7dad94321.png">


##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側のプログラムはお子様にもかけるような単純なもので。
![microbit.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592375/6ad7d934-cd93-37c3-7895-0660e78ae3df.jpeg)
Dev BoardとMicro:bitのGPIO繋いで。電源供給もしてやると。

<img width="400" alt="IMG_20200425_161542607.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592375/6f1da68b-d60e-1244-6e86-f6da3fdaeb28.jpeg">&ensp;<img width="400" alt="IMG_20200425_161221490.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592375/aa8a30e3-ef53-8090-42c7-9edc685b2456.jpeg">
お、ジュゴン。お、マナティー。

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

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

###参考サイト
- [Coral official](https://coral.ai/)
　こちらの本家サイトが本当に内容充実でこちらだけで大概のことは解決します。
- [【第９回】micro:bit外部接続用ピンの役割](https://www.fabshop.jp/%E3%80%90%E7%AC%AC%EF%BC%99%E5%9B%9E%E3%80%91microbit%E5%A4%96%E9%83%A8%E6%8E%A5%E7%B6%9A%E7%94%A8%E3%83%94%E3%83%B3%E5%BD%B9%E5%89%B2/)

###費用まとめ
| 　　product/service　　　　 |   　price|    
|:-----------------|:---------------:|
|AutoML Vision     |            1,250|
|Coral Dev Board   |           20,000|
|Micro:bit         |            3,200|
|その他雑品         |              550|
|　**合計**|**25,000**|
Webカメラ、ケーブル等はその辺に落ちているものでプライスレスということで。