IoT
※この方法はGoogle Driveを使った方法です.
近年、IoT技術の発展でセンシングデータを活用する事例が増加している。集めたデータの活用事例として、健康管理や行動識別などがある。本講義では、マイコンとセンサを使ったセンサデータ収集機器を使用する。そして、カメラの映像を画像分析、単語分散処理を使って数値化し、マイクから得られた音声を音声分析にかけたものをラベルとし、クラスター分析をすることでデンドログラムを描画する。
カメラ,マイク,GPS受信機セット(緯度、経度、海抜高度),温湿度気圧センサー,照度センサー,赤外線焦度センサー,9軸センサーモジュール(加速度xyz、角速度xyz、磁気コンパスxyz),体温センサー,心拍,GSRセンサー(皮膚電気反射)のデータを取得する.ただし,カメラ画像とマイク音声はテキストでも取得する.
取得したデータに対してリアルタイムでクラスター分析をすることで,行動識別を行えるようにする.
カメラで得られる画像や、マイクを通して得られる音声をテキストとして取得するために、画像分析と音声分析を使う。(画像識別や音声認識などともいわれる。)
また、テキストを数値として扱うために単語分散処理を行う。
さらに、通信方式としてシリアル通信とソケット通信、HTTP通信の3つを使う。その準備としてOSI参照モデルとプロトコルについての解説を先に以下で述べる。
画像から必要な情報を抽出し、統計的なデータを得る。AzureのComputer vision APIを使う。
音声から必要な情報を抽出し、統計的なデータを得る。Speech recognition APIを使う。
「王様」ー「男性」+「女性」=「お姫様」
のように単語の足し算、引き算ができるような処理。
Nltkとword2vecを使う。
ネットワークを理解するための“プロトコル”
コンピューター同士の通信をする際の規格のこと
1本だけの通信線を使い、HIGH/LOWの電圧レベルを連続的(=シリアル)に変化させて、意味のあるデータを送信/受信する通信方式
インターネットはTCP/IPと呼ぶ通信プロトコルを利用しますが、そのTCP/IPを プログラムから利用するには、プログラムの世界とTCP/IPの世界を結ぶ特別な 出入り口が必要となります。その出入り口となるのがソケット (Socket)であり、TCP/IPのプログラミング上の大きな特徴となっています。 このため、TCP/IP通信をソケット通信と呼ぶこともあります。
HTTPはTCP/IPを利用したアプリケーション層のプロトコル















ラズパイにGPSセンサとマイクを取り付ける。

ここからOSがWindowsの場合で紹介します。インストールするものも全部for Windows
Raspberry Piの始め方
再起動後 ターミナルでifconfigと入力して無線LANのIPアドレスを確認する
IPアドレスを確認することで、他のパソコンからSSH接続することができる
https://www.arduino.cc/en/Main/Software
よりArduinoIDEをダウンロードしておく。(情報実験で持たされる。)


