クイックスタートガイド

DepthAI SDKは、Luxonisデバイスを使用してコンピュータビジョンアプリケーションを構築するための強力なツールです。このクイックスタートガイドは、SDKを使い始めるのに役立ちます。

インストール

DepthAI SDKはPyPIで入手可能です。以下のコマンドでインストールできます:

# Linux と macOS
python3 -m pip install depthai-sdk

# Windows
 py -m pip install depthai-sdk

カメラを使う

OakCameraクラスはDepthAI SDKの基本的な部分で、OAKデバイスの各機能にアクセスするための高レベルなインターフェースを提供します。このクラスは、OAKカメラからビデオをキャプチャし、ビデオストリーム上でニューラルネットワークを実行し、結果を可視化するパイプラインの作成を簡素化します。

OakCameraを使用すると、create_camera()create_stereo()でカラーストリームと深度ストリームを簡単に作成でき、create_nn()で事前に訓練されたニューラルネットワークを追加できます。さらに、callback()でパイプラインにカスタムコールバックを追加し、record()で出力を記録することができます。

ブロック動作

OakCameraオブジェクトを起動する際に、start()がメインスレッドをブロックするかどうかを指定できます。デフォルトでは、start()はメインスレッドをブロックしないので、oak.poll()でカメラをポーリングする必要があります。

from depthai_sdk import OakCamera

with OakCamera() as oak:
    color = oak.create_camera('color', resolution='1080p')
    oak.visualize([color])
    oak.start(blocking=False)

    while oak.running():
        oak.poll()
        # this code is executed while the pipeline is running

別の方法として、blocking引数をTrueに設定すると、ループして継続的にカメラをポーリングし、残りのコードをブロックします。

from depthai_sdk import OakCamera

with OakCamera() as oak:
    color = oak.create_camera('color', resolution='1080p')
    oak.visualize([color])
    oak.start(blocking=True)
    # this code doesn't execute until the pipeline is stopped

カラーストリームと深度ストリームの作成

カラーストリームを作成するには、OakCamera.create_camera()を使用します。このコードはセンサーの名前を引数として受け取り、CameraComponentオブジェクトを返します。

サポートされるセンサーの全リストは、color; left; right; cam_{socket},color, cam_{socket},monoです。 {socket}はOAK デバイス上のソケットを表すAからHまでの文字です。FFCデバイスでは通常カスタムソケット名が使用されます。

ストリームを可視化するには、OakCamera.visualize()を使用します。このコードは出力のリストを受け取り、それらを表示します。各コンポーネントには独自の出力があり、コンポーネントのセクションで確認できます。

以下は、カラーストリームと深度ストリームを作成し、ストリームを視覚化する例です:

from depthai_sdk import OakCamera

with OakCamera() as oak:
    color = oak.create_camera('color', resolution='1080p')
    stereo = oak.create_stereo(resolution='800p')  # works with stereo devices only!
    oak.visualize([color, stereo])
    oak.start(blocking=True)

物体検出用YOLOニューラルネットワークの作成

DepthAI SDKは、オブジェクト検出、ポーズ推定、セマンティックセグメンテーション、およびその他のタスクに使用できる、事前にトレーニングされたニューラルネットワークを多数提供しています。ニューラルネットワークを作成するには、OakCamera.create_nn()を使用し、引数としてニューラルネットワークの名前を指定します。

OakCamera.create_camera()と同様に、OakCamera.create_nn() は、NNComponentオブジェクトを返します。

以下は、物体検出用のYOLOニューラルネットワークを作成し、その結果を視覚化する例です:

from depthai_sdk import OakCamera

with OakCamera() as oak:
    color = oak.create_camera('color', resolution='1080p')
    # List of models that are supported out-of-the-box by the SDK:
    # https://docs.luxonis.com/projects/sdk/en/latest/features/ai_models/#sdk-supported-models
    yolo = oak.create_nn('yolov6n_coco_640x640', input=color)

    oak.visualize([color, yolo])
    oak.start(blocking=True)

