360度カメラのRICOH THETAを、KR260+PYNQから操作してみました。
インストール方法から実行例含めて紹介します。
360°カメラ(RICOH THETA)をKR260+PYNQから操作してみた
360度カメラのRICOH THETA VをKR260から操作してみました。
USB経由で制御しています。
実際に360°カメラが撮影した写真が下記になります。
実際のテスト動画は下記です。
ipynbファイルから制御できていることが分かります。
実際にインストールした手順、制御したipynbファイルについてを紹介していきます。
RICOH THETA V
使用した360°カメラはRICOHのTHETA Vです。
色々なAPI・ライブラリが公開されており、使いやすい360°カメラです。
接続方法もUSBやBluetoothなどあります。
最新はRICOH THETA XですがVを選んだ理由は下記記事で紹介しています。
RICOHのTHETA Xではなく、THETA Vを購入した理由
KR260にTHETAを接続
KR260にTHETAを接続します。USBで接続しています。
dmesgでログを見ると、問題なく接続できました。
1 2 3 4 5 6 7 8 |
ubuntu@kria:~$ sudo su root@kria:/home/ubuntu# dmesg |grep usb [ 8.214013] usb 1-1.2: New USB device found, idVendor=05ca, idProduct=0368, bcdDevice= 1.00 [ 8.222380] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 8.229697] usb 1-1.2: Product: RICOH THETA V [ 8.234055] usb 1-1.2: Manufacturer: Ricoh Company, Ltd. [ 8.239367] usb 1-1.2: SerialNumber: 00119628 |
ライブラリをmake・インストールする
下記GitHubを参照してmake・インストールしました。
https://github.com/codetricity/libptp2-theta
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
sudo apt install build-essential sudo apt install libtool sudo apt install automake sudo apt install pkg-config sudo apt install subversion sudo apt install libusb-dev git clone https://github.com/codetricity/libptp2-theta cd libptp2-theta/ ./configure make autoreconf -i ./configure automake make sudo make install sudo ldconfig -v |
KR260のUSB経由でTHETAを動かす
インストール後は「theta」というコマンドが使えるようになります。
例えば、ヘルプを確認したかったら「theta -h」です。
またカメラ(デバイス)情報を読み取りしたい場合は、「theta -i」です
1 2 3 4 5 6 7 8 9 10 11 12 |
root@kria:/home/ubuntu# theta -h root@kria:/home/ubuntu# theta -i THETA Device Info ================== Model: RICOH THETA V manufacturer: Ricoh Company, Ltd. serial number: '00119628' device version: 1.00.2 extension ID: 0x00000006 image formats supported: 0x00000004 extension version: 0x006e |
Jupyter Notebook
Kria-PYNQのJupyter Notebookを使って、Pythonから制御します。
今回紹介するのは、あくまで一例です。
他にもRICOH公式のUSBのAPI情報を使って色々操作可能です。
https://github.com/ricohapi/theta-api-specs/tree/main/theta-usb-api
ipynbファイル
今回筆者が作成・実行したipynbファイルは下記です。Gistにアップしています。
コマンド同様に、pythonでもカメラ情報を確認してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
from subprocess import getoutput import time theta_info = getoutput('theta --info') print(theta_info) THETA Device Info ================== Model: RICOH THETA V manufacturer: Ricoh Company, Ltd. serial number: '00119628' device version: 1.00.2 extension ID: 0x00000006 image formats supported: 0x00000004 extension version: 0x006e |
GitHubに記載されている手順そのままですが、撮影まで流れを試してみます。
まずはTHETAを省エネモードからWakeUP。カメラのLEDランプが青色に点灯します。
1 2 3 4 5 6 |
theta_wakeup = getoutput('theta --set-property=0xD80E --val=0x00') print(theta_wakeup) Camera: RICOH THETA V 'UNKNOWN' is set to: 1 Changing property value to 0x00 [(null)] succeeded. |
カメラ撮影モードにします。カメラマークが青く光ります。
1 2 3 4 5 6 |
theta_camera_mode = getoutput('theta --set-property=0x5013 --val=0x0001') print(theta_camera_mode) Camera: RICOH THETA V 'Still Capture Mode' is set to: [Normal] Changing property value to 0x0001 [(null)] succeeded. |
あとは撮影(キャプチャ)するだけです。
360°カメラのTHETA Vの撮影する時間を確認しましたが、約3秒でした。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
time1 = time.time() theta_capture = getoutput('theta --capture') time2 = time.time() capture_time = time2-time1 print("Performance: {} (s)".format(capture_time)) print(theta_capture) Performance: 3.1056067943573 (s) Initiating capture... Object added 0x000000ee Capture completed successfully! |
実際のKR260とTHETAの周りの状況は下記状況でした。※スマホから撮影
THETAに保存されているファイルを「theta -L」で確認できます。
取得できたデータは下記写真です。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
theta_list = getoutput('theta -L') print(theta_list) Listing files... Camera: RICOH THETA V Handler: Size: Captured: name: 0x000000ad: 2042821 2024-03-30 23:35 R0010146.JPG 0x000000ae: 2021885 2024-03-30 23:36 R0010147.JPG 0x000000af: 1801502 2024-03-31 07:01 R0010148.JPG 0x000000b0: 1861412 2024-03-31 08:06 R0010149.JPG 0x000000b1: 1716924 2024-03-31 09:18 R0010150.JPG 0x000000b2: 1723153 2024-03-31 09:22 R0010151.JPG |
ファイルを指定(もしくは全てに)して、KR260に保存できます。
「theta --get-file=HANDLE」「theta --get-all-files」
カレントディレクトリにTHETAから転送されます。
1 2 3 4 5 |
theta_get_file = getoutput('theta --get-file=0x00000088') print(theta_get_file) Camera: RICOH THETA V Skipping file: "R0010155.JPG", file exists! |
opencvで画像表示させます。
1 2 3 4 5 6 7 8 |
import cv2 from matplotlib import pyplot as plt image_path = 'R0010109.JPG' image = cv2.imread(image_path) image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) plt.imshow(image) plt.show() |
ipynb上でもopencvを使って撮影した360°カメラ画像が確認出来ました。
まとめ
360度カメラのRICOH THETAをKR260から操作してみました。
しかし1枚のカメラ撮影に3秒ほどかかり、そのままではリアルタイムの制御には使えません。
そのためGstreamerを使ってリアルタイムにopencvに流しこむ別の手法で対応しました。
今回のKR260で実施した内容は、下記記事で紹介したテストの一部です。
コメント