書き込み後、シリアルモニタで表示するとセンサのデータが,で区切られて表示される。
左から
気温、湿度、気圧、光、
人感(1か0)、x加速度、y加速度、z加速度、x軸ジャイロ、y軸ジャイロ、z軸ジャイロ、x軸地磁気、y軸地磁気、z軸地磁気、体温、心拍、GSRセンサ
Auduinoとラズパイを連結して情報を得る
ラズパイ、PCで使うコード
newsensa_all.py
.ラズパイに入れるモジュール
opencv matplotlib scikit-learn graph-marker
・PCに入れるnltkリソース
python
>>>import nltk
>>>download('averaged_perceptron_tagger')
>>>download('wordnet')
>>>download('universal_tagset')
.PC側
gspread oauth2client
・プログラム修正点
server2.pyの133行目、sensaK.pyの42行目の下線のIPアドレスを自身のパソコンのIPに変更する。
PC側でserver2.pyがうまく軌道できたら
[available to connect: 192.168.0.205](ここは自分のIPアドレス)の文字が表示されるのですぐラズパイの方でsensaK.pyを起動する。
上手くいけばラズパイもPCにもAuduinoで取得したデータ(数値)が表示され、ラズパイ側にはカメラ画像、PC側にセンサのグラフがリアルタイムで更新される。
リアルタイムでの情報取得できたらカメラ画像を収得する。画像ではなく画像に映っている情報を文字に起こして羅列しどこにいるのか、何をしているか判断することができる
7.で説明したカメラの使い方は取得データをPCのコマンドプロンプトに表示するもので今回はスプレッドシートに表示する。
今回使うのはpyhtonから得たデータをスプレッドシートに格納するためにGASを使用する。
1.1 データ取得のために適当にプロジェクトを作成する
[新しいプロジェクト]で適当に名前を入力する。
1.2 外部から操作するために2つのAPIを有効にする
左側にある[ライブラリ]を選択し[googleDriveAPi]をさがし、選択。有効にする
同じ手順で[GoogleSheetsAPI]も有効にする。無事2つが有効にできたら[ダッシュボード]が下図のようになる。
1.3 認証情報
左側にある[認証情報]を選択し、認証情報を作成し、サービスアカウントを選択する。
適当にサービスアカウント名を入力して作成
アカウントの制限をProjectの編集者に設定。最後に作成をクリックするとアカウントができる
最後に秘密鍵を入手する。つくったサービスアカウントを選択し[キー]から鍵を作成する。
そうするとPCに鍵が保存される.この時キーのタイプがJSONになっていることを確かめる。
最後に保存された秘密鍵の名前を[cilent_secret.json]にして任意のファイルに移動させる
後でこのファイルは使います。
1の設定で作成したアカウントとスプレッドシートを共有する。
2.1 共有
自身のgoogleドライブから新規でスプレッドシートを作成する。
適当に作ったgoogleのスプレッドシートの共有を選択し、先ほどのアドレスを追加する。
ここのアドレスとは、28.PNGのメールアドレスっぽいやつである。この際に編集者として設定する。
2.2 スクリプトエディタ
スプレッドシートの[ツール]、[スプリクトエディタ]を開き、以下のコードを書き込む。
function doPost(e) {
var ss = SpreadsheetApp.getActive()
//下の2行はどっちでもOK 2つ目はシート一枚目という意味
//de.kore.naniyo
//var sheet = ss.getActiveSheet();
var sheet1 = ss.getSheets()[0];
var sheet2 = ss.getSheets()[1];
var jsonString = e.postData.contents;
//jsonString = jsonString.replace('\\','');
//jsonString = jsonString.replace(/\}\"/,'\}');
var data = JSON.parse(jsonString).toString();
var data2 = JSON.parse(data);
if (data2.key1){
sheet1.appendRow([data2.key1.nowtime,data2.key1.bio_data,data2.key1.camera]);
sheet1.appendRow([data2.key2.nowtime,data2.key2.bio_data,data2.key2.camera]);
sheet1.appendRow([data2.key3.nowtime,data2.key3.bio_data,data2.key3.camera]);
sheet1.appendRow([data2.key4.nowtime,data2.key4.bio_data,data2.key4.camera]);
sheet1.appendRow([data2.key5.nowtime,data2.key5.bio_data,data2.key5.camera]);
sheet1.appendRow([data2.key6.nowtime,data2.key6.bio_data,data2.key6.camera]);
sheet1.appendRow([data2.key7.nowtime,data2.key7.bio_data,data2.key7.camera]);
sheet1.appendRow([data2.key8.nowtime,data2.key8.bio_data,data2.key8.camera]);
sheet1.appendRow([data2.key9.nowtime,data2.key9.bio_data,data2.key9.camera]);
sheet1.appendRow([data2.key10.nowtime,data2.key10.bio_data,data2.key10.camera]);
sheet1.appendRow([data2.key11.nowtime,data2.key11.bio_data,data2.key11.camera]);
sheet1.appendRow([data2.key12.nowtime,data2.key12.bio_data,data2.key12.camera]);
sheet1.appendRow([data2.key13.nowtime,data2.key13.bio_data,data2.key13.camera]);
sheet1.appendRow([data2.key14.nowtime,data2.key14.bio_data,data2.key14.camera]);
sheet1.appendRow([data2.key15.nowtime,data2.key15.bio_data,data2.key15.camera]);
sheet1.appendRow([data2.key16.nowtime,data2.key16.bio_data,data2.key16.camera]);
sheet1.appendRow([data2.key17.nowtime,data2.key17.bio_data,data2.key17.camera]);
sheet1.appendRow([data2.key18.nowtime,data2.key18.bio_data,data2.key18.camera]);
sheet1.appendRow([data2.key19.nowtime,data2.key19.bio_data,data2.key19.camera]);
sheet1.appendRow([data2.key20.nowtime,data2.key20.bio_data,data2.key20.camera]);
sheet1.appendRow([data2.key21.nowtime,data2.key21.bio_data,data2.key21.camera]);
sheet1.appendRow([data2.key22.nowtime,data2.key22.bio_data,data2.key22.camera]);
sheet1.appendRow([data2.key23.nowtime,data2.key23.bio_data,data2.key23.camera]);
sheet1.appendRow([data2.key24.nowtime,data2.key24.bio_data,data2.key24.camera]);
sheet1.appendRow([data2.key25.nowtime,data2.key25.bio_data,data2.key25.camera]);
sheet1.appendRow([data2.key26.nowtime,data2.key26.bio_data,data2.key26.camera]);
sheet1.appendRow([data2.key27.nowtime,data2.key27.bio_data,data2.key27.camera]);
sheet1.appendRow([data2.key28.nowtime,data2.key28.bio_data,data2.key28.camera]);
sheet1.appendRow([data2.key29.nowtime,data2.key29.bio_data,data2.key29.camera]);
sheet1.appendRow([data2.key30.nowtime,data2.key30.bio_data,data2.key30.camera]);
}
if(data2.mickey){
sheet2.appendRow([data2.mickey.nowtime,data2.mickey.mic]);
}
}
●使うコード
要領がでかすぎたので研究室googleDriveの[学生>江崎>>]にコード集.zipがあるよ。
そのコード集をダウンロードして解凍したら、設定で保存した秘密鍵をこのフォルダに入れておく。
そしたら下準備としてprocessing_data.pyをエディタを使って開き、40行目のSPREADSHEET_KEYを変更する。
ここでのキーとはつくったスプレッドシートのURLの一部である。
URLの/d/この部分/edit~
ここまでできたらラズパイとPCをつなげ、カメラから取得したデータを書き起こす。
アルディーノと連結したラズパイを電源につないでPCとリモート接続する。
●カメラ画像の書き起こしに使うコード
newsensa_all_name.py
まずこのコードを書き換える必要がある。
PC側でスプリクトエディタを開き、[公開>ウェブアプリケーションとして導入]し、
Project version > new
Execute the app as > Me
who has access to the app > Anyone
にする
更新するとURLが製造されるのでそのアドレスをコピーし、コードの103行目のURLを書き換える。
そしてコードをラズパイで実行する。
これはアルディーノのセンサデータとカメラ画像を5秒ごとに表示している。これを30回繰り返すとスプレッドシートに表示される。
詳しく見てみるとたしかにペットボトルの情報が書き起こされている。
スプレッドシートにシート2を用意し、PCで[processing_data.py]を実行するとデンドログラム(初期)が表示される。