【ハンズオン資料】GR-LYCHEEとOpenCVで画像認識やってみよう
この記事は12/07のAI×IoT ハンズオン with IoTLT&ふくもく会 in 福井向け資料です。記事を読んで試せる内容になっているので、終了後や参加されていない方もぜひ試してみてください!
■ハンズオンの進行について
ハンズオンはこのページに沿って進めます。進められる方は、どんどん進めていきましょう!リンクは別タブや別ウィンドウで開くのがオススメです。この記事はがじぇっとるねさすさんの「e-AIトランスレータ チュートリアル GRボードで実行してみよう!」を参考に作成しています。
今回やってみること
PythonとTensorflow、数字認識のデータライブラリMNISTを使い、数字認識する学習モデルを作成します。Pythonなしでもコピペで試せる内容になっています。
用意するもの
■マイコンボード「GR-LYCHEE」
がじぇっとるねさす(通称がじぇるね)が提供している高性能マイコンボードです。電子工作でよく使われるArduino UNOとピンが互換になっていて、Wi-Fi・BLE通信モジュール「ESP32」を搭載しています。
わりと手軽にIoTプロトタイピングを試せる高性能マイコンボード、な立ち位置です。(ちゃんとく所感)
- 購入: 秋月電子(¥10,580)
■実行するGRボードについて
他のGRシリーズのボードでも今回のプログラムを試すことができますが、GR-KURUMI、GR-COTTON、GR-ADZUKIはROM容量不足で実行できないようです。■USBケーブル(microB)
PCとGR-LYCHEEの通信(プログラムの書き込み、カメラ映像の出力など)には、Android端末などに使われているmicroBタイプのUSBケーブルを使います。
- 購入: 秋月電子(¥100)
■USBケーブルについて
ご自身で用意する場合、シリアル通信ができるタイプのものか確認してください。安価なものだと一方向の給電専用タイプのものが多いです。事前準備
「DisplayApp」をインストール
GR-LYCHEEのカメラで映している映像を確認するために利用します。
がじぇるね公式ページのこちらからご自身のOSに合ったものをダウンロードし、ZIPファイルを展開します。
■MacOSの方
ZIPファイルを展開し、Macの方は「アプリケーション」に移動させます。
■Windowsの方
展開したファイル内の「〜.exe」をダブルクリックで実行します。インストーラが起動するので、手順通り進めます。
はじめてのプログラムを書き込んでみる
最初のプログラムとして、Lチカをやってみます。LEDチカチカの略で、入門向けのプログラムとして汎用的に紹介されています。
簡単なプログラムを書き込むことで、ボードが正常に動くか試す際に利用することも多いです。WebでいうHello, worldです。
Webコンパイラの準備
GRシリーズでは「Webコンパイラ」という、ブラウザ上で利用できるコンパイラが利用できます。面倒な環境構築が不要なので楽チンですね。
がじぇるねのページから、「ログイン」または「ゲストログイン」をクリックし移動します。
■ログインボタンが見つからない!という方
ブラウザを横に広げてみてください。ひょこっとボタンが出てきます。プロジェクト作成画面になるので、「LYCHEE」でフィルターをかけてみます。 「GR-LYCHEE_mbed…」と「GR-LYCHEE_Sketch…」という2タイプあるので、Sketchの方を選択します(mbed OSのプログラムを利用したいときは前者を選びましょう)。
プログラム
メニュー左側の「〜.cpp」という拡張子のファイルがメインのプログラムファイルになります。
「〜.cpp」をダブルクリックすると、中央に編集画面が表示されます。
表示されたサンプルコードを一旦全て消してから、下記のプログラムを貼り付けます。
貼り付けたら、右側の「ビルド実行」ボタンをクリックし、記述したプログラムをコンパイルします。
コンパイルが完了すると、「コンパイルが完了しました」というメッセージと実行ログが表示されるので、「閉じる」ボタンで完了します。
「〜.bin」というファイルが作成されているので、右クリックしダウンロードします。
■コンパイルについて
プログラムを、機械が実行可能な機械語に変換することです。プログラムは人間に理解しやすい形、機械語は機械が理解しやすい形に最適化されています。PCとGR-LYCHEEを接続
GR-LYCHEEとPCをUSBケーブルで接続しましょう。GR-LYCHEEのUSBソケットは真ん中の方です。
PCに「MBED」という名前で認識されます。
■デバイスが認識されない(Windows)
こちらのページから「Arm Mbed Windows serial port driver」をクリックし、インストールしてください。
■USBドライバについて
PCに、USBで接続した機器を認識・通信させるためのツールです。プログラムを書き込み
ダウンロードした「〜.bin」ファイルを「MBED」にドラッグ&ドロップでコピーします。コピー後、ファイルはMBEDフォルダ内には表示されません。
再起動して実行
リセットボタンを押し、GR-LYCHEEを再起動させます。
Lチカプログラムが実行されました!
GR-LYCHEEカメラの映像をdisplayAppに表示
GR-LYCHEEにカメラを取り付けて、PC上で映る映像を確認してみましょう。
カメラの取り付け
■カメラ本体
- カメラ本体のソケット部を持ち上げます
- フレキシブルケーブルの無地面を上に、ソケットに差し込みます
- ソケット部を元に戻します
■GR-LYCHEE
- GR-LYCHEE背面のソケット部を上にずらします
- フレキシブルケーブルの文字面を上に、ソケットに差し込みます
- ソケット部を下に戻します
プログラム
Webコンパイラでプログラムを下記に置き換え、先ほど同様書き込みます。
USBを付け替えて実行
書き込んだら、GR-LYCHEE側のUSBソケットを外側に付け替えます。(通信用)
DisplayAppでシリアルポートを選択します。
カメラの画像がDisplayAppに表示されます。高画質!
数字認識の学習モデルを作ろう
MNISTとTensorflowを使って学習モデルを作り、カメラに映った数字を判定するプログラムを作成してみます。
Python+Tensorflowをインストールせず試してみたい、という方は、「完成コード」の章から進めてください。
作業用ディレクトリを作成
今回のプログラムを試すディレクトリ(フォルダ)を作ります。
プログラムを実行する上では今どこで作業しているかというのが重要です。最初のうちはわかりづらいので、意識するようにしましょう。
コマンドラインに不慣れである方は、下記記事を参照してみてください。
■Windowsの方
- デスクトップで右クリックし、
gr-tutorial
というファイルを作成 - Windowsメニューから「コマンドラインプロンプト」を検索し開く(「cmd」で候補にでてきます)
下記コマンドを1行ずつ実行(
$
は不要。コマンドラインであることを表しています)$ cd Desktop $ cd gr-tutorial
cd
はディレクトリを移動するコマンドです。
■Macの方
- 「ターミナル」を起動(⌘+スペースで「ターミナル」を検索すると便利)
下記コマンドを1行ずつ順に打ち込む(
$
は不要。コマンドラインであることを表しています)$ cd ~/Desktop $ mkdir gr-tutorial $ cd gr-tutorial
デスクトップに「gr-tutorial」というフォルダができているかと思います(右クリックで作成してもOKです)。cd
コマンドは移動するコマンド、mkdir
コマンドはディレクトリを作成するコマンドです。
Python&Tensorflow環境構築
今回はご自身の環境に、以下の内容を用意し進めます。
- Python実行環境
- Tensorflow
環境構築はおそらくこのハンズオンで1番大変なところです。乗り越えたらサクッと試せるようになるので頑張りましょう!
PCの状態に合わせて場合分けしましたので、ご自身に合う部分を読んでください。
まずは現在の環境を確認する
下記コマンドを試して、PythonとTensorFlowがインストールされているか確認しましょう。コマンドは$
マークの後ろの部分です。(↓の場合はpython -V
と打ち込む)
$ python -V
Python X.X.X
Pythonのバージョンが表示されればOKです。「command not found」や「実行する〜〜が見つかりません」などと表示された方は、インストールされていない(または正しくインストールできていない)のでPythonの環境構築手順を進めます。
インストールされていなかった方は、「Pythonをインストール」へ進んでください。
■Pythonのバージョンについて
Pythonのバージョンは2系、3系どちらでも実行可能ですが、Python3.7系ではTensorflowがうまく実行できないようです。続いて、Tensorflowモジュールがインストールされているかの確認です。pip list
と打ち込んでみましょう。(表示されるものは一例)
$ pip list
Package Version
---------------------- ---------
absl-py 0.6.1
bleach 1.5.0
html5lib 0.9999999
Markdown 3.0.1
nose 1.3.7
numpy 1.15.3
pip 18.1
protobuf 3.6.1
setuptools 39.0.1
six 1.11.0
tensorflow 1.5.0
…
一覧にtensorflow
とあればOKです。バージョンが古い場合は、下記コマンドで更新をしておきましょう(最新は1.5系です)。
Python2系の場合
$ pip install --upgrade tensorflow
Python3系の場合
$ pip3 install --upgrade tensorflow
PythonがインストールされているがTensorflowはインストールされていない場合は、「Tensorflowをインストール」へ進んでください。
どちらもインストールされていた場合は、「MNISTで学習モデルを作成」へ進みます。
Pythonをインストール
■Windowsの方
Pythonの公式ページへ移動し、インストールしたいPythonのバージョンをクリックします。(Tensorflowがうまく動かないのでPython3.7系は避けてください。3.6.xがオススメです。)
移動先のページ下部のリストから、「Windows x86-64 web-based installer」をダウンロードします。32bit版の場合は「Windows x86 web-based installer」を選択してください。
ダウンロードされたパッケージを実行し、「Add Python xxx to PATH」をチェックしてインストールを実行します。
完了したら、コマンドプロンプトでpython -V
を打ち、任意のバージョンが表示されるか確認します。
$ python -V
Python X.X.X
表示されない方はコマンドプロンプトを再起動して試してみてください。
■Macの方
デフォルトでPython2系がインストールされているはずですが、何かのタイミングで消してしまった可能性があります。
ターミナルで下記コマンドを実行し、Homebrewがインストールされているか確認します。
$ brew -v
Homebrew x.x.x
インストールされていない場合は下記コマンドを実行します。
$ /usr/bin/ruby -e "$(curl -fsSLhttps://raw.githubusercontent.com/Homebrew/install/master/install)"
続いてHomebrewでpyenvをインストールします。pyenvはPythonのバージョン管理を行うツールです。
$ brew install pyenv
インストールされたら下記コマンドで確認します。
$ pyenv -v
pyenv x.x.x
pyenvでPythonをインストールします。バージョンは任意のものでよいですが、Tensorflowがうまく動かないので3.7系は避けてください。
$ pyenv install 3.6.7
完了したら、選択したバージョンを設定します。
$ pyenv global 3.6.7
ターミナルで下記コマンドを実行し、バージョンが表示されるか確認してみてください。
$ python -V
Python 3.6.7
TensorFlowをインストール
コマンドラインで下記コマンドを実行します。
$ pip install tensorflow
だらだらと実行文が表示され、最後の行に Successfully installed tensorflow-X.X.X
などと表示されればOKです。
pip list
というコマンドを打って、インストールされたか確認してみます。(表示されるものは一例)
$ pip list
Package Version
---------------------- ---------
absl-py 0.6.1
bleach 1.5.0
html5lib 0.9999999
Markdown 3.0.1
nose 1.3.7
numpy 1.15.3
pip 18.1
protobuf 3.6.1
setuptools 39.0.1
six 1.11.0
tensorflow 1.5.0
…
一覧に、tensorflow
とあればOKです。
■実行したらエラーが出た
長い実行文が表示されたあと、最後の一行が下記のようなエラー文になることがあります。
Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/Library/Python/2.7/site-packages/tensorflow-1.11.0.dist-info' Consider using the --user option or check the permissions.
下記コマンドを再度実行します。
$ sudo pip install tensorflow
パスワードを求められるので、PCのユーザのパスワードを入力します。(入力したパスワードは表示されません)
■エラーが出てインストールが実行されない①
pip install tensorflow
を実行すると、command not found
といったエラーが出る場合があります。以下のコマンドを実行し、pipをインストールします。
$ python -m ensurepip
■エラーが出てインストールが実行されない②
pip install tensorflow
を実行すると、下記のようなエラーが出る場合があります。
Could not find a version that satisfies the requirement tensorflow (from versions: )
No matching distribution found for tensorflow
以下のコマンドを再度実行しましょう。
Python2系
$ pip install --upgrade https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.11.0-py2-none-any.wh
Python3系
$ python3 -m pip install --upgrade https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.5.0-py3-none-any.whl
■インストールしたのにlistに表示されない
主にMacで、Python環境がPC上に複数あり、意図する場所にインストールできていない可能性があります。
主に下記の記事を参考にしてみてください。
MNISTで学習モデルを作成
画像認識向けに、大量の画像を自分で収集し学習用に加工するのはとても大変です。
MNIST(Mixed National Institute of Standards and Technology database)は、手書き数字画像60,000枚とテスト画像10,000枚を集めたデータセットです。
手軽に入手でき簡単に扱えるので、AI入門のサンプルデータとしてオススメです。
■MNIST用Pythonコードを作成
作成した作業用ディレクトリに、コマンドか右クリックなどでmnist_softmax_for_e-ai.py
というファイルを作成します。
プログラム向けのエディタでファイルを開き、下記のプログラムを貼り付けます。
今回はがじぇるねさんのチュートリアルのサンプルコードをお借りしました!
■Tensorflowで実行
下記コマンドで学習モデルを作成します。
$ python mnist_softmax_for_e-ai.py
pythonコマンドはPythonで書かれたプログラムを実行するコマンドです。ファイルの中のプログラムが実行され、学習モデルが作成されます。
Windowsの方はdir
、Macの方はls
というコマンドを実行し、「tf_LearnedModel」というフォルダが作成されたことを確認してください。
$ ls
mnist_softmax_for_e-ai.py
tf_LearnedModel/
Windowsはdir tf_LearnedModel
、Macはls tf_LearnedModel
のコマンドを実行すると、4つのファイルが入っていることがわかります。
$ ls tf_LearnedModel
checkpoint
tf_LearnedModel.data-00000-of-00001
tf_LearnedModel.index
tf_LearnedModel.meta
学習モデルをGRボードで扱う
Webコンパイラを開き、右側のリストから「e-AI Translator」をクリックします。
アップロードボタンを押し、先ほど作成された「tf_LearnedModel」を選択します。
その他はデフォルト選択のまま、「トランスレート」をクリックします。
表示されたプログラムを全て選択してコピーします。
完成コード
上記で生成されたプログラムに、displayAppに表示させるためのコードを加えたプログラムです。USBケーブルは真ん中に接続し、GR-LYCHEEに書き込みましょう。
これまでの手順と同様、書き込んでみましょう。
手書き数字の認識を試してみる
USBケーブルを外側につけかえ、試してみます。
displayAppで表示
紙に書く文字は、マッキーペンなどで太くハッキリと書いてみてください。
カメラに数字を映すと……
数字を推論してくれます。お疲れ様でした!
シリアルモニタで表示
GR-LYCHEEで実行されている内容を、シリアル通信を介してPCで確認してみます。
■Macの方
下記コマンドを実行し、USB接続されている場所を調べます。
$ ls /dev/tty.usb*
/dev/tty.usbmodem~~~
接続されている場所をコピーし、下記コマンドで接続します。
$ screen /dev/tty.usbmodem~~~~ 9600
■Windowsの方
「TeraTerm」というシリアル通信対応のソフトをダウンロード&インストールします。「Arduino IDE」がインストールされている方は、そちらでも確認できます。
下記リンクを参考に、TeraTermを起動しシリアル接続します。
参考情報
がじぇるねさんのページでは、その他のGR-LYCHEEチュートリアルも紹介されています。
ぜひ試してみてください!