head

2018年3月22日木曜日

google colaboratory お試し編 、GPUも使える機械学習の環境構築

前回続き、機械学習の関連となります。
開発環境まわりの内容となり。先人様の情報を元に調査しました。
google colab(google colaboratory) を試してみました。機械学習系の
いくつかのライブラリがインストール済みで、
クラウド上で、ある程度機械学習の開発ができそうです。
*) 連続 使用時間は、12時間までらしいです。


# thanks, 感謝です。
https://qiita.com/tomo_makes/items/f70fe48c428d3a61e131

http://uepon.hatenadiary.com/entry/2018/03/21/180329



# 操作方法など、

colab を chrome ブラウザで開きます。
https://colab.research.google.com


jupyter-notebook に、操作方法は似ているイメージでした。

コードセル内で
! を先頭に追加すると、unixコマンドが使用できました。

!ls
> datalab
みたいな、操作です。

ランタイム - ランタイムのタイプの変更
でノートブックの設定が開き、
ハードウエアアクセラレータを、GPUに変更できました。




*)処理内容によりますが、学習データ件数が少ない場合等で、
 CPU処理のほうが、高速の場合もありました。



# pip 関連
tensorflow
Keras
matplotlib
numpy
pandas
scikit-learn
など、使えそうな物は複数ありそうです。





# ファイルの転送は、上記のueponさんの
記事を参考にして、csvファイルを転送しておき。
csv読み込み +kerasのRNN系 結果の matplotlibグラフ表示まで
実行できました。
*)今回は1ファイル毎の転送で。面倒でした。。




# まとめ
カンタンな紹介程度の内容すが。
クラウド上で無料で利用できて、ある程度の機械学習の機能
が使えるため、python 系のインストールの負担も減り良さそうですが
落とし穴あるかもですね。。

# 関連のまとめ
機械学習 関連まとめ
http://knaka0209.blogspot.jp/2018/01/tensorflow-matome.html



###  update : 2018/03/23 ###
colab のipynb ファイルから、外部ファイルの読み込み方法(追記)
colab ノートブックから、外部データファイル(csv etc)や、外部python クラスを呼ぶ場合、
前回、[ from google.colab import files ]を使った、アップローダでファイル転送しました。
今回は、異なるファイル転送で
ノートブックから、unixコマンドが使えるので。wget, git clone(gitHubから)を
使って、関連プロジェクトの複数ファイルを一括コピーしてみました。
*) 単純に外部サイトから、複数ファイルコピーできて利用できたので紹介です。

# wget
wget https://your-dns/sklern.zip



# unzip します
!unzip sklern.zip

