Raspberrypi3
picamera
isaax

Raspberry Pi + Picamera でIoT体験を isaax でやってみよう

XSHELLが開発しているIoTデバイス向けのデプロイツール「isaax」を使ってみます。

今回は、RaspberryPiにカメラを接続し、サンプルアプリケーションを動かします。
isaaxを使ってインストール・ストリーミングで動作確認・プログラム修正して画像認識までを楽しく体験しましょう。

XSHELLでは誰でもWelcomeの勉強会を行っています

この記事はこちら
「Raspberry Pi + カメラで画像認識IoTをやってみよう with おいしいものパーティ」
https://atnd.org/events/93063
のワークショップテキストとして作成しました。

こんな感じ

IoTっぽく、ヘッドレス(キーボード、マウス、ディスプレイは繋がない)でやっていきます。
IMG_20171213_141340.jpg

Raspberry Pi にはカメラ、電源、ネットワークだけを接続します。ワークショップでは有線LANを使いますが、無線LANを使う場合は電源とカメラだけでOKですね!

基本的な流れ

isaaxを使うための基本的な流れは以下の通りです。

  1. isaaxのダッシュボードでプロジェクトを作成します(GitHubまたはBitbucketのリポジトリが必要となります)。
  2. 母艦PCからコマンドラインツールを使うか、デバイス上で動作するエージェントを手動でインストールすることでデバイスを登録します。デバイスのIPアドレス、SSHログインするための情報が必要となります。
  3. デバイスの登録が成功した時点でリポジトリにある最新のアプリケーションがインストール、実行されます。
  4. 母艦PCでアプリケーションに修正を加え、git pushを行うことでプロジェクトに登録したデバイス全てに更新を行うことができます。

はじめよう

必要なもの

Raspberry Pi 環境

  • Raspberry Pi 2 または 3
  • SDカード
  • Picameraモジュール (v1またはv2)
  • 電源 (PCからの給電も可)
  • インターネット接続(ワークショップでは有線LANを使います)

母艦PC環境

  • ssh 、gitコマンドをインストール
  • GitHubまたはBitbucketアカウント
  • isaaxアカウント(後述)
  • インターネット接続

環境設定

Isaax概要

isaax.png

Raspberry Pi

Raspbian を microSDカードにインストールし、ネットワークにつなぎます(ワークショップでは、LANケーブルを使ってRaspberry Piをネットワークに接続します)。ワークショップではあらかじめ必要な環境は構築済みのSDカードを使用しました。同じ環境の作成方法はこちら:「Raspberry Pi で OpenCV を使う環境を整える」https://qiita.com/xshell/items/025f0024e896a189c8c3

母艦PC

PCはsshとgitコマンド、適当なエディタが使えたら何でもいいです。MS-Windows/Mac/LinuxどれでもOKです。

ex,Ubuntu Linuxの場合

gitが入って無ければインストールします。

$ sudo apt-get update
$ sudo apt-get insall git

ex, MS-Windowsの場合

使い慣れたsshやgitコマンドが特に無い場合は、cygwinを使ってインストールします。

  1. cygwinの「setup-x86」または「setup-x86_64」を実行中、「Select Package」で以下を選ぶ
  2. Devel - 「git」
  3. Net - 「openssh」

Raspberry PiのIPアドレスを調べる

下のリンクを参考にRaspberry PiのIPアドレスを調べます。
同じLAN内に接続したRaspberry PiのIPアドレスを調べる

GitHubまたはBitbucketアカウント

isaaxはgitにプログラムコードをpushすると、自動的にIoTデバイスにプログラムが配信・自動実行されるようになっています。gitのレポジトリは今のところGitHubとBitbucketに対応しています。
GitHub 、Bitbucket にアカウントをお持ちでない場合は、あらかじめisaaxと連携するアカウントをご用意下さい。

isaaxアカウント

こちら
https://isaax.io/
より、isaaxの無料アカウントを登録しておきます。
GitHubあるいはBitbucketのアカウントを連動設定しておいてください。

サンプルプログラムを動かしてみよう

プロジェクトの作成

デバイスにデプロイするアプリケーションをGitHubまたはBitbucketに作成します。今回は、あらかじめ用意したサンプルコードをフォークまたはクローンして作成します。

※以前勉強会に参加した方ですでにプロジェクトを作成されている方は、フォーク元のリポジトリに加えられた変更を反映するか、新しくプロジェクトを作り直す必要があります。

フォークする場合(GitHubのみ)

サンプルコードのリポジトリを開き、右上のForkボタンを押してリポジトリを自分のアカウントにフォークします。

フォークしたリポジトリを母艦PCにクローンします。

local
git clone https://github.com/<your github name>/study-group.git

isaaxのダッシュボードを開き、[+]ボタンからプロジェクトを作成します。

スクリーンショット 2018-02-01 15.54.30.png

