Raspberry Pi Zero + Ruby + OpenCV 環境構築

RaspberryPi環境でRuby+OpenCVで画像処理をやろうとして、環境構築（主にOpenCVのビルド）で苦労したので、メモとして残します。
需要はほぼないのではと思いますが。。。

# Raspberry Piの初期設定
ザックリですが、以下のあたりを設定しました。

- 解像度
- WiFi
- 地域・タイムゾーン
- キーボード
  - Generic　105-key PC (Intl.)
  - Other
  - Japanese
  - Japanese - Japanese(OADG 109A)
  - The default for the keyboard layout
  - No compose key

その後、rebootして、

```shell
> sudo apt-get update
> sudo apt-get upgrade
```

# Rubyのインストール
ruby-opencvは、対応がRuby2系のため、Ruby2.7.2をインストールしました。
インストール手順は、[今更ですが、RaspberryPi に Ruby をインストールして Lチカ してみる。](https://qiita.com/ysomei/items/b287a328918c08164c4e) を参考にしました。

まずはrbenvのインストール。

```shell
> sudo apt-get install git

> git clone git://github.com/sstephenson/rbenv.git .rbenv

> echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
> echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

> cd .rbenv
> mkdir plugins
> cd plugins
> git clone git://github.com/sstephenson/ruby-build.git

> cd ~
> source .bash_profile

> rbenv --version

> sudo apt-get install autoconf
> sudo apt-get install libssl-dev libyaml-dev
> sudo apt-get install bison build-essential
> sudo apt-get install libreadline6-dev
> sudo apt-get install libncurses5-dev
```

そしてRubyのインストール。

```shell
> rbenv install 2.7.2
```

（・・・ココで約3時間？・・・）

```shell
> rbenv rehash
> rbenv global 2.7.2
> ruby -v
```

最後のバージョン確認で、バージョンが表示されたらOK。

# OpenCVのインストール

OpenCVもruby-opencvの対応が2系です。
OpenCV 2.4.13をインストールします。
まずは必要なライブラリをインストール。
いろんなサイトを見ながらインストールを進めたので、不要なものが入っているかもしれません。

```shell
# 開発ツール
> sudo apt-get install build-essential
> sudo apt-get install cmake
# 行列演算
> sudo apt-get install libeigen3-dev
# GUIフレームワーク関連
> sudo apt-get install libgtk-3-dev
# 並列処理関連
> sudo apt-get install libtbb-dev
# 画像フォーマット関連
> sudo apt-get install libjpeg-dev
> sudo apt-get install libopenjp2-7-dev
> sudo apt-get install libpng++-dev
> sudo apt-get install libtiff-dev
# その他
> sudo apt-get install libhdf5-dev
> sudo apt-get install libv4l-dev
> sudo apt-get install libavformat-dev
```

作業用のディレクトリを作って、OpenCVのソースコードをダウンロードします。

```shell
> mkdir work
> cd work

> sudo git clone https://github.com/opencv/opencv.git
> cd opencv
> sudo git checkout 2.4.13
> sudo git ckeckout -b 2.4.13

# （buildディレクトリを作成してその中でビルドするのがお作法とのことなので。）
> sudo mkdir build
> cd build
```

ビルドのときに怒られたので、PythonとJavaのモジュールをインストールします。
（使わないので入れなくないなぁと思っていたんですが。。。）
それぞれ下記のサイトを参考にインストールしました。
Python： [Install OpenCV and Python on your Raspberry Pi 2 and B+](https://www.pyimagesearch.com/2015/02/23/install-opencv-and-python-on-your-raspberry-pi-2-and-b/) 
Java： [CMake could not find JNI](https://stackoverflow.com/questions/51047978/cmake-could-not-find-jni/56132225)

```shell
> sudo apt-get install python2.7-dev
> wget https://bootstrap.pypa.io/pip/2.7/get-pip.py
> python get-pip.py
> pip install numpy

> sudo apt-get install -y openjdk-8-jdk
> sudo apt-get install -y default-jdk
> export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
```

あと、ビルドでエラーになっちゃうのでmakeファイルの修正。
こちら（[Can't install opencv 2.4.9 on Ubuntu 18.04, get CXXCompiler error](https://askubuntu.com/questions/1188249/cant-install-opencv-2-4-9-on-ubuntu-18-04-get-cxxcompiler-error) ）を参考に。
「 `changing -dumpversion to -dumpfullversion` 」とあったので

```shell
> vi ../cmake/OpenCVDetectCXXCompiler.cmake
```

```diff
-   execute_process(COMMAND ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} -dumpversion
+   execute_process(COMMAND ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} -dumpfullversion
```

これでやっと準備完了。ビルドに取り掛かります。
基本的にはOpenCV公式ページを参考に。
エラー対応のため、「 `-D ENABLE_PRECOMPILED_HEADERS=OFF` 」を追加しています。
参考： [Error compiling OpenCV, fatal error: stdlib.h: No such file or directory](https://stackoverflow.com/questions/40262928/error-compiling-opencv-fatal-error-stdlib-h-no-such-file-or-directory)

```shell
> sudo cmake \
-D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_V4L=ON \
-D WITH_FFMPEG=ON \
-D BUILD_EXAMPLES=OFF \
-D INSTALL_C_EXAMPLES=OFF \
-D WITH_GSTREAMER=OFF \
-D ENABLE_PRECOMPILED_HEADERS=OFF \
..
```

（ここがまた長く、数時間でも終わらず放置して寝ました。正確に何時間かかったかわかりません。）

```shell
> sudo make

> sudo make install
```

makeでめっちゃWARNINGが出ました。
が、WARNINGなのでスルーしました！！

# ruby-opencvのインストール
[公式サイト](https://github.com/ruby-opencv/ruby-opencv) を参考にインストールします。

```shell
> gem install ruby-opencv -- --with-opencv-dir=/path/to/opencvdir
```

# sambaの設定
これは必要に応じて。
僕は基本的な作業はssh接続で行いますが、画像を扱うため途中経過や結果を確認するためにファイルを確認したくてsambaを設定しました。
こちら（ [Raspberry PIにSambaをインストール](https://qiita.com/neomi/items/645e2c7184210f989828) を参考にインストールしました。

```shell
> sudo apt-get install -y samba
> sudo vi /etc/samba/smb.conf
```

``` smb.conf
[pi]
    comment = Anarog Meter Reader -01-
    path = /home/pi/share
    browseable = yes
    wriable = yes
    guest ok = no
    force create mode = 0666
    force directory mode = 0777
    read only = no
    create mask = 0777
    directory mask = 0777
```

```shell
> sudo smbpasswd -a pi

> sudo service smbd restart
```


# 終わり
ザっとこんな感じでした。
もし誰かの役に立てば幸いです。