クイックスタートガイド
クイックスタートガイド
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)
カスタムコールバックの追加
コールバックはカメラやニューラルネットワークから新しいフレームが利用可能になったときに呼び出される関数です。OakCamera
はOakCamera.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によってサポートされるいくつかのフォーマットがあります:
depthai_sdk.record.RecordType.VIDEO
- ビデオファイルを記録します。depthai_sdk.record.RecordType.MCAP
- MCAPファイルを記録します。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.264
、H.265
、MJPEG
フォーマットへの出力のオンデバイスエンコーディングをサポートしています。エンコードを有効にするには、OakCamera.create_camera()
またはOakCamera.create_stereo()
にencode
引数を指定します。encode
引数に指定できる値はh264
、h265
、mjpeg
です。
各コンポーネントはそれぞれエンコードされた出力を持ちます:
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社の許可を得て、スイッチサイエンスが翻訳しています。