gosoly

ゆっくりと趣味に浸る。

RaspbianでNeural Compute Stickの環境構築

DSCF1842

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

ソフト

  • Python 3.5.3
    • ラズパイデフォルト
  • TensorFlow 1.9.0
  • OpenCV 3.4.2
  • その他
    • SDKの自動インストールに準ずる

SDKのインストール

既存環境を上書きする可能性が大なので、NCS用にまっさらなmicroSDを用意してゼロから環境構築をすること推奨。
まだNSCはラズパイに刺さないでおk

好みの作業用ディレクトリを作成し移動

mkdir -p ~/Workspace
cd ~/Workspace

NSCSDKを取得し展開

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__)'

テストプログラムの実行

NSCSDK内にあるテスト用のサンプルプログラムの場所へ移動

cd ~/Workspace/ncsdk-1.12.00.01/examples/tensorflow/inception_v3

実行権限の付与

chmod +x run.py

NCSを接続してテストプログラムの実行
※未接続の場合はエラーが出て動かないだけです

./run.py

実行結果

f:id:ban367:20180813150811p:plain:w400

おわりに

動かすまでのセットアップがかなり短いのですが、一部の作業の待ち時間が長すぎて一度コケると再検証までが長いです…

ひとまずこれでテストプログラムの実行ができたので、先人のデモなどを動かしつつ、遊んでみたいと思います。

RaspberryPiのOSセットアップ(Mac用)

DSCF1796

MacにてラズパイのOS(Raspbian)をセットアップする備忘録。

Mac(Unix)用です。Winではコマンドがないのでツールのインストールが必要です。
→WSLでできるかも?

OSイメージのダウンロード

公式サイトよりダウンロード

www.raspberrypi.org

書き込み

マウントしているディスクドライブの確認
※おおよそ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を入れる

DSCF1844

pyenvを使ってPythonを構築している場合に、OpenCVを使えるようにする備忘録。

ビルド中がめちゃくちゃ時間かかるので寝る前にやっておいて起きて終わってるのを確認するのが吉。

ちなみにpyenv使わない場合はこちらの記事が一番簡単な導入方法だと思います。

qiita.com

事前準備

パッケージの更新

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の環境を作る

DSCF1813

Macばりのシェル環境をWindowsに求めWSLを使い始めたのですが、Vagrantはホスト側にいれると、WSL側からの操作ができないため、WSLでVagrantを動かす備忘録です。

WSLのインストールについては以下の記事がわかりやすいです。

qiita.com

やったこと

VirtualBoxWindowsにインストールし、VagrantはWSLにインストールし利用します。

全部WSL内でも良い気もしますが、WSLを吹き飛ばしたりする可能性を考慮し個人的にこの関係が良い気がします。
※VagrantfileなどもWSL内ではなく、参照しやすいWindows側に配置しているかと思うので…

ちなみにWSL側からWindowsを参照はOKですが、逆の参照はNGなのでお気をつけください。

環境

  • Windows 10
  • Ubuntu 18.04 LTS
    • 16.04でも同様の設定のはずです

VirtualBoxのインストール

公式よりDLしインストール

Oracle VM VirtualBox

懸念点としては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を動かせば回避できたので一旦それで

  1. コマンドプロンプトを起動(非管理者権限でおk)
  2. bashっと入力しEnter、これでWSL側にログインできます。
  3. この状態であれば任意の場所でvagrantを動かす。

以上でWSLからVagrantが動くようになります。

おわりに

Vagrant関係ないですが、WSLのおかげでGit for Windowsを入れずに、Gitをコマンドで使えるのがとてもありがたい…

Alexaを試す前に、Amazon Echoの下調べ

DSCF1817

ちょっと音声認識でお遊びするのに、どのEcho買えばいいのかを含めメモ

Amazon Echoの種類

