初心者向け!Jetson NanoとAIカメラ(LUXONIS OAK-D-S2)の使い方

前回の記事では、WEBカメラを使いAIを活用して、手の特定の部分(指先や手のひら)を
検出しました。
今回は、より高度なAI処理が可能な LUXONIS製 AIカメラ「OAK-D-S2」 を使用します。
このカメラを使えば、カメラ本体でAI処理が可能 になり、
Jetson Nanoと組み合わせることで、手軽に高速な視覚認識システム を構築できます。
初心者向けに インストールから基本的な使い方まで を詳しく解説し、
実際に動作するプログラムを作成していきます。
トラブルシューティングのポイントも紹介しています。
AIカメラ OAK-D-S2を実際に使ってみましょう。
<一部アフィリエイトリンクが含まれています>
AIカメラ LUXONIS OAK-D-S2の特徴と使い方
OAK-D-S2の特徴
最近のAI技術の進化により、カメラは単なる撮影ツールではなく、
顔認識や物体検出などの高度な処理をリアルタイムで実行 できるようになりました。
特に OAK-D-S2 は、以下の機能を備えた オールインワンAIカメラ です。
①深度カメラ(ステレオカメラ) を搭載し、距離を正確に測定可能。
②AIプロセッサー内蔵 で、Jetson NanoやPCの負荷を軽減。
③USB 3.0接続 で、高速データ通信が可能。
④手の検出、物体認識、ジェスチャー認識 など、多彩なAI処理をサポート。
AIカメラ LUXONIS OAK-D-S2(自動終点)を使ってみる
WEBカメラを使うだけではなく、AIカメラを使いたい場合は、
いくつか設定を変更する必要があります。
次の手順に従って設定を変えていきます。
【必要な設定変更】
1.cv2.VideoCapture(0) → depthai.Pipeline() に変更
2.OAK-D-S2 からフレームを取得し、MediaPipe を使用
3.dai.Device(pipeline) を使用してカメラ制御
4.手首検出の処理は MediaPipe を継続使用
1.depthai.Pipeline() に変更
cv2.VideoCapture(0) を変更
最初に、普通のWEBカメラを使うコードから、AIカメラに対応できるように書き換えます。これを、depthai.Pipeline() に変更します。
2.OAK-D-S2から画像を取得してMediaPipeを使用
OAK-D-S2から画像を取得してMediaPipeに渡す
OAK-D-S2というAIカメラから映像(フレーム)を取り込み、手首の検出を行うために、MediaPipeというライブラリにその映像を渡します。
3.dai.Device(pipeline) を使用してカメラ制御
dai.Device(pipeline) を使ってカメラの操作をする
dai.Device(pipeline) を使って、カメラの操作や設定を行います。
このコードで、OAK-D-S2がどのように動作するかを制御します。
4.手首の検出にはMediaPipeを継続使用
手首の検出にはMediaPipeを引き続き使う
手首を検出する処理については、引き続きMediaPipeを使います。つまり、カメラの映像をAIで処理した後、手首を検出する部分はMediaPipeで行います。
AIカメラ セットアップ
DepthAI の Python ライブラリをインストール
まず、DepthAIというライブラリをインストールします。
これを使って、OAK-D-S2とやり取りをします。
インストールのコマンドは以下の通りです。
OAK-D-S2をJetson Nanoで使用するには、
DepthAIライブラリをインストールする必要があります。
DepthAI の Python ライブラリをインストール
pip install depthai
または、以下のコマンドでインストールします。
pip3 install depthai
もし、これでうまくいかない場合は、
以下のコマンドを使ってインストールします
sudo pip3 install depthai
これで、DepthAIライブラリがインストールされます。
DepthAI が正しくインストールされているか確認
インストール後に、以下のコマンドを実行して、
インストールが正しく行われたか確認します。
python3 -c "import depthai; print(depthai.__version__)"
このコマンドを実行すると、DepthAIのバージョンが表示されます。
バージョンが表示されたら、インストールは成功です!

