はじめに
最近、改めてRaspiberry pi3 Model Bに3Dカメラを接続したので、最新情報での簡単構築手順について説明します。最新版OSでRaspberry pi3を設定」していると、問題もあり、また多くの時間がかかったのでここで設定した環境のイメージをアップしておきました。
早速 aeroTAP 3D USBカメラを接続して使っていたい方は、イメージをダウンロードしてご利用ください。
Raspberry Pi3 aeroTAP 3D USBカメラキットはこちらから購入できます。
できること
環境設定ができると、Raspberry pi3上でaeroTAP 3D USBカメラ用のサンプルプログラムを実行したり、3Dカメラをネットワーク3Dカメラサーバーとして稼働したりすることができます。
また、aeroTAP 3D USBカメラを使うためのpythonの環境も構築し、サンプルを実行します。
準備するのも
- Raspberry Pi3 Model B (Raspberry Pi4でもほとんど同様の手順となります)
- aeroTAP 3D USBカメラ ( G1, GSまたはG2 )
- ネットワーク( Wifiなど )
- aeroTAP SDKおよび cam2webは、下記からダウンロード
Raspberry Pi3の初期設定
Raspberry pi Imagerを使ってSDカードを作成します。
Raspberry pi Imagerをダウンロードして、実行します。
- Release 4.2 Narch 2022
イメージを作成したら、Raspberry Pi3に差し込んで、起動します。
起動後必要な設定を行ってください。
- Wifi設定
- ユーザー作成 (piユーザー)
アップデートが自動的に開始され、再起動します。(約2時間ほどかかりました)
再起動後 [Preference]>[Raspberry Pi Configuration]を起動して、SSHを有効します。
- SSH (ファイル転送に使います)
RaspiのIPアドレスを確認しておいてください。ここでは、192.168.3.73とします。
環境構築
ダウンロードした aeroTAP SDKおよび cam2web.tar.gzをRaspiにアップロードしてください。
ファイルの転送にはFileZillaが便利です。
最低必要なライブラリのインストール
aeroTAP-sdk サンプルを実行するために以下のライブラリが必要です。
sudo apt install libusb-dev
sudo apt install libudev-dev freeglut3-dev
sudo apt install libv4l-dev
sudo apt install libpng-dev libjpegp-dev
sudo apt install cmake
サンプルコードのビルド
アップロードした aeroTAP-SDK.tar.gz, cam2webを展開します。
pi@raspberrypi: tar -xvzf aeroTAP-SDK.tar.gz
pi@raspberrypi: tar -xvzf cam2web.tar.gz
RGBDビルド
RGBDは、aeroTAP 3Dカメラからカラー画像を深度マップを取得して表示するサンプルです。
以下の手順でビルドします。
pi@raspberrypi: cd aeroTAP/sample/RGBD
pi@raspberrypi:~/aeroTAP/sample/RGBD $ mkdir build
pi@raspberrypi:~/aeroTAP/sample/RGBD $ cd build
pi@raspberrypi:~/aeroTAP/sample/RGBD/build $ cmake ..
pi@raspberrypi:~/aeroTAP/sample/RGBD/build $ make
正常にビルドされているか確認してください。aerotap_RGBD 実行ファイルが作成されます。
実行してみてください。距離を色で表現した深度マップが表示されたWindowが開きます。
pi@raspberrypi:~/aeroTAP/sample/RGBD/build $ ./aerotap_RGBD
画像をクリックすると、[カラー画像]>[グレースケール画像]の準備に切り替わります。
深度マップ | カラー画像 | グレイスケール画像 |
---|---|---|
aeroTAP 3D USB G2カメラでの画像
[Esc]キーで終了します。
起動パラメータ
ソースコードを確認しても分かりますが、以下のパラメーターが利用可能です。
std::cout << "Options: -j MJPG, -u uSB2.0, -f Enable Post Filter \n"
"Resolution: -r0 qvga, -r1 VGA, -r2 Wvga, -r3 HD\n" << std::endl;
- -j オプションでカラー画像をMJPGモードで取り込みます。FPSを高速化できます。
- -u USB20に接続している場合のオプションです。自動で認識されていない場合のみ指定します。
- -f 深度マップを簡単にPost処理します。
- -rX X:0 320x240, 1 640x480, 2 640x400 or 640x360, 3: 1280x720 ( GS or G2のみ)
Raspberry pi 3/4 Nano Pi等のUSB3.0に接続しても aeroTAP 3D USBカメラは、動作しません。USB2.0で接続してください。
PalmTrackビルド
PalmTrackは、aeroTAP 3Dカメラからのカラー画像/深度マップから手のひらを検出して表示するサンプルです。
以下の手順でビルドします。
pi@raspberrypi: cd ~/aeroTAP/sample/PalmTrack
pi@raspberrypi:~/aeroTAP/sample/PalmTrack $ mkdir build
pi@raspberrypi:~/aeroTAP/sample/PalmTrack $ cd build
pi@raspberrypi:~/aeroTAP/sample/PalmTrack/build $ cmake ..
pi@raspberrypi:~/aeroTAP/sample/PalmTrack/build $ make
正常にビルドされているか確認してください。aerotap_PalmTrack 実行ファイルが作成されます。
実行してみてください。
距離を色で表現した深度マップが表示されたWindowが開きます。手のひらをカメラに向け、検出されると矩形が表示されます。
pi@raspberrypi:~/aeroTAP/sample/PalmTrack/build $ ./aerotap_PalmTrack
画像をクリックすると、[カラー画像]>[グレースケール画像]の準備に切り替わります。
[Esc]キーで終了します。
cam2web カメラサーバーの作成
cam2web.tar.gzを展開して、ビルドします。cam2web 実行ファイルが作成されます。
pi@raspberrypi:~/ $ tar -xvzf ./cam2web.tar.gz
pi@raspberrypi:~/ $ cd cam2web/src/apps/linux
pi@raspberrypi:~/ $ cd cam2web/src/apps/make
cam2webを実行します。
pi@raspberrypi:~/cam2web/src/apps/ $ ./cam2web
ライブラリ libaeroTAP-sdk.so が見つからないとエラーが表示される場合は、LD_LIBRAYRY_PATHを設定してください。
export LD_LIBRARY_PATH=/home/pi/aeroTAP/lib/linux_arm.pi3/
ブラウズ
PCからブラウスして見てください。3Dカメラからの深度マップ画像をストリーミングできます。
http://192.167.3.73:8000/
直接動画をストリーミングする場合:
http://192.167.3.73:8000/camera/mjpeg
画像を取得する場合:
http://192.167.3.73:8000/camera/jpeg
IPアドレスは、RaspiのIPアドレスを指定します。ポート番号 8000がデフォルトです。起動オプションにより解像度、表示内容、ポート番号などを変更することができます。以下のコマンドで利用可能なパラメーターを表示できます。
cam2web -?
複数のネットワーク3Dカメラからの取得
複数ネットワーク3Dカメラを構築したら、中央PCから同時に参照したくなります。下記のサイトにサンプルプログラムをアップしましたので、お試しください。
Pythonで扱う3Dカメラ
aeroTAP 3D USBカメラを扱うためのPythonライブラリは、aeroTAP/lib/pythonフォルダーにあります。実行するには、Python + Opencvの環境が必要です。
今回、Raspberry Pi3 Model BのOSバージョン
- Debian 11.4
- Python 3.9.2 (default, Mar 12 2021, 04:06:34)
すでに python3, pip3はインストールされているようでした。
その場合、下記のコマンドでnumpy. opencvがpython3で使えるようになるはずですが、import cv2でエラーが発生します。
sudo pip3 install numpy
sudo pip3 install opencv-python
sudo pip3 install opencv-contrib-python
python3
>>>import cv2
ネットでいろいろ調べたことろ下記の方法で解決できました。
まず、不足しているライブラリのインストール
sudo apt-get install libhdf5-dev libhdf5-serial-dev libatlas-base-dev
opencv-contribをアンインストールして、3.4.14.51をインストール
sudo pip3 uninstall opencv-contrib-python
sudo pip3 --default-timeout=1000 install opencv-contrib-python==3.4.14.51
python3
>>>import numpy
>>>import cv2
numpyでエラーがでます。
ImportError: numpy.core.multiarray failed to import
numpyの更新
pip install numpy --upgrade
python3
>>>import numpy
>>>import vc2
エラーなく、成功しました。
pythonサンプルの実行
LD_LIBRARY_PATHを設定(設定していない場合)して、
例
export LD_LIBRARY_PATH=/home/pi/aeroTAP/lib/linux_arm.pi3/
cd ~/aeroTAP/lib/python
aerotap.py サンプル
カメラを接続して、pyファイルを実行してください。
python3 ./aerotap.py
aeroTAP 3D USBカメラからカラー画像と、深度マップをカラー表示します。
デモは、'q'キーで終了、または一定フレーム数で終了します。
aerotapPalm.py サンプル
こちらは、手のひら検出を使った例です。
python3 ./aerotapPalm.py
aeroTAP 3D USBカメラからカラー画像、手のひらを検出すると矩形を表示します。
デモは、'q'キーで終了、または一定フレーム数で終了します。
pythonライブラリが正しく実行できたら、pythonライブラリを使って独自のアプリに挑戦し手見てください。
作成したRaspberry Pi3用イメージ
久しぶりに最新環境でRaspberry Pi3を設定すると、多くの問題で時間を浪費してしまいました。
ここで設定したRaspberry pi3のSDカードイメージをアップしておきましたので、aeroTAP 3D USBカメラで利用したい場合は、こちらのイメージを使っていただければ簡単い作業に入れます。
ダウンロード、展開後、Win32DiskImagerを使って、SDカードに書き込んでください。
ユーザーID/パスワードは、pi/pi です。
起動後、WiFiなどネットワークの設定を行ってください。
イメージには、aeroTAP SDK, cam2webがすでに含まれていますが、最新版をGithubからダウンロードしてご利用ください。
参考文献
[NumPyとOpenCVのimportでエラーが出る件] https://qiita.com/thinknee/items/9489119c8b85d9323132
[ラズパイ(Raspberry Pi)へのOpenCVのインストール方法・手順] https://python-academia.com/raspberrypi-opencv/