日本販売は現状以下の3モデル(2018/06/06)

  • Echo Dot

    • Echoからスピーカー機能をダウングレードした小型モデル
    • スピーカーは外付け可能
    • アメリカでは一般的にこれが一番売れているらしい
  • Echo

    • 基本機能が網羅されているベーシックなモデル
    • 悩んだらコレ
  • Echo Plus

開発方法

Alexa | アレクサ| Amazon開発者ポータル

  • Alexa Skills Kit(ASK)

    • 基本コイツを使って開発
    • Alexaからの通信を捌き、プログラムを動かす感じ
  • Alexa Voice Service(AVS)

    • Alexa非対応のデバイスにてAlexaの音声機能を利用できる
    • Alexaを使えるようにするだけなので、最終的にはASKを利用する
    • ラズパイにて利用可
    • ちょっとだけ手間がかかる

その他

  • 基本無料で開発可能
  • AWS外にて開発ができるが、色々とめんどくさそうなのでAWS Lambda利用がベストバイ
    • lambdaは月100万件までは無料
    • 無料枠があるとはいえ従量課金制なので要注意

参考リンク

Macの開発環境にParallelsを使ってUbuntuを導入

DSCF1840

はじめに

好きに壊したりバックアップや引っ越しが容易な開発環境として無料で使えるGUIツールのParallels Desktopを使ってUbuntuの環境を整えてみました。
※使いまでの最低限の下準備までです。

整える時にUbuntuの初期設定とParallels特有の厄介事があったので、その備忘録…

ゆくゆくはWindowsのデスクトップをUbuntuにしようかと検討中。

Parallels Desktop

Ubuntuなので無料版のLightでもOK

インストール設定

  • OSのディスクイメージはDLしてきてインストール
    • 高速インストールだとユーザー名と言語設定等が勝手にされるのでイメージからのほうが○
  • Parallels Toolsのインストール
    • 自動でされるが、されない場合は手動にて
    • 要インストール

仮想環境の設定

  • スペック
    • 余裕があればメモリを増やす程度
  • TravelMode
    • バッテリー駆動時は有効
      • かなりバッテリーの消費が抑えられます

コンフィグ設定

cmdキーとWinキー(左上メニュー開くボタン)が重複してコピペが面倒なことになるので設定。
Macとコピペ方法はコンフィグが異なりますが、メニューの誤作動よりは良いと思います。

f:id:ban367:20180509224719p:plain:w300

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キーの場合はスクショのようにすると良いかも?
※全角半角キーのような扱いになります。

f:id:ban367:20180509224758p:plain:w300

パッケージの更新

各パッケージの更新。

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のパフォーマンスがかなりよく、仮想とはいえかなり軽い印象です。

つまるところ、GUI環境の出番が必要なことはほぼないと思いますので、Vagrantで十分かと思います。

Fluentdのpath指定

DSCF1762

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がおすすめ

DSCF1542

つい先日(2018/05/01)、Xmarksがサービスを終了した。
ずっとXmarksのお陰でPCを変えようと、ブラウザを変えようと、すべてのブックマークを同期してきたのに、できなくなってしまった…

そこでXmarksの代替に使えるサービスをいくつか試した後、Eversyncが違和感なく使え、できることにほぼ差し支えがなかったので紹介。

Eversyncとは

Everhelper - Eversync - Sync your bookmarks in Chrome, Firefox, Opera and mobile devices

以下のブラウザでブックマークを同期できるアプリケーション

有料アカウントもありますが、15000件以下のブックマーク数がなければ無料版で大丈夫です。
複数人で使ったり、相当なブックマーカーでなければ無料範囲で収まると思います。

Safariに対応できない点がXmarksと比べて残念な点ですが、ChromeFirefoxに使えるだけで十分です。

使い方

先程の公式リンクより、各ブラウザのボタンをクリックし、アドオンをインストールします。
インストール後は起動しアカウントを作成し、既存のブックマークをアップロードして完了です。

この状態で他ブラウザにもアドオンをインストールし、ブックマークのダウンロードを行えば、ブックマークの状態を同一にできます。

