Raspberry Pi 4でarucoライブラリを使用してARを扱う際の環境構築手順

#目次
[1.この記事を書いた経緯](#1-この記事を書いた経緯)
[2.環境](#2-環境)
[3.手順](#3-手順)
[4.苦労した点](#4-苦労した点)
[5.まとめ](#5-まとめ)
[6.引用・参考サイト](#6-引用・参考サイト)

#1-この記事を書いた経緯
　Raspberry Pi 4 Model BでARを使用する際に苦労したので手順を記します。
　あくまで手順をメインに書くのでコードについては割愛します。

**本記事の対象者**
・Raspberry Pi 4 Model BにOSのインストールまで終わった方
・Raspberry Pi 4 Model Bが手元にある人
・ARをこれから勉強しようと思っている人

**本記事を作成するにあたって行ったこと**
・Raspberry Pi 4 Model Bで日本語入力するように設定
・aptとpipをアップグレード
・OpenCVのインストール
・OpenCVのインポート
・arucoライブラリのインストール
・pythonのコードを用意
・pythonを実行してカメラを起動
・カメラでARマーカーを認識

#2-環境
　Raspberry Pi 4 Model B
  ※下記では「Raspberry Pi 4 Model B」を「Raspberry Pi」とします。
　Python 3.7.3
　OpenCV 4.4.0.46
　USB接続できるカメラ

#3-手順

**(1)環境構築**
　Raspberry PiをmicroUSBでディスプレイに接続します。
　Raspberry Piを起動してログインするとデスクトップが表示されます。
　aptとpipのアップグレード、openCV、arucoライブラリのインストールをします。
　以下のコマンドをRaspberry Piの「LKTerminal」で実行します。

* aptとpipをアップグレード

~~~
sudo apt update
sudo apt upgrade
sudo pip install --upgrade pip
~~~

* Raspberry Piで日本語入力を使用する準備
[この記事](https://www.indoorcorgielec.com/resources/raspberry-pi/raspberry-pi-input-japanese/)を参考にしました。

* openCVのインストール

※下記で「pip」ではなく「pip3」としている理由
　「Python3」と「Python2」の2つが元々インストールされている場合に「Python3」でインストールを行うためです。
　「Python3～」しかインストールされていない場合は下記「pip3」を「pip」と読み替えてください。

```
pip3 install opencv-python==4.4.0.46
```


* AR用のライブラリのインストール

```
pip3 install opencv-contrib-python==4.4.0.46
```

* インポートの確認

```
python3
>>>import cv2
>>>cv2.__version__
'4.4.0'
>>>aruco = cv2.aruco
>>>
```

* ここまで問題なくできたらPythonの実行を停止

```
>>>exit()
```

**(2)コードの用意**
　本記事では[この方のコード](https://elsammit-beginnerblg.hatenablog.com/entry/2020/10/10/125246)を参考にしました。
　準備ができたらUSBカメラをRaspberry Piに取り付けます。

**(3)ARの表示**
　ARマーカーの上に指定した画像が表示されます。
![1609_0.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677151/b9bb2f8e-0f7f-4623-f452-dc116f32899a.jpeg)
※表示した画像については他PCから持ってきました。

#4-苦労した点
・OpenCVのインポート
　OpenCVをpip3でインストールした後に、OpenCVをインポートした際に下記エラーが出ました。

```
ImportError: libcblas.so.3: cannot open shared object file: No such file or directory
 ```
　OpenCVを使うには「ファイルが足りない」とのことだったので下記手順で当該ライブラリをインストールしました。

```
sudo apt-get install libcblas-dev
```
　インストールすると無事にOpenCVのインポートをすることができました。

・arucoライブラリのインストール
　上記「AR用のライブラリのインストール」の手順でインストールしたが下記エラーが出ました。

```
ImportError: libhdf5_serial.so.103: cannot open shared object file: No such file or directory
```
例のごとくOpenCVを使うには「ファイルが足りない」とのことだったので下記手順で当該ライブラリをインストールしました。

```
sudo apt-get install libhdf5-dev libhdf5-serial-dev
```
インストールすると無事にarucoライブラリのインポートをすることができました。

・バージョンを指定しない各種ライブラリのインストール
　AR用のライブラリをバージョンを指定せずにインストールしようとしたらインストールが終わらず苦労しました。
　原因を調査していくうちにバージョンが問題であることに気づきました。
　下記の手順でopenCVのアンインストールを行ったのち、上記の手順でインストールし直しました。

~~~
pip3 uninstall opencv-python
~~~

#5-まとめ
　ARの環境構築は大変でした。
　次回は簡単なGUIを使用してARアプリを作成します。

#6-引用・参考サイト
RaspberryPiの起動〜OpenCVのインストール
[Raspberry Piで日本語入力](https://www.indoorcorgielec.com/resources/raspberry-pi/raspberry-pi-input-japanese/)
[RaspberryPiへのOpenCVインストール手順](https://qiita.com/wk_/items/8db529a6b24a955888db)
[【Raspberry Pi】Raspberry Pi Zero WにOpenCVの環境を構築する](https://rikoubou.hatenablog.com/entry/2019/05/21/151337)
[ラズパイでpython3にOpenCVを入れたらエラーが出た【対処法】](https://qiita.com/XM03/items/48463fd910470b226f22)
[Raspberry Piに構築したOpenCVのエラー解消法](https://qiita.com/morichu78/items/1575299e6676450c47ed)
[【OpenCV/Raspberry Pi】 Raspberry PiにOpenCVをインストールしてみる。](https://hokusonweb.dip.jp/index.php/2020/05/25/raspberrypi-opencv-setup/)

openCVを使った画像認識
[【Pythonでプログラミング】arucoライブラリを使ってARマーカを認識してみた](http://okatenari.com/2017/11/28/python-ar/)
[画像を扱う](http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_gui/py_image_display/py_image_display.html)