カスタムコールバックの追加

コールバックはカメラやニューラルネットワークから新しいフレームが利用可能になったときに呼び出される関数です。OakCameraOakCamera.callback()を使用してパイプラインにカスタムコールバックを追加する機能を提供します。

以下は、オブジェクト検出用にYOLOニューラルネットワークを作成し、検出されたオブジェクトの数を表示する例です:

from depthai_sdk import OakCamera

def print_num_objects(packet):
    print(f'Number of objects detected: {len(packet.detections)}')

with OakCamera() as oak:
    color = oak.create_camera('color', resolution='1080p')
    yolo = oak.create_nn('yolov6n_coco_640x640', input=color)

    oak.callback(yolo, callback=print_num_objects)
    oak.start(blocking=True)

レコーディング

DepthAI SDKは出力を記録するためのシンプルなAPIを提供します。OakCamera.record()は出力のリストと出力ファイルへのパスを受け取ります。

以下は、物体検出用のYOLOニューラルネットワークを作成し、結果を記録する例です:

from depthai_sdk import OakCamera
from depthai_sdk.record import RecordType

with OakCamera() as oak:
    color = oak.create_camera('color', resolution='1080p')
    yolo = oak.create_nn('yolov6n_cocoo_640x640', input=color)

    oak.record([color, yolo], path='./records', record_type=RecordType.VIDEO)
    oak.start(blocking=True)

出力を記録するためにSDKによってサポートされるいくつかのフォーマットがあります:

  1. depthai_sdk.record.RecordType.VIDEO - ビデオファイルを記録します。
  2. depthai_sdk.record.RecordType.MCAP - MCAPファイルを記録します。
  3. depthai_sdk.record.RecordType.BAG - ROSバッグファイルを記録します。

出力の同期

複数の出力を同期させる必要があるケース、たとえば、カラーストリームとニューラルネットワーク出力を同時に記録する場合などでは、OakCamera.sync()を使用します。OakCamera.sync()は出力のリストを受け取り、指定されたコールバック関数に同期された出力を返します。

以下は、カラーストリームとYOLOニューラルネットワーク出力を同期させる例です:

from depthai_sdk import OakCamera

def callback(synced_packets):
    print(synced_packets)

with OakCamera() as oak:
    color = oak.create_camera('color', resolution='1080p')
    yolo = oak.create_nn('yolov6n_coco_640x640', input=color)

    oak.sync([color.out.main, yolo.out.main], callback=callback)
    oak.start(blocking=True)

エンコードされたストリーム

Luxonisデバイスは、H.264H.265MJPEGフォーマットへの出力のオンデバイスエンコーディングをサポートしています。エンコードを有効にするには、OakCamera.create_camera()またはOakCamera.create_stereo()encode引数を指定します。encode引数に指定できる値はh264h265mjpegです。

各コンポーネントはそれぞれエンコードされた出力を持ちます:

  • CameraComponent.Out.encoded
  • StereoComponent.Out.encoded
  • NNComponent.Out.encoded

以下は、エンコードされたカラー、YOLOニューラルネットワーク、視差ストリームを視覚化した例です:

from depthai_sdk import OakCamera

with OakCamera() as oak:
    color = oak.create_camera('color', resolution='1080p', fps=20, encode='h264')
    stereo = oak.create_stereo('400p', encode='h264')
    yolo = oak.create_nn('yolov6nr3_coco_640x352', input=color)

    oak.visualize([color.out.encoded, stereo.out.encoded, yolo.out.encoded])
    oak.start(blocking=True)

質問がありますか? 技術サポートやその他の質問については、ディスカッションフォーラムへどうぞ。


出典 : Luxonisの資料 - Quickstart

https://docs.luxonis.com/projects/sdk/en/latest/quickstart/

*このガイドはLuxonis社の許可を得て、スイッチサイエンスが翻訳しています。


◀︎一覧に戻る