Raspberry Pi に、Tensorflowをインストールする手順
以下を導入したRaspberry Pi 2 以上で、TensorflowとOpenCVをインストールする手順です。公式の手順やインターネットで検索してもところどころエラーが発生したので、検証した上でまとめました。
RASPBIAN STRETCH LITE
- Version:June 2018
- Release date:2018-06-27
以下を実行。
$ sudo apt-get update -y && sudo apt-get upgrade -y $ sudo raspi-config $ sudo apt-get install python3-pip python3-dev python3-pandas python3-h5py libatlas-base-dev $ wget https://github.com/lhelontra/tensorflow-on-arm/releases/download/v1.10.0/tensorflow-1.10.0-cp35-none-linux_armv7l.whl $ sudo pip3 install tensorflow-1.10.0-cp35-none-linux_armv7l.whl $ sudo pip3 install keras $ sudo pip3 install --upgrade h5py
Tensorflowのバージョンチェック
$ python3 >>>import tensorflow as tf >>>tf.__version 1.10.0 >>> exit()
Watson Visual Recognitionで画像認識した結果をRaspberry Pi Zero WHで読み上げ
画像認識からの音声読み上げと温度センサーの同時利用の確認 - 日々クラウドにふれる記録の続きで、画像認識した結果を音声読み上げするフローです。テキストを音声ファイルに変換するツールとして「pico2wave」を使用しています。 また、画像認識した結果のうち、特定のキーワードのときだけ「Replace」と名付けたChangeノードで別の言葉に置換し、音声読み上げするようにしています。たとえば駅のホームで、歩きスマホ中の歩行者を認識したときだけ「キケンキケン」と音声読み上げするといった具合です。
現在は動作確認を終え、より条件を付与するために超音波センサーや赤外線センサーを追加できるかどうかに取り組んでいます。
画像認識からの音声読み上げと温度センサーの同時利用の確認
作業中にRaspberry Pi Zero WHのカメラコネクタを壊してしまい、カメラモジュールを用いた画像認識が出来なくなってしまいましたので、カメラをUSB接続のものに変更し、それに合わせて画像認識と認識結果の音声読み上げフローをNode-REDに実装しました。 カメラモジュール使えていれば、WatsonのVisual Recognitionの処理をもっと簡単に構成することができます。
<カメラコネクタ破損前>
<カメラコネクタ破損後>
<Node-REDに実装したフロー>
ノード名:fswebcam
Execノード設定 コマンド:fswebcam -r 352x288 --no-banner photo.jpg
ノード名:Visual Recognition
Execノード設定 コマンド:curl -X POST -u "apikey:xxxx" --form "images_file=@/home/pi/photo.jpg" "https://gateway.watsonplatform.net/visual-recognition/api/v3/classify?version=2018-03-19"
画像認識をインターネット経由でやっているので、ワンテンポ遅れて違和感。OpenCV使って内部で画像認識処理させるのが良いかなぁ。 ブレッドボードにささっているのは、温度センサーです。両方使えるようにしています。i2c接続のため、A/Dコンバータを使うことでほとんどのセンサーは接続できます。
Raspberry Pi カメラモジュールの仮ケース
Raspberry Pi カメラモジュール、USB接続のカメラに比べると安くないので、とりあえず簡易的なケースに入れておきたく、100均で売っているSDカードのケースを加工。カメラモジュールとRaspberry Pi Zero WHを接続するケーブルを挟まないように隙間を作る加工をした上で、カメラ部分をくり抜いています。あとでヤスリをかけて整える予定。
Raspberry Pi Zero WHに、ReSpeaker 2-Mics Pi HATを載せて音声出力を確認
Raspberry Pi Zero (WH含む)には、3.5mmジャックがなく、USBポートがありますがMicro-Bが1つだけです。 Mini HDMIがあるので、Mini HDMIからの出力時に音声を取り出すか、GPIOを使うか悩みどころです。今回は、「拡張ボード」を使います。「ReSpeaker 2-Mics Pi HAT」と言い、スイッチサイエンスで1300円ほどで購入しました。Amazonでは3500円前後でした(2018年8月現在)。
左右にマイクが2つと、3.5mmジャックが増え、コンビニなどでも購入可能なイヤフォンが使えます。 それ以外に、Groveコネクタがあるので対応ケーブルを使うことで、Grove対応やそれ以外の各種センサーをつなげることができます。 今回は、音声出力を確認するまでの手順です。
$ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get install git $ cd /usr/local/src/ $ sudo git clone https://github.com/respeaker/seeed-voicecard.git $ cd seeed-voicecard/ $ sudo ./install.sh $ sudo reboot
再起動後、再び接続し直します。
$ sudo alsactl --file=asound.state restore $ aplay -l
$ aplay -l により音声出力デバイスの認識状況が表示される。
card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: seeed2micvoicec [seeed-2mic-voicecard], device 0: bcm2835-i2s-wm8960-hifi wm8960-hifi-0 []
Subdevices: 1/1
カード1のデバイス0 を指定すると、ReSpeaker 2-Mics Pi HATに接続したイヤフォンから聞こえることがわかります。
alsamixerを実行し、F6キーを押して、カード1に切り替え、
$ alsamixer
サンプル音声ファイルを使って、実際にイヤフォンから音が出るか聴いてみましょう。下記コマンドを実行。
$ aplay -D plughw:1,0 /usr/share/sounds/alsa/Front_Left.wav
Python使ってFitbitのアクティビティデータ(安静時心拍、歩数、消費カロリー)を取得する
Fitbitのアクティビティデータを取得し、クラウド上のデータベースなり、CSV出力して、NoSQL DBにCSVごと投げるなり処理するコードについて、とりあえず動きましたので、忘れないようにメモしました。特に安静時心拍や歩数、消費カロリーは、日本語で情報がほぼ無いので苦労しました。
Python 2.x と Fitbit API接続のため、python-fitbit を使用しています。 前日のデータを取得するために、Fitbitへの接続と下記の変数を定義します。
アクティビティ変数 | 安静時心拍 | 歩数 | 消費カロリー |
---|---|---|---|
変数名 | resthr | act | cal |
ポイント部分
DATE = datetime.date.today() DATE = (DATE - datetime.timedelta(days=1)) client = fitbit.Fitbit(CLIENT_ID, CLIENT_SECRET, ACCESS_TOKEN, REFRESH_TOKEN , refresh_cb = updateToken) #Get resting HeartRate fitbit_resthr = client.time_series('activities/heart', base_date=DATE, period='1d') resthr = fitbit_resthr['activities-heart'] #Get Activity Steps fitbit_act = client.time_series('activities/steps', base_date=DATE, period='1d') act = fitbit_act['activities-steps'] #Get Activity Calories fitbit_cal = client.time_series('activities/calories', base_date=DATE, period='1d') cal = fitbit_cal['activities-calories']
上記は、Fitbit APIの、「Activity Time Series」と「Heart Rate Time Series」を使用しており、base_dateがターゲットの日付(ここでは前日で、period で日付範囲を指定します。ここでは、period を1d=1日としています。データの仕様は下記の公式ドキュメントを確認してください。
出力する処理です。
#Activity-resting-HeartRate for varrest in reversed ( range( 0, len(resthr) ) ): print ( str( resthr[varrest]['value']['restingHeartRate'] ) ) #Activity-Steps for vars in reversed ( range( 0, len(act) ) ): print ( str( act[vars]['value'] ) ) #Activity-Calories for varc in reversed ( range( 0, len(cal) ) ): print ( str( cal[varc]['value'] ) )
わかってみると単純でした。
Hyperledger Composer (2018年5月28日時点) をIDCFクラウドに導入する手順
ブロックチェーンを用いたアプリケーションを開発ができる「Hyperledger Composer」導入について、公式ドキュメントが英語で、たまにトラブルに遭遇するので、トラブル回避のための記録です。
IDCFクラウドの標準のイメージテンプレートでは、ストレージが標準15GBなのでストレージ不足のため、標準のイメージテンプレートは使わずに、付属のISOファイルから仮想サーバーを立てています。IDCFクラウド付属のISO「Ubuntu-16.0.4.2-server-amd64.iso」を使用しました。ストレージは、25GB以上は欲しいです。 またIDCFクラウド仮想サーバーのマシンタイプは最低限「light.S2」が望ましいです。「light.S1」で動かすのは厳しいです。マシンタイプ「light.S2」でストレージ30GB、月2,000円と表示されました。
次はnode.js についてです。Hyperledger Composer は、ブロックチェーン基盤としてHyperledger Fabricを使用します。Hyperledger Composer 0.19.4 までは、パッケージマネージャを使ってnode.jsを導入していました。(Qiitaで書いた記事)
5月28日時点で、nvm でnode.jsを導入することでトラブルが減りましたので、公式のHyperledger Composer Docs で述べられている「prereqs-ubuntu.sh」を使った方が良いです。
$ sudo apt-get update -y && sudo apt-get install git wget nano curl software-properties-common build-essential $ sudo apt-get upgrade -y $ curl -O https://hyperledger.github.io/composer/unstable/prereqs-ubuntu.sh $ chmod u+x prereqs-ubuntu.sh $ ./prereqs-ubuntu.sh $ sudo reboot
再起動後、再びSSH接続。次のコマンドを順次実行していきます。
$ npm install -g composer-cli $ npm install -g composer-rest-server $ npm install -g generator-hyperledger-composer $ npm install -g yo $ npm install -g composer-playground $ mkdir ~/fabric && cd ~/fabric $ curl -O https://raw.githubusercontent.com/hyperledger/composer-tools/master/packages/fabric-dev-servers/fabric-dev-servers.tar.gz $ tar -xvf fabric-dev-servers.tar.gz $ ./downloadFabric.sh $ ./startFabric.sh $ ./createPeerAdminCard.sh
これにて、Hyperledger Composerの標準的な導入は終わりです。 5月28日時点、「composer-cli」「composer-rest-server」「generator-hyperledger-composer」「composer-playground」の各バージョンは、0.19.6 が入りました。 5月28日以降でトラブルが起きる場合は、@0.19.6 を各コマンドの末尾につけてバージョン指定でインストールします。
次にRESTが使えるか確認のため、yo hyperledger-composer を使って、RESTでデータを扱うアプリ(ビジネスネットワーク)を作っていきます。composer-rest-server を実行して、”Error: Cannot find module 'ieee754'” と出た場合は、次のコマンドを実行してから、composer-rest-serverを実行し直します。
$ npm install -g ieee754 --save-dev
composer-rest-server 起動後、別のネットワーク環境から、curl -X POST にて、外部からRESTが使えるか確認します。こちらでは確認済みですが、自宅や会社のネットワークに引っかかることがありますので、動作確認は非常に重要です。