Raspberry Pi3 ModeB+ Python3 OpenCV構築

# はじめに
2022年8月時点で、Raspberry pi3にPython Opencvを設定しようとしたら、問題に遭遇して多くの時間を費やしたので、参考までに成功した手順を記録しておきます。
結論として、numpyのバージョン問題だったと思われます。
Raspberry pi3 アップデート後　のnumpy '1.19.5' を'1.23.2' にアップグレードすることで解決しました。

# OSイメージの作成
OSのイメージは、[Raspberry Pi Imager](https://www.raspberrypi.com/software/,"Imger") を使って作成しました。
イメージの作成、起動、ネットワークの設定を終えて、アップデート(約2時間ほどかかります)を行います。
Release 2.4 March 2022 

すでにPython3, pip3はインストールされています。
- Debian 11.4
- Python 3.9.2 (default, Mar 12 2021, 04:06:34)

# Opencv-Pythonのインストール
numpy opencvの状態を調べます。

```rb
pi@raspberrypi:~ $ python3
Python 3.9.2 (default, Mar 12 2021, 04:06:34)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> np.__version__
'1.19.5'
>>> import cv2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'cv2'
>>>
```

numpy はインストールされているが opencvがインストールされていません。

opencvをインストールする前に、必要なライブラリをインストールします。今回下記のライブラリを追加しました。

```rb
sudo apt-get install libhdf5-dev libhdf5-serial-dev libatlas-base-dev -y
```

## opencv-pthyonのインストール
本来次のコマンドでnumpy. opencvがpython3で使えるようになるはずですが、import cv2でエラーが発生します。

```rb
sudo pip3 install opencv-python
pi@raspberrypi:~ $ sudo pip3 install opencv-python
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting opencv-python
  Downloading https://www.piwheels.org/simple/opencv-python/opencv_python-4.6.0.66-cp39-cp39-linux_armv7l.whl (11.3 MB)
     |████████████████████████████████| 11.3 MB 19 kB/s 
Requirement already satisfied: numpy>=1.14.5 in /usr/lib/python3/dist-packages (from opencv-python) (1.19.5)
Installing collected packages: opencv-python
Successfully installed opencv-python-4.6.0.66
```

import cv2で確認するとエラー
```rb
pi@raspberrypi:~ $ python3
Python 3.9.2 (default, Mar 12 2021, 04:06:34) 
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> import cv2
RuntimeError: module compiled against API version 0xf but this version of numpy is 0xd
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.9/dist-packages/cv2/__init__.py", line 181, in <module>
    bootstrap()
  File "/usr/local/lib/python3.9/dist-packages/cv2/__init__.py", line 153, in bootstrap
    native_module = importlib.import_module("cv2")
  File "/usr/lib/python3.9/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
ImportError: numpy.core.multiarray failed to import
>>> 
```

# 下記の方法で解決できました。

numpyの更新

```rb
pi@raspberrypi:~ $ pip3 install numpy --upgrade
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: numpy in /usr/lib/python3/dist-packages (1.19.5)
Collecting numpy
  Downloading https://www.piwheels.org/simple/numpy/numpy-1.23.2-cp39-cp39-linux_armv7l.whl (12.3 MB)
     |████████████████████████████████| 12.3 MB 56 kB/s
Installing collected packages: numpy
  WARNING: The scripts f2py, f2py3 and f2py3.9 are installed in '/home/pi/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed numpy-1.23.2
```

import cv2で確認
```rb
pi@raspberrypi:~ $ python3
Python 3.9.2 (default, Mar 12 2021, 04:06:34)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> np.__version__
'1.23.2'
>>> import cv2
>>> cv2.__version__
'4.6.0'
>>>

```
OK

## opencv-conntrib-python のインストール
その後、必要に応じて、opencv-contribもインストールできます。

:::note warn

今回、上記の作業後 sudo pip2 install opencv-contrib-python を実行すると、インストールが終わらない状態になりました。

この記事を作成する前は、sudo pip2 install opencv-python opencv-contrib-python　としてconrtribも同時にインストールできたのですが、今回別々だとできません。なぜか？ なぞです。
:::

# 追記
その後、opencv-contribのインストールについては、下記のバージョンでインストールに成功しました。
```rb
sudo pip3 install opencv-contrib-python==3.4.14.51
```
こちらは、インストールは瞬時に完了しました。
やはり、バージョンの問題だったのか...かなり時間がかかった。

# 参考文献
[NumPyとOpenCVのimportでエラーが出る件] https://qiita.com/thinknee/items/9489119c8b85d9323132
[ラズパイ(Raspberry Pi)へのOpenCVのインストール方法・手順] https://python-academia.com/raspberrypi-opencv/