Jetson Nano に OpenCV 4.1.2 をインストールする

#概要
Jetson Nano に、OpenCV 4.1.2 をインストールしました。

#手順
以下の@asahi0301さんの記事のそのままです。
・ https://qiita.com/asahi0301/items/3c287190348552f19415
また、以前の記事でOpenCV 4.1.1 をビルドした時とほとんどかわりません
・ https://qiita.com/daisuzu_/items/f17d365a895a599f832f
ただし、スクリプトだけ変更。ファイル名は install_opencv4.1.2_Nano.sh にしました。個人的な趣味ですが、Python2 対応箇所のビルドはしていません。

```
#!/bin/bash
#
# Copyright (c) 2018, NVIDIA CORPORATION.  All rights reserved.
#
# NVIDIA Corporation and its licensors retain all intellectual property
# and proprietary rights in and to this software, related documentation
# and any modifications thereto.  Any use, reproduction, disclosure or
# distribution of this software and related documentation without an express
# license agreement from NVIDIA Corporation is strictly prohibited.
#

if [ "$#" -ne 1 ]; then
    echo "Usage: $0 <Install Folder>"
    exit
fi
folder="$1"
user="nvidia"
passwd="nvidia"

echo "** Remove OpenCV3.3 first"
sudo sudo apt-get purge *libopencv*

echo "** Install requirement"
sudo apt-get update
sudo apt-get install -y build-essential git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
sudo apt-get install -y python3.7-dev python-dev
sudo apt-get install -y libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev
sudo apt-get install -y libv4l-dev v4l-utils qv4l2 v4l2ucp
sudo apt-get install -y curl
sudo apt-get update

echo "** Download opencv-4.1.2"
cd $folder
curl -L https://github.com/opencv/opencv/archive/4.1.2.zip -o opencv-4.1.2.zip
curl -L https://github.com/opencv/opencv_contrib/archive/4.1.2.zip -o opencv_contrib-4.1.2.zip
unzip opencv-4.1.2.zip 
unzip opencv_contrib-4.1.2.zip 
cd opencv-4.1.2/

echo "** Building..."
mkdir release
cd release/
cmake -D CUDA_HOST_COMPILER=/usr/bin/gcc-7 -D CUDA_NVCC_FLAGS="--expt-relaxed-constexpr" -D CUDA_VERSION="10000" -DWITH_NVCUVID=OFF -DENABLE_CCACHE=OFF -DEIGEN_INCLUDE_PATH=/usr/include/eigen3 -D HAVE_CUDA=1 -D WITH_CUDA=ON -D CUDA_ARCH_BIN="5.3" -D CUDA_ARCH_PTX="" -DWITH_FAST_MATH=OFF -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.1.2/modules -D WITH_GSTREAMER=ON -D WITH_LIBV4L=ON -D BUILD_opencv_python2=OFF -D BUILD_opencv_python3=ON -DPYTHON3_EXECUTABLE=/usr/bin/python3 -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/ -D WITH_CUBLAS=ON -D LAPACK_LIBRARIES=/usr/lib/aarch64-linux-gnu/libblas.so -D LAPACK_CBLAS_H=/usr/include/aarch64-linux-gnu/cblas.h ..
make -j2
sudo make install

echo "** Install opencv-4.1.2 successfully"
echo "** Bye :)"
```

### 一時的にスワップ領域を増やす
OpenCV 4.1.1 と比較すると、4.1.2 のビルドではメモリ領域を使いまくるようだ（てゆうか、途中でメモリ領域が確保できずにビルド失敗する）。なので、6GBほどスワップ領域を一時的に確保した（ビルド終わったら不要になる）

```
$ sudo dd if=/dev/zero of=/swapfile bs=1M count=6144
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
```


### スクリプト実行
```
mkdir opencv
sh install_opencv4.1.2_Nano.sh opencv
(コンパイル/インストールが始まります)
```
で、ひたすら待つ

### インストール後に試してみる

python3でしか確認していません。

```
>>> import cv2
>>> print(cv2.__version__)
4.1.2
```
となれば一応オーケー

### 注意すること
cmake 時に、ビルド先のフォルダに .cache というフォルダが作成されて、そこに、cudaoptflow 等の外部ライブラリがダウンロードされるのだが、 GitHub のご機嫌によっては、空ファイル（サイズ0）になってしまうことがある。その場合は、手動で適当な場所にダウンロードして、手動で cmake + make をやり直すしかないようだ。。。

### 仕掛かり課題
例えば、

```
pip3 install gym[atari]
```

のように、opencv-pythonに依存するインストールに失敗する。要は、

```
pip3 list
```
で opencv-python、opencv-contrib-python が表示されない（バージョン 4.1.2.27 と表示されるのが理想。これはJetson Nano に限らず、cmake からビルドするとそうなってしまうようだ）。また、pypi にはバイナリ形式でしか提供されてなく、しかも aarch64はじめ arm 向けは提供されていないので、別途手動で作成するしかないが、ちと工夫が必要と思われる。

以下のPyPi のリポジトリに作成方法が記述されている。要は、setup.py などのファイルを別途用意する必要がある、とのこと。これでJetson Nano向けのを作成すれば上手くいくかもしれないが、未着手。
・ https://pypi.org/project/opencv-python/