モーダルが開くので、下図のように詳細情報を入力します(プロジェクト名、 説明は任意)。

スクリーンショット 2018-02-01 16.02.07.png

[保存]ボタンを押してプロジェクトの作成は終了です。

クローンする場合(GitHub, Bitbucket)

※ こちらではGitHubを使った方法について説明していますが、Bitbucketでも同様の方法でプロジェクトを作成できます。

自分のGitHubアカウントにリポジトリを作成します。このとき、README.md.gitignoreは追加しません。

スクリーンショット 2017-12-12 18.28.25.png

サンプルコードのリポジトリを開き、右側緑色のボタン[Clone or download]で表示されるURLをコピーし、母艦PCにリポジトリをクローンします。

local
git clone https://github.com/xshellinc/study-group.git

クローンしたローカルリポジトリに移動します。最初に作成した空のリポジトリをリモートに追加し、ソースコードを反映します (緑マーカーの部分を実行。originをisaaxなど別の名前に置き換える)。

スクリーンショット 2017-12-12 19.15.44.png

local
cd study-group/
git remote add isaax https://github.com/<your github name>/picamera-app.git
git push isaax master

isaaxのダッシュボードを開き、[+]ボタンからプロジェクトを作成します。

スクリーンショット 2018-02-01 15.54.30.png

モーダルが開くので、下図のように詳細情報を入力します(プロジェクト名、 説明は任意)。

スクリーンショット 2018-02-01 16.02.07.png

[保存]ボタンを押してプロジェクトの作成は終了です。

デバイスの登録

さて、実際にプログラムが動作するIoTデバイスをプロジェクトに登録します。登録にはいくつか方法があります。

1.コマンドラインツールを使って母艦PCからRaspberry PiのIPアドレス、ユーザ名、パスワードを入力してデバイスを登録する方法

2.Raspberry Piにログインし、isaax-agentをプログラムをインストール、実行してプロジェクトに登録する方法

今回は、2.の方法を使います。

isaax-agentのインストール

Raspberry PiにSSH接続します。

local
ssh pi@<ip address>

isaaxのダッシュボードを開き、作成したプロジェクトを選び、クラスターから「default」を選択します。
環境変数のタブを選び、一番上の「ISAAX_AGENT_RELEASE」のトグルボタンを右に寄せて黒色にします。

スクリーンショット 2018-02-01 16.33.39.png

isaaxのダッシュボードを開き、「プロジェクトの名前」 > 「詳細」をクリックします。
スクリーンショット 2018-02-01 16.38.38.png

右下の[プロジェクトトークン]をクリックするとモーダルが表示されるので、バックが黒い文字列をコピーします。
スクリーンショット 2018-02-01 16.06.09.png

コピーした文字列をraspberry piのターミナルで実行します。

raspberry
curl -fsSL get.isaax.io | sudo bash -s stable "プロジェクトトークン"

スクリーンショット 2018-02-01 16.16.20.png

上記画像のように[ISAAX Agent installation finished]が出力されればインストール成功です。この時点でデバイスにリポジトリの最新のコードが配信されます。

動作を確認しよう

ブラウザからRaspberry Piの<IPアドレス>:5000にアクセスするとPicameraの映像が確認できます。

image.png

サンプルは、motionJPGでWebストリーミングするプログラムです。

インストールがうまく実行されない場合は、/var/log/isaax-agent.logを確認します。

アプリケーションの更新

最後に、母艦PC上でアプリケーションを修正してgit pushすることでデバイスにアプリケーションの変更を反映します。

camera/main.pyを編集します。2行目をコメントアウトし、4行目コメントを外します。ここでは、OpenCVを使った動体検知の処理を読み込んでいます。

local(camera/main.py)
1 from flask import Flask, render_template, Response
2 # from processor.simple_streamer import SimpleStreamer as VideoCamera
3 # from processor.pedestrian_detector import PedestrianDetector as VideoCamera
4 from processor.motion_detector import MotionDetector as VideoCamera

変更を終えたら、リモートリポジトリに反映します。

git commit -am "Enable motion detection"
git push origin master # フォークした場合はoriginを正しい名前に変更

数秒待ったのち、<IPアドレス>:5000をリロードして変更が反映されていれば更新成功です。

補足

isaax.jsonについて

isaax.jsonにはデバイス上でユーザーアプリケーションを実行する際に必要な情報が含まれています。例えば、nameはデバイス上で常駐化する際のアプリケーション名となります。

サンプルコードのリポジトリにはisaax.jsonがあらかじめ配置されていて、今回は新たに作成しなくてもそのまま使えるようになっています。

(isaax.json)
{
   "name": "pifeed",
   "version": "",
   "description": "",
   "main": "main.py",
   "author": "",
   "license": "",
   "language":"python",
   "scripts": {
      start |  "python -u camera/main.py"
   },
   "dependency": null
}