「Ver.2.29.0.0」と表示されています。
正常にインストールされています!
エラーが出る場合
1. 仮想環境を使用している場合 仮想環境 (venv や conda) を使用している場合は、仮想環境内で pip install depthai を実行してください。
2. Jetson の Python パスを確認 Jetson Nano では、標準の Python と pip のバージョンが異なる場合があります。
Python のバージョンを確認します。
python3 --version
pip3 --version
Python のパスを確認:
which python3
which pip3
正しい pip3 で depthai をインストールします。
OAK-D-S2 が接続されているか確認
OAK-D-S2がJetson Nanoに正しく接続されているか確認します。
以下のコマンドを実行して確認します
lsusb
これを実行すると、OAK-D-S2が認識されているかどうかが表示されます。
認識されていれば、出力に「Luxonis」または「Intel Movidius」という
デバイスが表示されます。

もし表示されない場合は、USBケーブルを変更して試します。
udev ルールを設定
OAK-D-S2を使うには、udev
ルールの設定が必要です。
以下のコマンドを実行して、設定を行います
echo "Setting up Luxonis udev rules..."
sudo wget -qO- https://docs.luxonis.com/_static/install_dependencies.sh | bash
これで、udev
ルールが設定されます。
DepthAI デバイスが利用可能か確認
以下のコマンドを実行して、
OAK-D-S2 が正しく認識されているか確認します。
python3 -c "import depthai; print(dai.Device().getDeviceInfo())"
正常にデバイス情報が表示されれば、問題なく動作するはずです。

これで、デバイス情報が表示されれば、OAK-D-S2が正常に動作しています。
上記の手順を試しても動作しない場合OAK-D-S2 のファームウェアを更新します。
OAK-D-S2 のファームウェアを更新
OAK-D-S2 のファームウェアが古い可能性があります。
次のコマンドを実行して、最新の DepthAI を取得し、
ファームウェアを更新してください。
python3 -m pip install -U depthai
Jetson Nanoを、再起動します。
2. OAK-D-S2 のパーミッション設定
(1) udev ルールを手動で設定
以下のコマンドを実行し、
OAK-D-S2 の udev
ルールを設定します。
echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="03e7", MODE="0666", GROUP="plugdev"' | sudo tee /etc/udev/rules.d/99-luxonis.rules
パスワードを入力して、ルールの設定がされます。
以上で設定が完了しました。
実際に動作させてみましょう。
サンプルプログラム
OAK-D S2を使って手を検出し、人差し指の先端をターゲットにする
簡単なサンプルプログラムを作成します。
AIカメラ「OAK-D S2」を使った、サンプルプログラムの動作は
手を検出し、人差し指の先端をターゲットとしてマーク(緑の円)骨格を描画し、
手のランドマークを表示します。
‘q’キーでプログラム終了します。
<指の動きを認識する OAK-D S2 用サンプルプログラム>
import cv2
import depthai as dai
import mediapipe as mp
# Mediapipe の初期化
mp_hands = mp.solutions.hands
mp_drawing = mp.solutions.drawing_utils
def create_pipeline():
"""OAK-D S2 のパイプラインを作成"""
pipeline = dai.Pipeline()
# RGB カメラノードを作成
cam_rgb = pipeline.create(dai.node.ColorCamera)
cam_rgb.setPreviewSize(640, 480)
cam_rgb.setInterleaved(False)
cam_rgb.setFps(30)
# XLinkOut ノード(データ出力用)
xout_rgb = pipeline.create(dai.node.XLinkOut)
xout_rgb.setStreamName("video")
cam_rgb.preview.link(xout_rgb.input)
return pipeline
def start_camera():
"""OAK-D S2 を使用して手を検出し、指の動きを認識する"""
pipeline = create_pipeline()
# DepthAI デバイスと接続
with dai.Device(pipeline) as device:
video_queue = device.getOutputQueue(name="video", maxSize=1, blocking=False)
with mp_hands.Hands(
max_num_hands=1,
min_detection_confidence=0.7,
min_tracking_confidence=0.5) as hands:
while True:
# フレームを取得
in_frame = video_queue.get()
frame = in_frame.getCvFrame()
image = cv2.flip(frame, 1) # 左右反転
# MediaPipe で処理するために RGB 変換
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
results = hands.process(image_rgb)
if results.multi_hand_landmarks:
for hand_landmarks in results.multi_hand_landmarks:
# 人差し指の先端座標を取得
index_finger_tip = hand_landmarks.landmark[mp_hands.HandLandmark.INDEX_FINGER_TIP]
h, w, _ = image.shape
x, y = int(index_finger_tip.x * w), int(index_finger_tip.y * h)
# 指先にターゲットマークを表示
cv2.circle(image, (x, y), 10, (0, 255, 0), -1)
cv2.putText(image, "Index Finger", (x + 10, y - 10),
cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)
# 骨格を描画
mp_drawing.draw_landmarks(image, hand_landmarks, mp_hands.HAND_CONNECTIONS)
# 画像を表示
cv2.imshow('Finger Tracking (OAK-D S2)', image)
# 'q'キーで終了
if cv2.waitKey(5) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()
# カメラ開始
start_camera()
このコードを実行してみます。

