RaspbianでNeural Compute Stickの環境構築
Neural Compute Stick(NCS)をラズパイで試そうとした時にSDKの導入につまずいたので、その構築の備忘録。
SDKを試すために幾度となくmicroSDをフォーマットしてやり直してるので、これで大丈夫なはず…
環境
ハード
- Raspberry Pi 3 Medel B
- 2018-06-27-raspbian-stretch.img
- ACアダプタ
- 5V、3Aの物を推奨、2.5Aだと電圧低下のアラートが出ます
- microSD 32GB
- 極稀に相性があるらしい
- Movidius Neural Compute Stick
- SDK: ncsdk-1.12.00.01
ソフト
SDKのインストール
既存環境を上書きする可能性が大なので、NCS用にまっさらなmicroSDを用意してゼロから環境構築をすること推奨。
まだNSCはラズパイに刺さないでおk
好みの作業用ディレクトリを作成し移動
mkdir -p ~/Workspace cd ~/Workspace
wget https://ncs-forum-uploads.s3.amazonaws.com/ncsdk/ncsdk-01_12_00_01-full/ncsdk-1.12.00.01.tar.gz tar xvf ncsdk-1.12.00.01.tar.gz
展開されたディレクトリに移動
cd ncsdk-1.12.00.01
SDKのインストール(2時間以上を目安)
※ヒートシンクつけたラズパイでもコアの温度が80度を超え、処理速度が低下しますので、ファンで冷やすのが吉
make install
ターミナル、またはラズパイを再起動
TensorFlowのインストール
現在だとpipから1.9.0がインストールできるようです
※こけても再度インストールを試すとうまくいく
pip3 install tensorflow
OpenCVのインストール
ビルド済みのものをインストール
wget https://github.com/mt08xx/files/raw/master/opencv-rpi/libopencv3_3.4.2-20180709.1_armhf.deb sudo apt install -y ./libopencv3_3.4.2-20180709.1_armhf.deb
再読込
sudo ldconfig
確認
python3 -c 'import cv2; print(cv2.__version__)'
テストプログラムの実行
NSCのSDK内にあるテスト用のサンプルプログラムの場所へ移動
cd ~/Workspace/ncsdk-1.12.00.01/examples/tensorflow/inception_v3
実行権限の付与
chmod +x run.py
NCSを接続してテストプログラムの実行
※未接続の場合はエラーが出て動かないだけです
./run.py
実行結果
おわりに
動かすまでのセットアップがかなり短いのですが、一部の作業の待ち時間が長すぎて一度コケると再検証までが長いです…
ひとまずこれでテストプログラムの実行ができたので、先人のデモなどを動かしつつ、遊んでみたいと思います。
RaspberryPiのOSセットアップ(Mac用)
MacにてラズパイのOS(Raspbian)をセットアップする備忘録。
Mac(Unix)用です。Winではコマンドがないのでツールのインストールが必要です。
→WSLでできるかも?
OSイメージのダウンロード
公式サイトよりダウンロード
書き込み
マウントしているディスクドライブの確認
※おおよそdisk2にmicroSDがマウントされるため、disk2としてコマンドを記述
diskutil list
フォーマット
※RPIの部分は任意の名前
diskutil eraseDisk FAT32 RPI /dev/disk2
ディスクのアンマウント
※何故か一発でアンマウントできないときが多いので、2回ぐらいやると吉
diskutil unmountDisk /dev/disk2
ディスクの書き込み
※時間がかかります、作業中確認ができないのでじっと待つ(10分程度)
sudo dd bs=1m if=2018-06-27-raspbian-stretch.img of=/dev/rdisk2
※if=2018-06-27-raspbian-stretch.img
ここの部分はDLしてきたディスクイメージに応じて要変更
書き込み後は再度アンマウントを行い終了
初回起動
Raspbian(2018-06-27)以降より、初回起動時に言語設定等が自動的に表示されるようです。
以前は起動後に設定を変える必要がありましたが、現在では起動後にダイアログに従えば特に苦労することなく初期設定まで完了です。
※初回アップデートは結構時間かかります
RaspberryPiのpyenv環境にOpenCVを入れる
pyenvを使ってPythonを構築している場合に、OpenCVを使えるようにする備忘録。
ビルド中がめちゃくちゃ時間かかるので寝る前にやっておいて起きて終わってるのを確認するのが吉。
ちなみにpyenv使わない場合はこちらの記事が一番簡単な導入方法だと思います。
事前準備
パッケージの更新
sudo apt update && sudo apt upgrade -y
必需品のインストール
sudo apt-get install -y build-essential cmake pkg-config sudo apt-get install -y libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev sudo apt-get install -y libavcodec-dev libavformat-dev libswscale-dev libv4l-dev sudo apt-get install -y libxvidcore-dev libx264-dev sudo apt-get install -y libgtk2.0-dev libgtk-3-dev sudo apt-get install -y libcanberra-gtk* sudo apt-get install -y libatlas-base-dev gfortran sudo apt-get install -y python2.7-dev python3-dev sudo apt-get install -y git openssl libssl-dev libbz2-dev libreadline-dev libsqlite3-dev
Vimの設定
入れなくても良いですが、ラズパイの初期設定だと矢印キーやBackspaceキーが利かないので、せめてそれだけでもやっておいたほうが幸せ。
後述ではvi
を使ってますがお好みで
Vimのインストール
sudo apt install vim
設定ファイルを作成
vi ~/.vimrc
下記を記入して保存
set encoding=utf-8 set nocompatible set backspace=indent,eol,start set autoindent set nowrap set ruler set number syntax on
Swap領域の変更
重い処理なので最低でも1GB程度は設定しておいたほうがいい
設定ファイルを編集
sudo vi /etc/dphys-swapfile
2GBに設定を変更(初期値は100と記述されている)
CONF_SWAPSIZE=2048
再起動して読み込み
sudo systemctl stop dphys-swapfile sudo systemctl start dphys-swapfile
適応されているか確認
free -h
python構築
pyenvをインストール
git clone git://github.com/yyuu/pyenv.git ~/.pyenv
PATHの設定
vi .bashrc
末尾あたりに追記
export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)"
再読込
source .bashrc
pythonのインストール
pyenv install 3.6.6 pyenv global 3.6.6
pipの更新
pip install --upgrade pip
OpenCV構築
OpenCVの本体の取得と展開
wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.1.0.zip unzip opencv.zip wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.1.0.zip unzip opencv_contrib.zip
作業するためディレクトリ移動
cd opencv-3.1.0
ビルド用のディレクトリの作成し移動
mkdir build cd build
ビルド設定
cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=~/.pyenv/versions/3.6.6 \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv/opencv_contrib-3.1.0/modules \ \ -D ENABLE_NEON=ON \ -D ENABLE_VFPV3=ON \ -D ENABLE_PRECOMPILED_HEADERS=OFF \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D BUILD_EXAMPLES=OFF \ -D INSTALL_C_EXAMPLES=OFF \ -D BUILD_NEW_PYTHON_SUPPORT=ON \ -D BUILD_opencv_python3=ON \ -D BUILD_opencv_legacy=OFF \ -D PYTHON_EXECUTABLE=~/.pyenv/versions/3.6.6/bin/python \ -D PYTHON_LIBRARY=~/.pyenv/versions/3.6.6/lib/libpython3.6m.a \ -D PYTHON_INCLUDE_DIR=~/.pyenv/versions/3.6.6/include/python3.6m \ -D PYTHON_INCLUDE_DIRS=~/.pyenv/versions/3.6.6/include/python3.6m \ -D PYTHON_INCLUDE_DIRS2=~/.pyenv/versions/3.6.6/include/python3.6m \ -D INCLUDE_DIRS=~/.pyenv/versions/3.6.6/include/python3.6m \ -D INCLUDE_DIRS2=~/.pyenv/versions/3.6.6/include/python3.6m \ -D PYTHON_PACKAGES_PATH=~/.pyenv/versions/3.6.6/lib/python3.6/site-packages \ -D PYTHON_NUMPY_INCLUDE_DIR=~/.pyenv/versions/3.6.6/lib/python3.6/site-packages/numpy/core/include ..
ビルド開始(2時間以上かかる)
make -j4
インストール
sudo make install
再読込
sudo ldconfig
確認
python -m 'import cv2; print(cv2.__version__)'
おわりに
pyenvを使うと便利にPythonのバージョンを管理できますが、こういった時に厄介なもんです。
おそらく普通にpipからインストールしてしまい、pyenv側にシンボリックリンクを作るなどでも動くんじゃないかとは思います。
また、pyenvのバージョンの中にインストールされますので、pythonのバージョンを変えると再度入れ直さないといけないので要注意です。
Windows Subsystem for Linux(WSL)でVagrantの環境を作る
Macばりのシェル環境をWindowsに求めWSLを使い始めたのですが、Vagrantはホスト側にいれると、WSL側からの操作ができないため、WSLでVagrantを動かす備忘録です。
WSLのインストールについては以下の記事がわかりやすいです。
やったこと
- VirtualBox → Windows
- Vagrant → WSL
VirtualBoxはWindowsにインストールし、VagrantはWSLにインストールし利用します。
全部WSL内でも良い気もしますが、WSLを吹き飛ばしたりする可能性を考慮し個人的にこの関係が良い気がします。
※VagrantfileなどもWSL内ではなく、参照しやすいWindows側に配置しているかと思うので…
ちなみにWSL側からWindowsを参照はOKですが、逆の参照はNGなのでお気をつけください。
環境
VirtualBoxのインストール
公式よりDLしインストール
懸念点としてはVagrantのリリースバージョンよりも明らかに古いバージョンを入れるのが吉です。
※Vagrant側で最新のVirtualBoxに対応できていない可能性があるため
Vagrantのインストール
aptからでもインストールできますが、若干バージョンが古かったので公式から落とすのが良さそうです。
公式よりDebian(64-bit)のパッケージを任意の場所にDL
Download - Vagrant by HashiCorp
WSLを立ち上げ、パッケージを配置した場所へ移動
cd /mnt/c/Users/<ユーザー名>/Desktop/<DLしてきたパッケージ>
インストール
sudo dpkg -i ./vagrant_*_x86_64.deb
PATHを編集
vi /home/<ユーザー名>/.bashrc
最下部あたりに以下を追記
PATH=$PATH:"/mnt/c/Program Files/Oracle/VirtualBox" export VAGRANT_WSL_ENABLE_WINDOWS_ACCESS="1"
また、WSLとWindows側でユーザー名が異なる場合は以下も追記
export VAGRANT_WSL_WINDOWS_ACCESS_USER=<Windowsのユーザー名>
Vagrantの実行
インストールも終わったし、そのまま動くと思いきやcmd.exe
がない的なことを言われます。
おそらくPATHを通せばいける気がするのですが、コマンドプロンプトからWSLを動かせば回避できたので一旦それで
以上でWSLからVagrantが動くようになります。
おわりに
Vagrant関係ないですが、WSLのおかげでGit for Windowsを入れずに、Gitをコマンドで使えるのがとてもありがたい…
Alexaを試す前に、Amazon Echoの下調べ
ちょっと音声認識でお遊びするのに、どのEcho買えばいいのかを含めメモ
Amazon Echoの種類
日本販売は現状以下の3モデル(2018/06/06)
Echo Dot
- Echoからスピーカー機能をダウングレードした小型モデル
- スピーカーは外付け可能
- アメリカでは一般的にこれが一番売れているらしい
Echo
- 基本機能が網羅されているベーシックなモデル
- 悩んだらコレ
Echo Plus
- Echoの機能にスマートホームハブ機能が搭載されたモデル
開発方法
Alexa Skills Kit(ASK)
- 基本コイツを使って開発
- Alexaからの通信を捌き、プログラムを動かす感じ
Alexa Voice Service(AVS)
- Alexa非対応のデバイスにてAlexaの音声機能を利用できる
- Alexaを使えるようにするだけなので、最終的にはASKを利用する
- ラズパイにて利用可
- ちょっとだけ手間がかかる
その他
参考リンク
Alexa Skill Testing Tool - Echosim.io
- Alexa実機の代わり
オンラインセミナー「Alexa道場」 | Amazon Alexa | アレクサ
- 公式のセミナー動画
- Lambda + Node.jsのスキル作成動画あり
Macの開発環境にParallelsを使ってUbuntuを導入
はじめに
好きに壊したりバックアップや引っ越しが容易な開発環境として無料で使えるGUIツールのParallels Desktopを使ってUbuntuの環境を整えてみました。
※使いまでの最低限の下準備までです。
整える時にUbuntuの初期設定とParallels特有の厄介事があったので、その備忘録…
ゆくゆくはWindowsのデスクトップをUbuntuにしようかと検討中。
Parallels Desktop
Ubuntuなので無料版のLightでもOK
インストール設定
- OSのディスクイメージはDLしてきてインストール
- 高速インストールだとユーザー名と言語設定等が勝手にされるのでイメージからのほうが○
- Parallels Toolsのインストール
- 自動でされるが、されない場合は手動にて
- 要インストール
仮想環境の設定
- スペック
- 余裕があればメモリを増やす程度
- TravelMode
- バッテリー駆動時は有効
- かなりバッテリーの消費が抑えられます
- バッテリー駆動時は有効
コンフィグ設定
cmdキーとWinキー(左上メニュー開くボタン)が重複してコピペが面倒なことになるので設定。
※Macとコピペ方法はコンフィグが異なりますが、メニューの誤作動よりは良いと思います。
Ubuntu環境
システム設定
- 言語サポート
- 日本語
- 時刻と日付
- TimeZoneを東京
- 24時間
- 画面の明るさとロック
- ロックは外したほうが幸せ
- ユーザーアカウント
- 自動ログイン設定
- キーボード(リピートキー)
- 速度:最速
- 間隔はMacの設定と違い、上げるとめちゃくちゃ速いので好みで
viの設定
viは使わねぇ!っと思う方はスキップ。
初期状態だと、Backspaceと矢印操作が動かないので、動くように設定を追加。
vi ~/.vimrc
以下の設定を入力し保存
set nocompatible set backspace=indent,eol,start
ディレクトリの英語化
LANG=C xdg-user-dirs-update --force
上記のコマンド実行後に以下のファイルが更新されるが、もう一手間必要
~/.config/user-dirs.dirs
Parallelsを用いている場合は、このファイルがParallelsによって管理されており、書き換えても戻されてしまう。
※これに気づくまでだいぶ時間がかかった…
そのため、管理されている方も書き換える。
~/.parallels/user-dirs.dirs.orig
コピーするなり、シンボリックリンクを増やすなりでこちらの設定ファイルを更新後に再ログインにて確認
入力メソッドの設定
JISキーの場合はスクショのようにすると良いかも?
※全角半角キーのような扱いになります。
パッケージの更新
各パッケージの更新。
sudo apt-get update sudo apt-get upgrade sudo apt-get dist-upgrade sudo apt autoremove
多分updateでコケると思うので、メモ
E: Problem executing scripts エラーの解決 http://sekisuiseien.com/computer/10530/
おわりに
普通にUbuntuを使うとしたら最低限の設定としてはこのぐらいかな?っというまとめになりました。
Parallelsのパフォーマンスがかなりよく、仮想とはいえかなり軽い印象です。
Fluentdのpath指定
Fluentdの設定でMac(またはCentos)で設定し、試した後にWindowsにて使おうとしたら、path設定が異なるようで動かなかったので備忘録。
設定ファイル
さくっと試すようにログからログに書き出す設定。
Unix
<source> type tail format json path /Users/USERNAME/Workspace/hoge.log tag td.json.log </source> <match td.json.**> type file path /Users/USERNAME/Workspace/hoge2.log </match>
Windows
<source> type tail format json path C:/Users/USERNAME/Workspace/hoge.log tag td.json.log </source> <match td.json.**> type file path C:/Users/USERNAME/Workspace/hoge2.log </match>
絶対パスの設定はバックスラッシュや円マークではなく、C:/
で指定するようです。
他の設定は同様で問題ないようです。
ブラウザ間のブックマーク同期にEversyncがおすすめ
つい先日(2018/05/01)、Xmarksがサービスを終了した。
ずっとXmarksのお陰でPCを変えようと、ブラウザを変えようと、すべてのブックマークを同期してきたのに、できなくなってしまった…
そこでXmarksの代替に使えるサービスをいくつか試した後、Eversyncが違和感なく使え、できることにほぼ差し支えがなかったので紹介。
Eversyncとは
Everhelper - Eversync - Sync your bookmarks in Chrome, Firefox, Opera and mobile devices
以下のブラウザでブックマークを同期できるアプリケーション
有料アカウントもありますが、15000件以下のブックマーク数がなければ無料版で大丈夫です。
複数人で使ったり、相当なブックマーカーでなければ無料範囲で収まると思います。
Safariに対応できない点がXmarksと比べて残念な点ですが、ChromeとFirefoxに使えるだけで十分です。
使い方
先程の公式リンクより、各ブラウザのボタンをクリックし、アドオンをインストールします。
インストール後は起動しアカウントを作成し、既存のブックマークをアップロードして完了です。
この状態で他ブラウザにもアドオンをインストールし、ブックマークのダウンロードを行えば、ブックマークの状態を同一にできます。
また、Xmarks同様にバックアップの日時ベースで確認が取れるので、間違えて上書きしたり、同期でおかしくなっても戻せると行った点が大きいです。
すべて英語なので、若干の慣れが必要ですが、基本的にUpload、Download、Sync、Backupあたりが読めれば問題ないと思いますので、すぐに慣れてくると思います。
この手のアプリは本当にありがたい…
ルーターの決定版?「Google Wifi」購入レビュー
このパッケージ、Apple製品のような箱かと思ったら上蓋ぱっかーんです。
はじめに
4年間?ぐらいお世話になったルーターが何やら調子が悪い。。。
※使っていたのはASUS RT-AC56Sです。
Wifi速度は割とよかったのですが、有線の調子が悪くなってきた。
どうせ新しいルーターを買うなら、新しいモノと思いGoogle Wifiをポチッたのが発端。
有線の調子悪かったのに、無線オンリーのようなGoogleWifiを買ったことはノーツッコミで
設置と設定方法
めちゃくちゃ簡単で、セットアップ中の待ち時間を含めても、10分でおつりが来ます。
淡々とアプリに従えばセットアップが終わります。
PCやルーターを設置した経験がない人でもらくらくです。
なにげに感動したのが、GoogleWifi本体裏のQRコード。
アプリで初回認識時にQRコードで完結、ありがたい…
実測
- プロバイダー
- 契約プラン
- 320M
測定はMacbookPro 2016にて無線接続。
測定にはGoogleの「インターネット速度テスト」で検索して出てくるテストを利用。
従来は下り54Mbps、上り2Mbps。
※スクショ忘れたままルーターしまってしまった!
そしてGoogleWifiの実力は…
なにこれ、めちゃくちゃ速い!
っといううよりも以前のルーター遅すぎだったのか??
無線でこれだけ出てくれれば、接続機器すべて無線化しちゃったほうがいいかもしれないっと思い始めてきた…
見た目
とてもコンパクト。
見た目が良すぎて逆に置き場に悩む…
このLED部分にピンクのシールを貼り、角でもつければ"シンマツナガ専用ザク"っぽくなりそうだな〜っと考えてたりしたり
最後に
電波強度も小型の筐体からは考えられないぐらいに強力で、壁を隔てて隣の部屋に行っても全く問題がないです。
※流石にどこまで届くかなどは家の環境によるとは思いますが…
遮蔽物が多すぎる家や、2階建てではない限りは複数台買ってメッシュネットワークを構築する必要がないと思います。
かといって1台自体の値が高いのがネックですが…
ルーターを買い換えようと検討しており、値段に多少目を瞑る事ができるなら!きっと損はしないと思います!
サーバーのアラートにBotkitを使う
CloudGarage Advent Calendar 2017 11日目です。
はじめに
CloudGarageにはモニタリング機能ないなぁ〜っと思ったので、Botkitを導入し有事の際はSlackに流してもらおうっという内容です。
今回はディスク容量のチェックを行います。
※個人的にawkコマンドの復習を兼ねてます。
やってることはシェルで監視して条件に引っかかった時にslackに飛ばしているだけです。
サーバー設定
- Ubuntu-16.04-64bit
- ポート:全開放
面倒なので、ひとまずポートは全開放。
下ごしらえ
apt-get update apt-get upgrade
とりあえず更新。
SlackへBotユーザーの追加
チーム名を置き換えて以下のURLへアクセス
https://<チーム名>.slack.com/apps
検索エリアにBots
っと入力しBotsの設定へ移動
Node.js、npmのインストール
デフォルトのバージョンが古いので新しいバージョンの取得
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
nodeのインストール
apt-get install -y nodejs
npmのインストール
apt-get install -y npm
npmの更新
npm update -g npm
Botkitのインストール
インストール用に適当なディレクトリを作成して移動
mkdir ~/slackbot;cd $_
インストール
npm init -y npm install botkit --save
プログラム設置
ボットのプログラム(index.js)を設置 下記に本題のプログラムを紹介
起動
token=<slackのAPIトークン> node index.js
ディスク容量の通知
監視用にcronのnpmをインストール
npm install --save botkit cron
以下のプロウラムを先程のindex.js
として保存し実行
プログラム内容
5分ごとにディスクの容量を確認し、使用率80%を超えている際にbot-test
チャンネルへ通知を行います。
かんたんに動作テスト。
こんな感じで80%を超えると動作するたびにマッスルマッスル言い出します。
クーロンでシェルスクリプトを回しているだけですので、コピペしていただければ色んなパターンをそのまま増やせると思います。
まとめ
Botkitを使うと、結構かんたんにボットが作れる(小並感)
以前はHubotも使ってみたが、個人的にはBotkitの方に一票を入れたい。
また自動起動とかの設定はしていないので、本格的に監視を行う際にはforeverあたりで設定を作ってあげると、もっと幸せになれます。
以上で11日目の記事とさせていただきます。
お次は、@FITNCCさんです。よろしくお願いします!
P.S.
長いコード貼り付ける際にはGitHubのGist便利ですね(笑)