また、Xmarks同様にバックアップの日時ベースで確認が取れるので、間違えて上書きしたり、同期でおかしくなっても戻せると行った点が大きいです。

すべて英語なので、若干の慣れが必要ですが、基本的にUpload、Download、Sync、Backupあたりが読めれば問題ないと思いますので、すぐに慣れてくると思います。

この手のアプリは本当にありがたい…

ルーターの決定版?「Google Wifi」購入レビュー

DSCF1884

このパッケージ、Apple製品のような箱かと思ったら上蓋ぱっかーんです。

はじめに

4年間?ぐらいお世話になったルーターが何やら調子が悪い。。。
※使っていたのはASUS RT-AC56Sです。

Wifi速度は割とよかったのですが、有線の調子が悪くなってきた。
どうせ新しいルーターを買うなら、新しいモノと思いGoogle Wifiをポチッたのが発端。

有線の調子悪かったのに、無線オンリーのようなGoogleWifiを買ったことはノーツッコミで

設置と設定方法

めちゃくちゃ簡単で、セットアップ中の待ち時間を含めても、10分でおつりが来ます。

  1. 付属のUSB-CのACアダプタとWANを指して起動
  2. スマートフォンのアプリ(Android, iOS)をダウンロード
  3. アプリを起動
  4. アプリでルーターを自動的に認識しセットアップ開始
  5. 利用可能

淡々とアプリに従えばセットアップが終わります。
PCやルーターを設置した経験がない人でもらくらくです。

なにげに感動したのが、GoogleWifi本体裏のQRコード
アプリで初回認識時にQRコードで完結、ありがたい…

実測

  • プロバイダー
  • 契約プラン
    • 320M

測定はMacbookPro 2016にて無線接続。
測定にはGoogleの「インターネット速度テスト」で検索して出てくるテストを利用。

従来は下り54Mbps、上り2Mbps。
※スクショ忘れたままルーターしまってしまった!

そしてGoogleWifiの実力は…

f:id:ban367:20180505201627p:plain:w300

なにこれ、めちゃくちゃ速い!
っといううよりも以前のルーター遅すぎだったのか??

無線でこれだけ出てくれれば、接続機器すべて無線化しちゃったほうがいいかもしれないっと思い始めてきた…

見た目

DSCF1886

とてもコンパクト。
見た目が良すぎて逆に置き場に悩む…

このLED部分にピンクのシールを貼り、角でもつければ"シンマツナガ専用ザク"っぽくなりそうだな〜っと考えてたりしたり

最後に

電波強度も小型の筐体からは考えられないぐらいに強力で、壁を隔てて隣の部屋に行っても全く問題がないです。
※流石にどこまで届くかなどは家の環境によるとは思いますが…

遮蔽物が多すぎる家や、2階建てではない限りは複数台買ってメッシュネットワークを構築する必要がないと思います。
かといって1台自体の値が高いのがネックですが…

ルーターを買い換えようと検討しており、値段に多少目を瞑る事ができるなら!きっと損はしないと思います!

サーバーのアラートにBotkitを使う

f:id:ban367:20171211003241p:plain

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の設定へ移動

そのままbotユーザーを作成しAPIトークンをメモ

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チャンネルへ通知を行います。

かんたんに動作テスト。

f:id:ban367:20171210235535p:plain:w400

こんな感じで80%を超えると動作するたびにマッスルマッスル言い出します。

クーロンでシェルスクリプトを回しているだけですので、コピペしていただければ色んなパターンをそのまま増やせると思います。

まとめ

Botkitを使うと、結構かんたんにボットが作れる(小並感)
以前はHubotも使ってみたが、個人的にはBotkitの方に一票を入れたい。

また自動起動とかの設定はしていないので、本格的に監視を行う際にはforeverあたりで設定を作ってあげると、もっと幸せになれます。

以上で11日目の記事とさせていただきます。
お次は、@FITNCCさんです。よろしくお願いします!

P.S.
長いコード貼り付ける際にはGitHubのGist便利ですね(笑)