Jetson Nano へ OpenCV 4.1.0 をインストールする


# 概要
だいぶハマったので、自分自身へのメモの意味も含めてます。
Jetson NanoへOpenCV4.1.0をインストールしました。

参考
(1) https://devtalk.nvidia.com/default/topic/1049296/jetson-nano/how-to-install-opencv-python-for-python3-6
(2) https://github.com/AastaNV/JEP/blob/master/script/install_opencv4.0.0_Nano.sh

# 手順
## Clean な Jetson nanoを用意する
Cleanなとは、Misco SDへイメージを焼いて、user設定等の初期設定を終わらせた直後のJetson nanoです。
これは必須ではないですが、私はいろいろ作業した後にOpenCVをインストールしようとしたのですが、なんどやっても失敗したため、Jetson Nanoを再インストールしました

### swap 領域の作成
コンパイル途中にメモリ不足でエラーになるので、swap領域を作成します
コンパイル後に消すので、場所はどこでも良いです。

```
$ fallocate -l 4G swapfile
$ chmod 600 swapfile
$ mkswap swapfile
$ sudo swapon swapfile
$ swapon -s
(ここになにか表示されるとOKです)
```

### インストールスクリプトの用意
これを少しカスタマイズして使います。OpenCV 4.0.0をインストールしたい場合はこのままでいいかと思います
https://github.com/AastaNV/JEP/blob/master/script/install_opencv4.0.0_Nano.sh

変更内容は、4.0.0 となっている部分を全て 4.1.0に変えただけです
ファイル名は install_opencv4.1.0_Nano.sh にしました

```
#!/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 "** Install requirement"
sudo apt-get update
sudo apt-get install -y build-essential cmake 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 python2.7-dev python3.6-dev python-dev python-numpy python3-numpy
sudo apt-get install -y libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-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.0"
cd $folder
curl -L https://github.com/opencv/opencv/archive/4.1.0.zip -o opencv-4.1.0.zip
curl -L https://github.com/opencv/opencv_contrib/archive/4.1.0.zip -o opencv_contrib-4.1.0.zip
unzip opencv-4.1.0.zip 
unzip opencv_contrib-4.1.0.zip 
cd opencv-4.1.0/

echo "** Building..."
mkdir release
cd release/
cmake -D WITH_CUDA=ON -D CUDA_ARCH_BIN="5.3" -D CUDA_ARCH_PTX="" -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.1.0/modules -D WITH_GSTREAMER=ON -D WITH_LIBV4L=ON -D BUILD_opencv_python2=ON -D BUILD_opencv_python3=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

make -j3
sudo make install
sudo apt-get install -y python-opencv python3-opencv

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


### スクリプト実行
```
mkdir opencv
sh install_opencv4.1.0_Nano.sh opencv
(コンパイル/インストールが始まります)
```

### ひたすら待つ
数時間かかるので、displayつなぐか、screenコマンドをつかって、SSHが切れても大丈夫なようにしたほうがいいかもです

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

python2.7で確認

```
python
Python 2.7.15rc1 (default, Nov 12 2018, 14:31:15) 
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> 
```

python3.6で確認

```
python3
Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> 
```

どちらもエラーが出ない！やった

### 残作業
再起動するとswap領域が消えるので、作成したファイルを消しておきます