植物の成長記録を全自動で行おう。成長差分の認識もしたいな。成長の統計の可視化もしたいな。目指せ publish
2021/06/25 時点
-
JetPack 4.5
-
USB Web Camera (RasberryPi Camera Moduleは画質、色彩が悪かった)
-
cron
- 定期実行処理のため
-
Docker jetson tensorflow image (Ubuntu 18.04.5 LTS)
- python 3.6.9
- opencv-python
- tensorflow == 2.3.1 (l4t-tensorflow:r32.5.0-tf2.3-py3)
- tensorflow-examples
- requests (api用)
- requests-oauthlib (api用)
- labelme (アノテーション用, 結果可視化用)
- python 3.6.9
現状: jetson nano, develop ブランチ上にて
- リポジトリをクローン, developブランチに切り替え
$ git clone git@github.com:junprog/plant-record.git
$ cd plant-record
$ git fetch
$ git checkout -b develop origin/develop- コンテナ立ち上げ
$ sudo docker build -t plant-record .
... # 時間かかります
$ sudo docker run -it --rm --runtime nvidia --network host --device /dev/video1:/dev/video1:mwr plant-record - コンテナ内にてテスト
% python3 test/test_getimage.py
# notify 設定済の場合
% python3 main_flow.py1日に1,2枚植物画像を取得する。
- 定期処理 : cron
- 画像取得 : python + opencv-python
取得画像を通知する。
- 通知 : Twitter, Slack + incoming-webhook
$ sh setup_notify_twitter.sh # config 作成 → twitter, slackのconfigを各自入力
$ python3 test/test_getimage.py # 写真撮影テスト
$ python3 test/test_notify.py # 通知テスト (撮影した画像パスを入力)植物の写真 -> segmentation model -> segmentation mask [葉, 枝, 鉢, 背景] のセグメンテーションを行う。
-
データセット: 画像を各自で用意、各自でアノテーション
-
ground truth 生成: generate_mask.py
- ground truthのpngファイル作成
$ python dataset/generate_mask.py [data directory] --labels dataset/labels.txt - 実行後の [data directory] ディレクトリ構造:
[data directory]
├ class_names.txt
├ *.jpg
├ *.png
└ SegmentationClassVisualization (optionで作成するかどうか指定可能)
└ *_vis.jpg
- 学習:
- 学習コマンド
$ python3 segmentation/train_unet.py --data-dir [data directory] --result-dir [result-dir] --gpu- 予測:
- 予測コマンド
$ python3 test/test_predict.py --image-path [image file path] --weight-path [weight file path]| 入力画像 | 予測結果 |
|---|---|
![]() |
![]() |
随時更新
$ python gui_test.py
基本的な操作はウインドウ上のボタンで行う
中身について
ウインドウ上部に温度、湿度、日時、時計と並びそれぞれ1秒ごとに更新 (温度、湿度は仮で乱数を1秒ごとに更新している)
ボタンFileでモデル(h5ファイル)をフォルダから選んでで読み込み、そのファイルがh5ファイルの場合はボタンInferenceを押せるようにする
ボタンLoad Input Imageで画像をフォルダから選んでで読み込み、セグメンテーションしたい画像を読み込む(撮影ボタンに差し替え予定)
ボタンinferenceでセグメンテーションを行う(現在は押しても何もしない)
その他細かい部分はコードに書いてます

