OpenCV4 for Raspberry Pi 

(追記:2019-04-15) 最新版は、[ラズパイ3にOpenCV3/4を簡単に導入](https://qiita.com/mt08/items/e8e8e728cf106ac83218) を見てください。


----
- (2018-11-22 JST 更新3) `libopencv4_4.0.0-20181122.1_armhf.deb` をビルドしました。(pkgconfigのみの変更)　rpi01向けは..<del>そのうち</del>できました.
- (2018-11-22 JST 更新1)　OpenCV 4のラズパイ向けパッケージです。
- OpenCV 3はこちら: [ラズパイ3にOpenCV3を簡単に導入](https://qiita.com/mt08/items/e8e8e728cf106ac83218)

# TL;DR 

```bash:以下、こぴぺ。
OPENCV_DEB=libopencv4_4.0.0-20181122.1_armhf.deb
# OPENCV_DEB=libopencv4_4.0.0+rpi01-20181122.1_armhf.deb  # RaspberyPi Zero/1 向け

curl -SL https://github.com/mt08xx/files/raw/master/opencv-rpi/${OPENCV_DEB} -o ${OPENCV_DEB}
sudo apt autoremove -y libopencv{3,4} ; \
sudo apt install -y ./${OPENCV_DEB}   ; \
sudo ldconfig

# Version 確認
python2 -c 'import cv2; print(cv2.__version__)'
python3 -c 'import cv2; print(cv2.__version__)'
```


# 概要
- 2018-11-20 に [OpenCV 4.0](https://opencv.org/opencv-4-0-0.html)のリリースがアナウンスされたようです。
- OpenCV 4のラズパイ向けパッケージを作成しました。
- RPi2/3向け(NEON=VFPV3=ON)と、Zero/1向け(NEON=VFPV3=OFF)があります。

- ぐーぐる先生翻訳改 

--- 
[OpenCV 4.0](https://opencv.org/opencv-4-0-0.html)
2018/11/20

3.0のリリース開始から約3年半後[^1]に、4.x系の最初の安定リリースを発表することができて喜んでいます。

- リリースのハイライト：
	- OpenCVは、いまC++ 11ライブラリになり、C++ 11準拠のコンパイラが必要です。 必要最小限のCMakeバージョンが3.5.1に上げられました。
	- OpenCV 1.xの多くのC APIが削除されました。
	- コアモジュール内の永続性（XML、YAML、またはJSONへのストア/ロードの構造化データ）は、C++で完全に再実装され、CのAPIも失われています。
	- 新しいモジュールG-APIが追加され、非常に効率的なグラフベースの画像処理パイプラインのエンジンとして機能します。
	- `dnn`モジュールには実験的なVulkanバックエンドが含まれ、ONNX形式のネットワークをサポートします。
	- 一般的なKinect Fusionアルゴリズムは、CPUとGPU（OpenCL）用に実装され、最適化されています。
	- QRコード検出器とデコーダが`objdetect`モジュールに追加されました
	- 非常に効率的かつ高品質なDIS高密度オプティカルフローアルゴリズムが`opencv_contrib`から`video`モジュールに移行しました。

	- 詳細は、以前の発表に記載されています : [4.0-alpha](https://opencv.org/opencv-4-0-0-alpha.html), [4.0-beta](https://opencv.org/opencv-4-0-0-beta.html), [4.0-rc](https://opencv.org/opencv-4-0-0-rc.html), [changelog](https://github.com/opencv/opencv/wiki/ChangeLog#version400)

ブランチ3.4はメンテナンスモードに切り替わります。バグ修正と軽い機能のみが受け入れられます。 **ところで、リリース3.4.4も用意されています！**

[OpenCV 2018アンケート](https://opencv.org/survey-2018.html)にまだ参加していない人は、あなたの考えを分かち合うことができます。

[^1]: OpenCV 3.0([`3.0.0`のタグ](https://github.com/opencv/opencv/releases/tag/3.0.0))は、2015月6月24日
---

# その他
- betaのあと確認するのを忘れていたら、いつの間にか正式版がでていたので、4.0.0-rcのビルドしてない. 
- [メモ] python2と3のcv2 のビルド(リンク?)にgccが1GBくらいメモリを使うので、仮想メモリがたりないとかで止まったら、CTRL-Cして、make -j1でビルドする
- Python向けのインストールスクリプトが変更されたためか、`20181119.1` を作成したものでは、すんなり pythonでつかえなかった。
    -  Issue: [OpenCV 3.4.4 Python binding #13202](https://github.com/opencv/opencv/issues/13202)
を参考に、cmakeのオプションで、以前と同様にインストールするようにした。

- (2018-11-22 JST 更新2) あぁぁ... pkgconfigが生成されてない.. (`20181119.1`にて)
    > Issue:[4.0.0 does not produce pkgconfig file #13154](https://github.com/opencv/opencv/issues/13154)

    `OPENCV_GENERATE_PKGCONFIG=ON` が必要っぽい... 
(3.4.4のパッケージは大丈夫だった..)



---
---
## 以下、ベータまで内容

- (追記:2018-10-18) [OpenCV 4.0.0-beta](https://github.com/opencv/opencv/releases/tag/4.0.0-beta) が出たので、同様にビルドしました。 
- [OpenCV 4.0.0-alpha](https://github.com/opencv/opencv/releases/tag/4.0.0-alpha) が出たので、Raspberry Pi 2/3向け(VFPV3,NEON=ON)にビルドして、debパッケージを作りました。

- OpenCV 4版の [ラズパイ3にOpenCV3を簡単に導入](https://qiita.com/mt08/items/e8e8e728cf106ac83218) のようなとこです。


# TL;DR

```bash
#　Remove previous version 前のバージョンをインストールしていない場合はスキップ
sudo apt autoremove libopencv3 
sudo apt autoremove libopencv4

# Install 
# 4.0.0+beta
wget https://github.com/mt08xx/files/raw/master/opencv-rpi/libopencv4_4.0.0+beta-20181017.1_armhf.deb
sudo apt install -y ./libopencv4_4.0.0+beta-20181017.1_armhf.deb
# 4.0.0+alpha
#   wget https://github.com/mt08xx/files/raw/master/opencv-rpi/libopencv4_4.0.0+alpha-20180920.1_armhf.deb
#   sudo apt install -y ./libopencv4_4.0.0+alpha-20180920.1_armhf.deb
sudo ldconfig

#　Version check
python2 -c 'import cv2; print(cv2.__version__)'
python3 -c 'import cv2; print(cv2.__version__)'
```

#その他
- Lena様の顔検出のテストのみ確認。
- フォルダが変更になってるので<font color='red'>注意</font><br>`/usr/local/share/OpenCV/` => `/usr/local/share/opencv4/`

    - 顔検出に使うカスケードファイルとか.
        - 変更前: `cascPath = '/usr/local/share/OpenCV/lbpcascades/lbpcascade_frontalface.xml'`
        - 変更後: `cascPath = '/usr/local/share/opencv4/lbpcascades/lbpcascade_frontalface.xml'`

- バージョン

	```shell-session:バージョン
	pi@raspberrypi:~ $ python2 -c 'import cv2; print(cv2.__version__)'
	4.0.0-beta
	pi@raspberrypi:~ $ python3 -c 'import cv2; print(cv2.__version__)'
	4.0.0-beta
	```

- [メモ] python2と3のcv2 のビルドにgccが1GBくらいメモリを使うので、仮想メモリがたりないとかで止まったら、CTRL-Cして、`make -j1`でビルドする
- (追記:2018-10-18) [メモ] SWAPを100 => 1024 MBに変更してから、ビルドすると、止まらない。

    ```shell:Swapサイズ変更
sudo sed -i -e 's/^CONF_SWAPSIZE=100/CONF_SWAPSIZE=1024/' /etc/dphys-swapfile
sudo systemctl restart dphys-swapfile
```