RaspberryPI3の環境構築メモ

# はじめに
Raspberry PIで工作をする上で必要な作業をまとめてインストールする作業のメモ．
「[みんなのラズパイコンテスト2017](http://coin.nikkeibp.co.jp/coin/itpro-s/seminar/LIN/abstract/)」に向けて，いろいろと作業をおこなっているが，自分の実力不足かいろいろなところでコケる．
もうすでに5回目の再インストールに入ろうとしている．
もう何度も同じ作業をやる前にバックアップ取っとけよ，とかいろいろあるとは思うが今後も新たに環境構築を行うこともあるだろうからここにメモしておく．

他の方も少しでも参考になれば幸いです．

## 構築予定の環境
- Raspberry PI3 with Jessie
- OpenCV 3.2
- Blynk
- Adafruit WS2812
- FaceTracker

### 今回のトラブル

特に今回はI2Cが認識しなくなった．デバイスが壊れているのかと思い，PCA9685，RaspberryPI3ともに買いなおしたが変化なし．
新たにインストールし直したSDカードで起動＋確認したら認識したのでHWのトラブルではなかった．
金損した．．．orz

そこで，今回再インストール作業に伴い，行った作業を列挙していくことにした．途中で適時バックアップにimgファイルを作成する予定．

# OSインストール
この作業はすでに終わっているので，後で書きます．

## インストール直後の環境構築
[RaspberryPi3を買ってSSHして電源を切るまで](http://qiita.com/B73W56H84/items/f84763e9e5f9d3b21f7d)や
 [ここ](https://github.com/Tes3awy/OpenCV-3.2.0-Compiling-on-Raspberry-Pi) を参考に

``` terminal
sudo apt-get update
sudo apt-get upgrade
sudo rpi-update
sudo reboot now
```
### VNC構築
OpenCVを使う場合，デフォルトのVNC接続でつなげるとOpenCVの画像がフレームバッファに直接描画されるようでHDMIの画面からしか見ることができません．
そこで，[VNCでRaspberry Piを別のPCから操作しよう](http://marupeke296.com/IKDADV_PI_VNC.html)あたりを参考にx11vncを導入します．

```
sudo apt-get install x11vnc
sudo x11vnc -storepasswd
```
これでVNC接続するときのパスワードを設定します．
さらに起動時に自動で立ち上がるように

```
cd ~/.config
mkdir autostart　※autostartディレクトリが存在していれば不要
cd autostart
nano x11vnc.desktop
```
x11vnc.desktopの内容は

```x11vnc.desktop
[Desktop Entry]
Type=Application
Name=x11vnc
Exec=x11vnc -usepw -forever
Terminal=false
```

こんな感じ
起動しているか，の確認には


```
ps aux | grep x11vnc
```
これでできる．

### ファイル共有
windowsのファイルシステムと共有するためにSambaを導入．

```
sudo apt-get install samba
sudo apt-get install chkconfig
```
smb.confの設定

```smb.conf
sudo nano /etc/samba/smb.conf


[pi]
path = /home/pi
read only = No
guest ok = Yes
force user = pi
```
我が家にはMacもあるので、そちらも設定

```
sudo apt-get install netatalk

```


### I2C周り
参考
- [Raspberry Pi でI2C: 温度センサーを使う](http://d.hatena.ne.jp/penkoba/20131215/1387119945)
- [最近の Raspberry Pi で I2C を有効化](http://rabbit-note.com/2015/02/08/raspberry-pi-i2c-activation/)
- [Raspberry Pi/i2cの有効化 - Berry Pie Lab](http://www.angelcurio.com/raspberrypi/index.php?Raspberry%20Pi%2Fi2c%E3%81%AE%E6%9C%89%E5%8A%B9%E5%8C%96)


```
sudo nano /etc/modprobe.d/raspi-blacklist.conf
sudo modprobe i2c-dev

sudo apt-get install i2c-tools
```
ブラックリストをチェックしても何もなかったので，そのままインストール続行．


## OpenCVインストール
### ビルド用事前インストール関連
今回はC++で作業を進めるが，今後のことも考えてPython環境も整えておく．

```
sudo apt-get install build-essential cmake pkg-config
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
sudo apt-get install libgtk2.0-dev libgstreamer0.10-0-dbg libgstreamer0.10-0 libgstreamer0.10-dev libv4l-0 libv4l-dev

sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev

sudo apt-get install libatlas-base-dev gfortran
sudo apt-get install python-numpy python-scipy python-matplotlib
sudo apt-get install default-jdk ant
sudo apt-get install libgtkglext1-dev
sudo apt-get install v4l-utils
```
pip のインストール
ライブラリ用のディレクトリ「lib」以下に格納

```
mkdir ~/lib
cd ~/lib
wget https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py
```
OpenCV3.2のインストール

```
wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.2.0.zip
unzip opencv.zip

wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.2.0.zip
unzip opencv_contrib.zip
```
そしてコンパイル

```
cd ~/opencv-3.2.0/
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
	-D CMAKE_INSTALL_PREFIX=/usr/local \
	-D INSTALL_C_EXAMPLES=OFF \
	-D INSTALL_PYTHON_EXAMPLES=ON \
	-D OPENCV_EXTRA_MODULES_PATH=~/lib/opencv_contrib-3.2.0/modules \
	-D BUILD_EXAMPLES=ON \
	-D ENABLE_NEON=ON ..

sudo make -j3

sudo make install
sudo ldconfig


sudo nano /etc/bash.bashrc
sudo nano /etc/ld.so.conf.d/opencv.conf
```

```/etc/ld.so.conf.d/opencv.conf
/usr/local/lib          # enter this in opencv.conf, NOT at the command line (leave a blank line at the end of opencv.conf)
```

```/etc/bash.bashrc
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig       
export PKG_CONFIG_PATH
```
そして再起動．


# BLYNK

参考にしたのは
[第1回 IoTサービス「Blynk」を導入しよう - 連載 IoTサービス「Blynk」を使ってRaspberry Piをスマホからコントロールしよう](http://blog.livedoor.jp/victory7com/archives/48316461.html)
このサイト．

### インストール

```
mkdir blynk
cd blynk
git clone https://github.com/blynkkk/blynk-library.git
cd blynk-library/linux
make clean all target=raspberry
```

起動時にBlynkが立ち上がるようにblynk.desktopを作成


```
cd ~/.config/autostart
nano blynk.desktop
```
blynk.desktopの内容は

```blynk.desktop
[Desktop Entry]
Type=Application
Name=blynk
Exec=sudo blynk --token=BLYNK_TOKEN
Terminal=false
```

`BLYNK_TOKEN` にはBlynkで設定したTokenを入力．

C++で扱うためには，
[Using C++ on a Raspberry Pi with Blynk](https://community.blynk.cc/t/using-c-on-a-raspberry-pi-with-blynk/11864)
このあたりが参考になります．

BlynkをPythonで扱うこともできるようです
- [[SOLVED]How to use python with blynk?](https://community.blynk.cc/t/solved-how-to-use-python-with-blynk/9508)
- [Github](https://github.com/xandr2/blynkapi)
- [Blynk API](http://docs.blynkapi.apiary.io/#reference/0/get-pin-value)

### ローカルサーバー
Blynkを


# ここまでをバックアップ
[Windows で Raspberry Pi のバックアップを取る方法](http://www.moonmile.net/blog/archives/6878)
あたりが参考になります．

今回はwindowsでバックアップを取るので，[Win32 Disk Imager](http://sourceforge.jp/projects/sfnet_win32diskimager/)を使います．





# 再開
## Adafruit WS2812環境
WS2812とは，マイコンチップを内蔵して3本の信号線で多数のフルカラーLEDを同時にコントロールできるLEDです．

参考
- [[Tutorial] Connect a Raspberry Pi to a RGB LED/WS2812-Strip](https://www.raspberrypi.org/forums/viewtopic.php?f=44&t=85536)

### C++で動かす
- [Neopixel on Raspi 3](https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=151460)

```
git clone https://github.com/jazzycamel/ws28128-rpi

```

### Pythonで動かす
- [Raspberry Pi & RGB LED-Strips](http://dordnung.de/raspberrypi-ledstrip/)
- [Raspberry Pi で NeoPixel のLEDを光らせる](https://www.ningendesu.net/blog/entry/633)

```
git clone https://github.com/jgarff/rpi_ws281x

```



# Face Tracker

### FaceTracker
- [DERiVE コンピュータビジョン ブログ](http://derivecv.tumblr.com/post/49555836875)
- [Github](https://github.com/kylemcdonald/FaceTracker)

```
git clone https://github.com/kylemcdonald/FaceTracker

cd ~/git/FaceTracker
make target=raspberry
```
これでコンパイルできるはずです．


### face-alignment-at-3000fps
このあたりが参考になります．
- [関東CV勉強会20140802（Face Alignment at 3000fps）](https://www.slideshare.net/tackson5/cv20140802face-alignment-at-3000fps)
- [Github](https://github.com/freesouls/face-alignment-at-3000fps)

ただし，このface-alignment-at-3000fps は動画に対応していないのでひとまずpending．