# カレントフォルダにmv 又は, cp (解凍したフォルダ以下)
!mv sklern/* .



# 実行
コマンドセルに、呼び出しコード(main処理)を貼り付けて、実行
*) この場合csvファイルのみですが、自作外部pythonクラスも同様に読めました。


実行2、グラフ表示。


## git clone した場合も同様に、フォルダ以下を mv(cp)して、読み出すことができました。
*) 事前にgithubに、プロジェクト全体をコミット後です(公開前程の場合ですが。)

cloneの例:
git clone https://github.com/your-name/app123.git

## ポイントは、少しわかりずらいですが。
1) wget , git clone で外部ファイルをzip形式等でコピーできる事
2) コピーしたファイル(フォルダ)を一括解凍などでカレント配置し、
ノートブックのipynb ファイルから、読める事

*) 作業フォルダはipynb ファイル以外は、定期的に削除されていたかもですので。
 利用時に一括コピーする必要があるかもです。

2018年1月12日金曜日

tensorFlow/機械学習 関連まとめ

人工知能系ライブラリのtensorFlow ,その他 機械学習 開発まとめになります。
IoT連携、活用事例等を記載予定です。



# google colaboratory お試し編
http://knaka0209.blogspot.jp/2018/03/google-colab-1.html



# IoTデータから scikit-learnで線形回帰。
https://knaka0209.hatenablog.com/entry/sklern-1



# IoTデータ学習して chainerで時系列予測を出力する。
https://knaka0209.hatenablog.com/entry/chainer-1



# IoTデータから LSTMで時系列予測を出力する。keras+ tensorflow版
https://note.mu/knaka0209/n/nc4bc651439e2


# IoT + tensorFlowで未来予測値を表示するwebサービスを追加する
http://knaka0209.blogspot.jp/2018/01/tensorFlow-3.html


#IoTセンサー値から tensorFlowで予測値を計算する機械学習サービスを設置する
http://knaka0209.blogspot.jp/2018/01/tensorFlow-2.html


#IoTセンサー値から tensorFlowで未来予測値を計算して、GOOGLEHOMEで読み上げる
http://knaka0209.blogspot.jp/2018/01/tensorFlow-1.html


#IoTセンサー値から、TensorFlowの線形回帰で未来予測値を計算する。機械学習の入門編
https://note.mu/knaka0209/n/nc154ef7e2fe8







2018年1月7日日曜日

IoT + tensorFlowで未来予測値を表示するwebサービスを追加する

前回続き、tensorFlow/機械学習の関連となります。
IoTセンサー値から、tensorFlowを使った予測値の GoogleHome読み上げ機能に、
webサービス管理機能で、グラフ表示、データ表示等の機能を追加しました。

*) 構成的には 前回の予定と同じで、
当初予定していた部分の開発の最後になります。

# 構成
php 5.6
cakephp 2.10
mysql
その他


# チャンネル一覧


# フィールド一覧:  予測/実績 グラフ
*) 室内の温度を、数箇所測定しています。

青: 実績
黄: 予測




# ファイールド詳細
最新実績
予測 :1時間後 /6時間後







# 機械学習結果/tensorFlow、出力履歴



# モバイル
レスポンシブにしました。




# まとめ
前回の、バックエンドの機械学習/演算処理の負荷は気になるところでしたが。
定期更新された、予測係数を使って表示機能を実装すると。
ストレスなく表示できました。
GoogleHome機能に加え、気になるデータの視覚確認ができたり
利便性が向上した気がします。
見直し中ですが、改良を続けたいと思います。



# 関連、
tensorFlow/機械学習 関連まとめ
http://knaka0209.blogspot.jp/2018/01/tensorflow-matome.html


2018年1月4日木曜日

IoTセンサー値から tensorFlowで予測値を計算する機械学習サービスを設置する

前回続き、tensorFlow/機械学習の関連となります。
IoTセンサー値から、tensorFlowを使った予測値の GoogleHome読み上げ機能を前回公開しましたが、
定期的に、最新のtensorFlow結果を更新する為に
機械学習の演算処理や、server更新処理を Lan上の機械学習serverで行っていましたので
python server実装あたりの内容となります。



# 予定している構成
前回と同じ構成、機械学習処理は、
web-APIを使って
IoTから更新されるセンサー値を読み込み
tensorFlow結果を更新する処理を追加しています。

*) ボードPC(nano Pi NEO 51MB)に、機能を追加
python 2.7



# Linux version
>uname -
Linux NanoPi-NEO 4.11.2 #266 SMP Thu Jun 29 17:46:10 CST 2017 armv7l armv7l armv7l GNU/Linux



# code ,python 2.7 、 一部分ですが。
main 処理

tensorFlow処理、実績取得/更新の呼出など。 定期実行



# systemctl でサービス起動の設定
*) 下記の cronに変更しています。

service ファイルを追加して、
rasPi/BLE serverと同様に、起動処理を追加。

参考 の設定方法:
http://knaka0209.blogspot.jp/2017/07/raspi-6-BLE.html





### update :2018/01/19
常駐サービスの連続稼動テストした結果
tensorFlow 1.1で、メモリーリークが見られましたので、
cron起動に一旦変更しています。
*)最新 tensorflow -version は、対策されているかもです。
(nanoPi /rasPi インストール不可能みたいですが)

調整方法は、変数をdel 処理と、gc呼出で。
メモリ領域の削除で対応予定していたのですが、
なかなか消費メモリ量が減らず。。 cronに変えています
この変更のデメリットは、1サイクルの実行終了前に、次の実行処理が
二重に起動される可能性がありますので、起動間隔をあけておく必要があります。

設定例:
cron設定の確認
> sudo crontab -l
cron設定  (nanoで設定しました。)
> sudo crontab -e

例ですが、下記を追加しました。毎時10分に起動した場合です。
10 * * * * /usr/bin/python /home/pi/work/tensorflow/yosoku_update/yosoku_update_one.py

*)上記の呼出コードも、修正しています。
cronから呼ばれ
ループ無しの、単発実行 => 終了になります。




# 関連、
 tensorFlow/機械学習 関連まとめ
http://knaka0209.blogspot.jp/2018/01/tensorflow-matome.html


*)IoT側はBLE使用しています
device:
http://knaka0209.blogspot.jp/2017/09/RN4020-4.html
nano Pi gateway:
http://knaka0209.blogspot.jp/2017/07/nanoPi-2.html




2018年1月3日水曜日

IoTセンサー値から tensorFlowで未来予測値を計算して、GoogleHomeで読み上げる

tensotFlow/機械学習の関連となります。
前の、IoTセンサーから、tensorFlowによる予測計算のアプリ側の組み込みが、少し進んだ為
全体的に見直し中ですが、メモしたいと思います。
今回は、GoogleHome(AI スピーカー)の連携部分を追加し、
問合せに対して、
指定場所のセンサー値、予測値を音声出力する機能を追加しました。


# 前の記事
IoTセンサー値から、TensorFlowの線形回帰で未来予測値を計算する。機械学習の入門編
https://qiita.com/knakaqi/items/d3699d15053e884dcac0

# 動画



# 予定している構成案

全体的に分散ぎみですが
IoTデバイスからのセンサー値は、管理serverにデータ送信。保存しておき
tensorFlowの機械学習サーバ機能を設置して、
定期的にセンサー値を読み込み、機械学習で線形の係数近似値を計算、
管理serverに更新。
GoogleHome=>webhook から、呼ばれた際に、必要な値をAPI経由で取り出し、
音声出力の、文章を組み立てて、ユーザーに出力。
実績更新と、予測に必要な計算も平行に実行更新する構成としています。

*)tensorFlowの機械学習処理は、重たい感じで。
低スペックPCで各センサー処理分を連続して実行すると、時間はそれなりにかかりそうです。
LAN上のボードPC(nano pi 512M)で実行しています。


# tensorFlow install
nano Piに、tensorFlowをインストール時に、
通常のLinux版は、インストールできなかったため、苦戦しました。。
https://www.tensorflow.org/install/

rasPi にインストール事例はありそうなので、参考にしました。
参考: Raspberry PiとTensorFlowを使ったディープラーニングの開発環境構築
http://karaage.hatenadiary.jp/entry/2017/08/09/073000

環境:
python 2.7
tensorFlow1.1
*) 約30分ほど、かかりましたが。
以前の、数本のpython3.5のコードも修正無しで動作できたました


# 前回と同じ、線形回帰による。
計算方法とし、予測値を計算しています





# code python2.7
webhookで、指定場所の分岐処理、実績/予測値の取得 まわりの処理
 


# まとめ
今回は構成の面で、機械学習の演算処理を負荷が重いため、
通信処理は追加となりましたが独立させて、
定期更新する方法を検討しました。
予測精度の改善や課題はまだ多いので。調査を進めたいと思います


# tensorFlow/機械学習 関連まとめ
http://knaka0209.blogspot.jp/2018/01/tensorflow-matome.html

# 関連、IoT側はBLE使用しています
device:
http://knaka0209.blogspot.jp/2017/09/RN4020-4.html
nano Pi gateway:
http://knaka0209.blogspot.jp/2017/07/nanoPi-2.html



2017年12月8日金曜日

RN4020 BLE ブレークアウト お試し編



BLE関係となります。microchip RN4020 のブレークアウト基板
以前、モジュール品を製作した時に検証の基板ですが、
放置していたので。通信テストしてみました


# 部品
マイクロチップ Bluetooth RN4020-V/RM123



# 配線



電源(VDD) バスコン(セラコン 0.1u) 追加
WAKE_SW : 10K プルアップ
WAKE_HW : 10K プルアップ

GND は、全て結線しています。
*) プルアップしないと、起動しませんでした。

電源は、 3V3投入すると、起動できました。

pcから、FTDI 経由で操作可能です。


#Log -UART


Nコマンド => A (アドバタイズ)
adv 送信できました。



#スマホ アプリでscan

# raw data


送信値を、確認できました。


# 回路図


# 配置図


*) ピンを、引き出しただけですが。

# pdf
https://github.com/kuc-arc-f/RN4020C-1C_pdf

# EAGLE file , ver 7.5
https://github.com/kuc-arc-f/RN4020C-1C_pcb



# まとめ

BLE Gateway経由で、クラウド転送できそうです



# 関連のページ

# 電池1本駆動、BLE バッテリー小型化編
http://knaka0209.blogspot.jp/2017/09/RN4020-4.html

#  RN4020 BLE 搭載用ベース基板 試作編
http://knaka0209.blogspot.jp/2017/09/RN4020-1.html

# RN4020 BLE + ATMEGA328, 省エネ改良版
http://knaka0209.blogspot.jp/2017/07/esp32-21.html

# RASPBERRY PI , BLE GATEWAY 設置、
http://knaka0209.blogspot.jp/2017/07/raspi-5-BLE.html






2017年11月16日木曜日

複数の設置場所のセンサー値を 場所指定で読み上げる。 Google Home +IoT連携(3)


前回に続いて Google Home関係となります。
複数の違う場所に置いたセンサを、個別に読み上げる機能を追加しました。
前回は全て1回にまとめて、音声出力していたのですが。

処理 (webhook 自作api):
前回より、複雑になりますが。
dialogFlowから、webhookを呼ぶ時のリクエスト内に
Google Homeに音声入力した情報が含まれてましたので、
チェックして、設置場所を探し、対象デバイスの更新を取得できる外部APIを呼びます。
音声出力の文章の組立て方法は前回と同様。dialogFlowに出力します。



# 動画、  温度センサの読み上げ
リビング
玄関
室内全部(2箇所) 平均値の計算

*) 前回と同様ショートカット機能も活用しています。( スマホ設定 )





# 実行時のJSONのダンプ
 homeに音声入力した内容もふくまれています。
 result 内
 action : Intents action
 resolveQuery : User Says / おそらく音声入力した文
 Entities 等、
これらをキーにして、どの音声出力パターンを出力すべきか判定。
今回は、action をつかいました。




# Intentsの追加、追加機能分
今回は、Entities は使いませんでしたが、動作できました。
Fulfillment の下の、Use webhook のチェックを ON にします。

リビング:




玄関:



Integrations
追加した、Intents を 選択して追加。



Test > Update Draft
で反映できました。


# code --python27
webhook リクエストのチェック。分岐処理あたり。




# 参考の記事
GoogleHomeをスプラトゥーンアシスタントにする #2 Twitterからステージ情報の取得
https://qiita.com/kotatu_km/items/c340027914d690095b66




# 関連
Google Home +IoT連携 ,センサー値の読み上げ機能
http://knaka0209.blogspot.jp/2017/10/gHome-1.html



2017年10月30日月曜日

温度/湿度/気圧読み上げを追加しました。 Google Home +IoT連携(2)


前回に続いて Google Home関係となります。
複数のBLE子機と、Google Home miniの連携(拡張機能)で
温度/湿度/気圧のを含む、室内のセンサー値を読み上げています。

*) APIの配置や、通信方法は前回と同じです。
dialogFlow +自作api



# 動画
前回と同様で、ショートカットを登録して、
短い単語で、起動できるように設定しています。



1台目:温度/湿度/気圧
2台目:温度
を 音声出力。



# 追加した、BME280 搭載デバイス
プロト基板で、仮配線ですが。
電池(二次電池)を 基板の上に搭載して、電源供給しています。
5V昇圧回路も使用。




*) 基板の右側に、bme280 ( 秋月さんモジュール )




# 配線の参考
http://knaka0209.blogspot.jp/2017/07/raspi-7.html



# 前回同様、グラフの表示も音声出力と並行して 可能です。
thingSpeak



field5, 6,7 : 1 台目
field1 : 2台目



# code --arduino IDE
BLE driver ( 子機 )
https://github.com/kuc-arc-f/RN4020_sv2_0_9_3_bat1_bme

*1 ) BLE gatewayも、前回と同じです。
追加したデバイス分の、送信処理を追加した程度

*2) 子機は、BLE以外(wifi 機器 etc )でも問題ありません。
クラウド連携でデータ出力可能であれば、home側から参照できます。



# 関連の記事
Google Home +IoT連携 ,センサー値の読み上げ機能
http://knaka0209.blogspot.jp/2017/10/gHome-1.html




#




2017年10月25日水曜日

Google Home +IoT連携 ,センサー値の読み上げ機能




Google Home関係となります。
Google Home miniでの拡張機能で、dialogFlow/ Fulfillment
のwebhook 経由で、外部APIから IoT更新のセンサー値データを読み込みます。

先人さまの、記事を参考に機能を追加しました。
Webhookは、今回はappEngine(GAE) 使いました。
Google以外のクラウドでも多分よさそうです。

*) 先日 Home mini 実機を入手したので、基本機能も良く理解していませんが、
少しづつ調べたいと思います。



# thanks/ 参考

自然言語処理を容易に実装できるDialogflow(旧:API.AI) を使ってみる
https://qiita.com/flatfisher/items/76bc86b65e5f2150a1a0

GoogleHomeをDialogflow(旧:API.ai)でスプラトゥーンアシスタントにする
https://qiita.com/tak_km/items/c06f45c6692dceb9258d

手順としては、
dialogFlow で、 Entity, Intents 等を設定しておき、
Fulfillment で、 webhook を指定
シミュレータでテスト、みたいな流れでした。



# 概要






# 動画
指定場所の、温度センサー値読み出し。


*) テスト版で、テストアプリの接続確認の質問出てます。
申請すれば、確認承認後は出ないかもしれません。



# Code ,python (utf-8 )
webhook.py


データ保存クラウドの、レスポンスの参考は下記です

{"temperature":"24","humidity":0}


Home側から呼ばれた時、
最新の、センサー値を出力する必要があります。

# dialogFlow のJSON ダンプを追加しました。2017/10/26





# IoT側
子機は省電力版の BLE(arduino) + BLE gateway使用していますが、
クラウド側にデータ保存できれば、他の機種でも問題ないと思います

参考:
BLE gateway 機能:
http://knaka0209.blogspot.jp/2017/08/nanoPi-4.html

BLE子機:
http://knaka0209.blogspot.jp/2017/09/RN4020-4.html



==== Update:2017/10/26  ====
動画の追加:複数のセンサー対応。


会話の内容(例)
1) センサーをチェック (音声入力)

2) Home (音声出力)
ok,リビングの温度は、24度です。
玄関の温度は、22度です。
センサー値の平均は、23度です。
現在の時刻は、11時45分です。

*)少し長くなりましたが。
平均値の計算、時刻の追加は オプションです
テスト版は同じです。

==== Update:2017/10/27 =====
Home対応と、グラフ表示機能を追加しました。
2箇所のセンサーのログの監視が可能です。(PC ,mobile )
field1: 1台目
field4: 2台目

異なるクラウドサービス (thigSpeak )にも、
データ送信機能を追加しています。



*) グラフの最新値は、Homeの音声出力する値と
同一になります。

==== update :2017/10/30 ====
補足、ショートカットの利用 (ご参考まで )
一般的な話しですが , Homeアプリのショートカットを使うと、
テストの追加したアプリも少し楽になりました。
テスト版モードに切り替わる点は、おなじですが。
音声入力が楽になります。下記を登録しておきます。
1)
テスト
内容、テスト用アプリにつないで、
2)チェック、intentsで定義した文章
内容、センサーをチェックして

# 入力、
OK,Google テスト
チェック

1で、テスト接続
2で、実行





動画


==== =====







2017年10月3日火曜日

micro:bitでIoT ,mbed編




BBC micro:bit 関連になります。
教育用らしいのですが、国内でも
購入できるようになったようですので購入してみました。

BLE使用して、前回の複数Beacon対応の
BLE Hub( gateway)経由で、クラウド送信までテストしてみました。



#部品
Micro:bit
http://akizukidenshi.com/catalog/g/gM-12513/

Soc: Nordic nRF51822
32-bit ARM Cortex M0 processor (16MHz)
16kB RAM
256kB Flash


#開発環境
複数ありそうですが、
今回は、mbed使いました。
https://os.mbed.com/


# thanks /参考のページ
https://os.mbed.com/platforms/Microbit/



#サンプル

1 ) 変数の送信。
https://gist.github.com/kuc-arc-f/36a919dace241e9ac46f87103cfebed8



*) Gap Profile サンプルを参考にしています。 advertising 送信
https://os.mbed.com/teams/Bluetooth-Low-Energy/code/BLE_GAP_Example/

2 ) adc で、LM60BIZ センサー値を送信。


adc読み込み部分:
https://gist.github.com/kuc-arc-f/901ace15833ebf6dfc9fe2d16e9b97bd


adc は、誤差が大きかったです。(P0 )
取得値= 623mV
実測(テスタ) = 585mV
誤差 = 38mV
*) 使えないかも。。センサによっては


*) mbedからのpinですが、ボードのピン番号と違うようでした。
検索した記事
BBC micro:bit PinNames.h contains pin names that do not match the micro:bit pins
https://github.com/ARMmbed/mbed-os/issues/2713
ページ内のピン対応関係の記載(ヘッダファイル)
https://github.com/lancaster-university/microbit-dal/blob/master/inc/drivers/MicroBitPin.h




本体のピン番号




# BLE hub(gateway )

random address を使うようで、public address 以外も
scanできるように修正

https://github.com/kuc-arc-f/ble_gateway_sv2_mbit


====update:2017/10/04 ====
random address(BD アドレス)について補足
異なるデバイスでrandom addressが重複する場合は、誤作動が想定される為、
対策を検討する必要する必要があります。
例として旧版のble_gateway_sv (https://github.com/kuc-arc-f/ble_gateway_sv )
は、データ内にデバイス名(ID)を格納しデータ管理を行える設計です。
追加デバイスに対して、重複しないデバイス名を決定する必要があり、
BDアドレスを使用しません。

====update:2017/10/04 ====
# 消費電力を測定しました、5Vライン
BLE Gap送信: 14.3 mA



*)[参考] hello world (UART 出力)は、17.3 mA
==== ====







# 関連
BLEハブ機能: UPDATE, NANOPI BLE GATEWAY SERVER アドレス指定
http://knaka0209.blogspot.jp/2017/08/nanoPi-4.html

# 関連のまとめ
BLE -IOT関連まとめ
http://knaka0209.blogspot.jp/2017/07/BLE-matome.html




#



google colaboratory お試し編 、GPUも使える機械学習の環境構築

前回続き、機械学習の関連となります。 開発環境まわりの内容となり。先人様の情報を元に調査しました。 google colab(google colaboratory) を試してみました。機械学習系の いくつかのライブラリがインストール済みで、 クラウド上で、ある程度機械学...

AD-parts

Shop
Bluetooth搭載
ベース基板

Social