XSHELLが開発しているIoTデバイス向けのデプロイツール「isaax」を使ってみます。
今回は、RaspberryPiにカメラを接続し、サンプルアプリケーションを動かします。
isaaxを使ってインストール・ストリーミングで動作確認・プログラム修正して画像認識までを楽しく体験しましょう。
XSHELLでは誰でもWelcomeの勉強会を行っています
この記事はこちら
「Raspberry Pi + カメラで画像認識IoTをやってみよう with おいしいものパーティ」
https://atnd.org/events/93063
のワークショップテキストとして作成しました。
こんな感じ
IoTっぽく、ヘッドレス(キーボード、マウス、ディスプレイは繋がない)でやっていきます。
Raspberry Pi にはカメラ、電源、ネットワークだけを接続します。ワークショップでは有線LANを使いますが、無線LANを使う場合は電源とカメラだけでOKですね!
基本的な流れ
isaaxを使うための基本的な流れは以下の通りです。
- isaaxのダッシュボードでプロジェクトを作成します(GitHubまたはBitbucketのリポジトリが必要となります)。
- 母艦PCからコマンドラインツールを使うか、デバイス上で動作するエージェントを手動でインストールすることでデバイスを登録します。デバイスのIPアドレス、SSHログインするための情報が必要となります。
- デバイスの登録が成功した時点でリポジトリにある最新のアプリケーションがインストール、実行されます。
- 母艦PCでアプリケーションに修正を加え、
git push
を行うことでプロジェクトに登録したデバイス全てに更新を行うことができます。
はじめよう
必要なもの
Raspberry Pi 環境
- Raspberry Pi 2 または 3
- SDカード
- Picameraモジュール (v1またはv2)
- 電源 (PCからの給電も可)
- インターネット接続(ワークショップでは有線LANを使います)
母艦PC環境
- ssh 、gitコマンドをインストール
- GitHubまたはBitbucketアカウント
- isaaxアカウント(後述)
- インターネット接続
環境設定
Isaax概要
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を使ってインストールします。
- cygwinの「setup-x86」または「setup-x86_64」を実行中、「Select Package」で以下を選ぶ
- Devel - 「git」
- 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にクローンします。
git clone https://github.com/<your github name>/study-group.git
isaaxのダッシュボードを開き、[+]ボタンからプロジェクトを作成します。
モーダルが開くので、下図のように詳細情報を入力します(プロジェクト名、 説明は任意)。
[保存]ボタンを押してプロジェクトの作成は終了です。
クローンする場合(GitHub, Bitbucket)
※ こちらではGitHubを使った方法について説明していますが、Bitbucketでも同様の方法でプロジェクトを作成できます。
自分のGitHubアカウントにリポジトリを作成します。このとき、README.md
や.gitignore
は追加しません。
サンプルコードのリポジトリを開き、右側緑色のボタン[Clone or download]で表示されるURLをコピーし、母艦PCにリポジトリをクローンします。
git clone https://github.com/xshellinc/study-group.git
クローンしたローカルリポジトリに移動します。最初に作成した空のリポジトリをリモートに追加し、ソースコードを反映します (緑マーカーの部分を実行。originをisaaxなど別の名前に置き換える)。
cd study-group/
git remote add isaax https://github.com/<your github name>/picamera-app.git
git push isaax master
isaaxのダッシュボードを開き、[+]ボタンからプロジェクトを作成します。
モーダルが開くので、下図のように詳細情報を入力します(プロジェクト名、 説明は任意)。
[保存]ボタンを押してプロジェクトの作成は終了です。
デバイスの登録
さて、実際にプログラムが動作するIoTデバイスをプロジェクトに登録します。登録にはいくつか方法があります。
1.コマンドラインツールを使って母艦PCからRaspberry PiのIPアドレス、ユーザ名、パスワードを入力してデバイスを登録する方法
2.Raspberry Piにログインし、isaax-agentをプログラムをインストール、実行してプロジェクトに登録する方法
今回は、2.の方法を使います。
isaax-agentのインストール
Raspberry PiにSSH接続します。
ssh pi@<ip address>
isaaxのダッシュボードを開き、作成したプロジェクトを選び、クラスターから「default」を選択します。
環境変数のタブを選び、一番上の「ISAAX_AGENT_RELEASE」のトグルボタンを右に寄せて黒色にします。
isaaxのダッシュボードを開き、「プロジェクトの名前」 > 「詳細」をクリックします。
右下の[プロジェクトトークン]をクリックするとモーダルが表示されるので、バックが黒い文字列をコピーします。
コピーした文字列をraspberry piのターミナルで実行します。
curl -fsSL get.isaax.io | sudo bash -s stable "プロジェクトトークン"
上記画像のように[ISAAX Agent installation finished]が出力されればインストール成功です。この時点でデバイスにリポジトリの最新のコードが配信されます。
動作を確認しよう
ブラウザからRaspberry Piの<IPアドレス>:5000
にアクセスするとPicameraの映像が確認できます。
サンプルは、motionJPGでWebストリーミングするプログラムです。
インストールがうまく実行されない場合は、/var/log/isaax-agent.log
を確認します。
アプリケーションの更新
最後に、母艦PC上でアプリケーションを修正してgit push
することでデバイスにアプリケーションの変更を反映します。
camera/main.py
を編集します。2行目をコメントアウトし、4行目コメントを外します。ここでは、OpenCVを使った動体検知の処理を読み込んでいます。
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
があらかじめ配置されていて、今回は新たに作成しなくてもそのまま使えるようになっています。
{
"name": "pifeed",
"version": "",
"description": "",
"main": "main.py",
"author": "",
"license": "",
"language":"python",
"scripts": {
start | "python -u camera/main.py"
},
"dependency": null
}