Intel EdisonとAzure APIを活用して年齢性別判定装置を作成

CRkjWhiUcAAom4d.jpg_large

IoTのビッグウェーブに乗り遅れないためにIntel Edisonを購入し勉強しているCTO室のJ.Nです。

Intel EdisonとはCPU、WiFi、Bluetoothが入ったSDカードサイズのコンピューターモジュールです。

Linuxがデフォルトで入っているので、SSH接続しすぐにプログラミングができます。

Intel Edison で始めるIoT開発

今回はこの小さいコンピューターの活用事例として、Microsoft Azure APIと組み合わせた年齢性別判定装置を作ってみたいと思います。

構成図は以下です

azure

実際にはタッチセンサーを用いてタッチセンサーにタッチしたら写真を撮り、画像をAzureMLに送信するようにします。

用意するパーツ

購入した装置は以下になります。

組み立て

phot11o

  1. Arduinoボードに、Intel Edisonのチップを接続します
  2. Arduinoボートに、ベースシールドを接続します
  3. USBカメラを接続します
  4. ベースシールドの適当なポートにLCDを接続します
  5. ベースシールドの適当なポートにタッチセンサーを接続します

注意点としてはベースシールドのスイッチをV5にしないとLCDで正しく文字が表示されません。
USBカメラは接続するだけでLinuxが自動的にドライバを読み込み使えるようになります。(dmesgで確認できます)

画像ファイルをAzure ML(Project Oxford)に送信し結果を受け取るプログラム

Project Oxfordとはマイクロソフトのクラウド機械学習サービスの一部で、画像解析に特化したクラウドサービスになります。
REST API形式でAPIを実行することができ、クライアントプログラムは画像を送信しOxfordが瞬時に解析した結果を受け取ることができます。

プログラミング言語としてはIntel EdisonのLinuxでは標準でPython2、Node.jsが利用できます。
RubyやJavaも追加できるのですが、ライブラリが欠損していたりうまく動かなかったりするので最初はPython2 or Node.jsでIntel Edisonを操作するのをお勧めします。

まずはIntel Edisonのpython2で画像をAzureMLに送信するプログラムを作成します

AzureのAPIキーを格納する設定ファイルになります。

コマンドラインの第一引数のファイルをAzureMLに送信し、返却されたJSON(年齢性別が入ったデータ)を標準出力にprintします。

次に、タッチセンサーにタッチがあったらWEBカメラを起動し撮影しその画像をAzureMLに送信し結果をLCDに表示するプログラムを作成します。

プログラムのポイントを解説すると

  • Intel Edisonから機器を制御するにはmraaライブラリを使用する
  • LinuxからWEBカメラを制御するコマンドはいくつかあるが今回はfswebcamを使用(Intel Edisonにインストールが必要)
  • Azureに画像を送信中にタッチセンサーが動いて再度写真を送信するのを防ぐためwait変数で、画像処理中は再度撮影しないように制御(あまり連続でAzureAPIを叩くと一時的にAPIからBANされます)

node touch_and_shot.jsでプログラムを起動しカメラの前に立ちタッチセンサーを触ると1秒程度でLCDが点灯します。

CRkjWhiUcAAom4d.jpg_large (1)

age:23
Male(男性)

・・と表示されました。
※「Sec~」の部分はテストの時の表示なので無視してください。

今回学んだ事

  • Intel EdisonからのWEBカメラ制御
  • Intel Edisonからのタッチセンサー制御
  • Intel EdisonからのLCDディスプレイ制御
  • pythonでのAzureML Project Oxford API操作

まとめ

今回はIntel EdisonとクラウドAPIを使用して年齢性別判定プログラムと装置を開発しました。
このアプリケーションを発展させてデジタルサイネージでその人の年齢・性別に合った商品を紹介するといったものを作ると面白いと思います。

似たようなアプリケーションはスマートフォンのカメラを使っても作成できますが、Intel Edisonの強みの1つとしてLinuxがそのまま入っている自由な環境でのプログラミングが可能と言う点がスマートフォンのアプリ開発と比べて優っていると感じました。
今日の記事をきっかけにIntel Edisonを使って様々なプログラミング言語でのIoTアプリケーション開発を楽しんでいただけると幸いです。