手の動きを検出し、指の位置をリアルタイムで確認できます!
他の指の認識や、ジェスチャーの判定を追加することも可能です。
AIカメラ「OAK-D S2」をUSB電源で使用する際の注意点
AIカメラ「OAK-D S2」は、USB 3.0 接続を使用する高性能なデバイスですが、
使用環境によっては十分な電力を供給できない場合があります。
特に、Jetson Nano に接続する際、デフォルトの USB ポートの出力が 500mA に
制限されているため、動作が不安定になる可能性があります。
Jetson Nano の USB ポートはデフォルトで 500mA の電流しか供給できません。
OAK-D S2 は動作時には 900mA 以上 の電流を必要とする場合があります。
そのため、Jetson Nano に直接接続すると、
以下のような問題が発生することがあります。
①動作が不安定になる(カメラが正常に認識されない・フリーズする)
②デバイスが認識されない(USB接続が途切れる)
③映像処理時に電力不足で動作が遅くなる
USB電源から安定供給する方法
OAK-D S2 を Jetson Nano に接続して安定動作させるには、
以下のいずれかの方法を採用します。
① 外部USB電源を使用する(推奨)

OAK-D S2 には USB Type-Cポート があり、外部電源(5V/2A以上) を
接続することで安定動作が可能です。
【必要なもの】
電源分離アダプタ
5V/2A 以上の USB アダプタ
USB Type-C ケーブル
接続手順
OAK-D S2 の USB Type-C ポートに、5V/2A 以上のUSB電源を接続
Jetson Nano の USB 3.0 ポートに、USB Type-C ケーブルで OAK-D S2 を接続
コマンドでデバイスが認識されているか確認
lsusb
Jetson Nano の USB 電流制限を解除する
Jetson Nano には、USB ポートの電流制限を解除し、最大 1.2A まで供給する
設定があります。
ターミナルを開き、以下のコマンドを実行します。
echo 1 | sudo tee /sys/kernel/debug/usb/../authorized
設定を固定化する場合は、rc.local に追加
sudo nano /etc/rc.local
以下の行を追加(exit 0 の前に記述)
echo 1 > /sys/kernel/debug/usb/../authorized
保存して Jetson Nano を再起動
sudo reboot
この方法は Jetson Nano の電力供給能力に依存するため、
電源アダプタが 5V/4A 以上 であることが必要です。
まとめ
AIカメラ「OAK-D S2」 を使用して、手の指を検知する方法を解説しました。
・OAK-D S2のセットアップ方法
・DepthAIのインストールと接続確認
・手の検出プログラムの実装
Jetson Nano に接続する際の USB電源の供給方法 や、指のランドマークを
活用した検出方法 について詳しく紹介しました。
OAK-D S2 の活用により、リアルタイムで高速で手指トラッキングが可能になり、
ジェスチャー操作やAIへの応用が広がります。
また、電力供給の最適化により、より安定した動作を実現できることも確認しました。
複数の指の動きに応じたアクション設定 や、ジェスチャー認識の精度向上に
挑戦するのも面白いでしょう。
OAK-D S2 と Jetson Nano を活用し、さまざまなAIアプリケーションを
作ってみてください!
