Ultralytics YOLO26を使用した距離計算#
距離計算とは何ですか?#
距離計算とは、画像またはビデオフレーム内で検出された2つのオブジェクト間の空間を測定するプロセスです。Ultralytics YOLO26では、バウンディングボックスの重心を使用して、ユーザーが指定したバウンディングボックス間の距離を計算します。
Watch: How to estimate distance between detected objects with Ultralytics YOLO in Pixels 🚀
ビジュアル#
| Ultralytics YOLO26を使用した距離計算 |
|---|
![]() |
距離計算の利点#
- 位置特定の精度: コンピュータービジョンタスクにおける正確な空間的位置付けを向上させます。
- サイズ推定: オブジェクトのサイズを推定し、より適切なコンテキスト理解を可能にします。
- シーン理解: 自動運転車や監視システムなどのアプリケーションにおいて、3Dシーンの理解を向上させ、より良い意思決定を支援します。
- 衝突回避: 移動するオブジェクト間の距離を監視することで、システムが衝突の可能性を検出できるようにします。
- 空間分析: 監視対象の環境内におけるオブジェクト間の関係や相互作用の分析を容易にします。
距離計算
- マウスの左ボタンで任意の2つのバウンディングボックスをクリックすると、距離を計算できます。
- マウスの右ボタンを使用すると、描画したすべてのポイントを削除できます。
距離は推定値です
距離は推 定値であり、深度情報を持たない2Dデータを使用して計算されるため、完全に正確とは限らない場合があります。
YOLO26で距離を計算する#
DistanceCalculationソリューションはフレーム間でオブジェクトを追跡し、マウスで選択した任意の2つのバウンディングボックスの重心間のユークリッド距離をピクセル単位で測定します。以下の例を実行し、2つのオブジェクトを左クリックして接続線を描画し、距離を確認します。右クリックすると選択を解除できます。
import cv2
from ultralytics import solutions
cap = cv2.VideoCapture("path/to/video.mp4")
assert cap.isOpened(), "Error reading video file"
# Video writer
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
video_writer = cv2.VideoWriter("distance_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
# Initialize distance calculation object
distancecalculator = solutions.DistanceCalculation(
model="yolo26n.pt", # path to the YOLO26 model file.
show=True, # display the output
)
# Process video
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or processing is complete.")
break
results = distancecalculator(im0)
print(results) # access the output
video_writer.write(results.plot_im) # write the processed frame.
cap.release()
video_writer.release()
cv2.destroyAllWindows() # destroy all opened windowsDistanceCalculation()の引数#
以下にDistanceCalculationの引数を示します。
| 引数 | 型 | デフォルト | 説明 |
|---|---|---|---|
model | str | None | Ultralytics YOLOモデルファイルへのパスです。 |
line_width | int | 2 | ソリューションが描画するボックス、キーポイント、カウントの線の太さです。 |
verbose | bool | True | 入力形状、クラス数、処理速度をフレームごとにログに記録する機能を有効にします。トラッキング処理自体は常にサイレントです。 |
DistanceCalculationソリューションでは、さまざまなtrack引数も使用できます。
| 引数 | 型 | デフォルト | 説明 |
|---|---|---|---|
tracker | str | 'botsort.yaml' | 使用するトラッキングアルゴリズムを指定します。組み込みオプション:botsort.yaml、bytetrack.yaml、ocsort.yaml、deepocsort.yaml、fasttrack.yaml、tracktrack.yaml。 |
conf | float | 0.25 | 検出の信頼度しきい値を設定します。値を下げるとより多くのオブジェクトを追跡できますが、誤検出が含まれる可能性があります。 |
iou | float | 0.7 | 重複する検出結果をフィルタリングするためのIntersection over Union(IoU)しきい値を設定します。 |
classes | list | None | クラスインデックスで結果をフィルタリングします。たとえば、classes=[0, 2, 3]は指定されたクラスのみを追跡します。 |
device | str | None | 推論に使用するデバイスを指定します(例:cpu、cuda:0、0)。CPU、特定のGPU、その他の計算デバイスから、モデルの実行に使用するものを選択できます。 |
imgsz | int or tuple | 640 | 推論対象の画像サイズ:正方形の場合は整数、または (height, width) のペアです。形状はモデルのストライドに合わせて調整されます。 |
max_det | int | 300 | トラッキング前にフレームごとに保持される検出の最大数。高密度なシーンにおいてソリューションが処理するオブジェクトの数を制限します。 |
quantize | int or str | None | 推論精度:PyTorchおよびTorchScriptモデルの場合は 16 (FP16)または 32 /未設定(FP32);その他のフォーマットは、その成果物とランタイムが選択する精度で計算を行います。非推奨となった half フラグに置き換わるものです。 |
さらに、次の可視化引数を利用できます。
| 引数 | 型 | デフォルト | 説明 |
|---|---|---|---|
show | bool | False | Trueの場合、注釈付きの画像または動画をウィンドウに表示します。開発やテスト中の即時の視覚的フィードバックに役立ちます。 |
show_conf | bool | True | 各検出のラベルの横に信頼度スコアを表示します。各検出に対するモデルの確信度を確認できます。 |
show_labels | bool | True | 可視化出力に各検出のラベルを表示します。検出されたオブジェクトをすぐに把握できます。 |
実装の詳細#
DistanceCalculationクラスは、ビデオフレーム間でオブジェクトを追跡し、選択したバウンディングボックスの重心間のユークリッド距離を計算します。2つのオブジェクトをクリックすると、ソリューションは次の処理を行います。
- 選択したバウンディングボックスの重心(中心点)を抽出します
- これらの重心間のユークリッド距離をピクセル単位で計算します
- オブジェクト間の接続線とともに、フレーム上に距離を表示します
実装では、マウス操作を処理するためにmouse_event_for_distanceメソッドを使用し、必要に応じてユーザーがオブジェクトを選択したり、選択を解除したりできるようにします。processメソッドは、フレームごとの処理、オブジェクトの追跡、距離の計算を行います。
アプリケーション#
YOLO26による距離計算には、次のような実用的な用途があります。
- 小売分析: 顧客と商品との距離を測定し、店舗レイアウトの有効性を分析します
- 産業安全: 作業員と機械の間の安全な距離を監視します
- 交通管理: 車両間の間隔を分析し、車間距離不保持を検出します
- スポーツ分析: 選手、ボール、フィールド上の主要な位置間の距離を計算します
- ヘルスケア: 待合エリアで適切な距離を確保し、患者の移動を監視します
- ロボティクス: ロボットが障害物や人から適切な距離を保てるようにします
FAQ#
Ultralytics YOLO26を使用してオブジェクト間の距離を計算するには、検出されたオブジェクトのバウンディングボックスの重心を特定する必要があります。このプロセスでは、Ultralyticsの
solutionsモジュールからDistanceCalculationクラスを初期化し、モデルのトラッキング出力を使用して距離を計算します。はい、Ultralytics YOLO26を使用してリアルタイムのビデオストリームに対して距離計算を実行できます。このプロセスでは、OpenCVを使用してビデオフレームをキャプチャし、YOLO26でオブジェクト検出を実行し、
DistanceCalculationクラスを使用して連続するフレーム内のオブジェクト間の距離を計算します。詳細な実装については、ビデオストリームの例を参照してください。Ultralytics YOLO26で距離計算中に描画したポイントを削除するには、マウスを右クリックします。この操作により、描画したすべてのポイントが消去されます。詳細については、距離計算の例の下にある注記セクションを参照してください。
Ultralytics YOLO26で
DistanceCalculationクラスを初期化する際の主な引数は次のとおりです。model: YOLO26モデルファイルへのパスです。tracker: 使用するトラッキングアルゴリズムです(ソリューションのデフォルトはbotsort.yamlです)。conf: 検出の信頼度しきい値です。show: 出力を表示するためのフラグです。
一覧とデフォルト値については、DistanceCalculationの引数を参照してください。
