Ultralytics YOLO26を使用した距離計算
距離計算とは何ですか?
指定された空間内で2つのオブジェクト間の距離を測定することを距離計算と呼びます。Ultralytics YOLO26の場合、ユーザーがハイライトしたバウンディングボックスの距離を算出するために、バウンディングボックスの重心が使用されます。
Watch: How to estimate distance between detected objects with Ultralytics YOLO in Pixels 🚀
ビジュアル
| Ultralytics YOLO26を使用した距離計算 |
|---|
![]() |
距離計算の利点
- ローカライゼーションの精度: コンピュータビジョンタスクにおける正確な空間配置を強化します。
- サイズ推定: オブジェクトのサイズを推定し、コンテキストの理解を向上させます。
- シーン理解: 自動運転車や監視システムなどのアプリケーションにおいて、意思決定を改善するための3Dシーン把握を向上させます。
- 衝突回避: 移動するオブジェクト間の距離を監視することで、潜在的な衝突をシステムが検出できるようにします。
- 空間分析: 監視環境内におけるオブジェクトの関係や相互作用の分析を容易にします。
距離計算
- マウスの左ボタンで任意の2つのバウンディングボックスをクリックすると、距離が計算されます。
- 描画されたすべてのポイントを削除するには、マウスの右ボタンを使用します。
- フレーム内の任意の場所を左クリックして、新しいポイントを追加します。
距離は推定値です
距離は推定値であり、深度情報を持たない2Dデータを使用して計算されるため、完全に正確ではない場合があります。
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 モデルファイルへのパス。 |
You can also make use of various track arguments in the DistanceCalculation solution.
| 引数 | タイプ | デフォルト | 説明 |
|---|---|---|---|
tracker | str | 'botsort.yaml' | 使用するトラッキングアルゴリズムを指定します(例:bytetrack.yamlやbotsort.yaml)。 |
conf | float | 0.1 | 検出の信頼度しきい値を設定します。低い値を指定するとより多くの物体をトラッキングできますが、偽陽性が含まれる可能性があります。 |
iou | float | 0.7 | 重なり合う検出結果をフィルタリングするためのIntersection over Union (IoU) しきい値を設定します。 |
classes | list | None | クラスインデックスで結果をフィルタリングします。例えば、classes=[0, 2, 3]と設定すると、指定されたクラスのみを追跡します。 |
verbose | bool | True | 追跡結果の表示を制御し、追跡された物体の視覚的出力を提供します。 |
device | str | None | 推論用のデバイス(例:cpu、cuda:0、0など)を指定します。ユーザーはCPU、特定のGPU、またはその他の計算デバイスを選択してモデルを実行できます。 |
さらに、以下の可視化用引数も利用可能です。
| 引数 | タイプ | デフォルト | 説明 |
|---|---|---|---|
show | bool | False | Trueの場合、注釈付き画像または動画をウィンドウに表示します。開発やテスト中に即座に視覚的フィードバックを得るのに役立ちます。 |
line_width | int or None | None | バウンディングボックスの線幅を指定します。Noneの場合、画像サイズに基づいて線幅が自動調整されます。明確化のための視覚的なカスタマイズが可能です。 |
show_conf | bool | True | ラベルとともに、各検出結果の信頼度スコアを表示します。各検出に対するモデルの確信度を把握できます。 |
show_labels | bool | True | 視覚的出力において、各検出結果にラベルを表示します。検出されたオブジェクトの即時理解を可能にします。 |
実装の詳細
DistanceCalculation クラスは、ビデオフレーム全体でオブジェクトをトラッキングし、選択されたバウンディングボックスの重心間のユークリッド距離を計算することで機能します。2つのオブジェクトをクリックすると、このソリューションは以下の処理を行います。
- 選択されたバウンディングボックスの重心(中心点)を抽出します
- これらの重心間のピクセル単位のユークリッド距離を計算します
- オブジェクト間に線を引いて、フレーム上に距離を表示します
実装では、マウス操作を処理するために mouse_event_for_distance メソッドを使用しており、ユーザーが必要に応じてオブジェクトを選択したり、選択を解除したりできるようになっています。process メソッドがフレームごとの処理、オブジェクトのトラッキング、および距離の計算を担います。
アプリケーション
YOLO26による距離計算には、多くの実用的なアプリケーションがあります。
- 小売分析: 製品への顧客の接近度を測定し、店舗レイアウトの効果を分析します
- 産業安全: 作業員と機械間の安全な距離を監視します
- 交通管理: 車両の間隔を分析し、あおり運転を検出します
- スポーツ分析: 選手、ボール、重要なフィールド位置間の距離を計算します
- ヘルスケア: 待合エリアでの適切な距離を確保し、患者の動きを監視します
- ロボティクス: ロボットが障害物や人から適切な距離を維持できるようにします
FAQ
Ultralytics YOLO26を使用してオブジェクト間の距離を計算するにはどうすればよいですか?
To calculate distances between objects using Ultralytics YOLO26, you need to identify the bounding box centroids of the detected objects. This process involves initializing the DistanceCalculation class from Ultralytics' solutions module and using the model's tracking outputs to calculate the distances.
Ultralytics YOLO26で距離計算を使用する利点は何ですか?
Ultralytics YOLO26で距離計算を使用することには、いくつかの利点があります。
- ローカライゼーションの精度: オブジェクトの正確な空間配置を提供します。
- サイズ推定: 物理的なサイズの推定を助け、より深いコンテキストの理解に貢献します。
- シーン理解: 3Dシーンの把握を向上させ、自動運転や監視などのアプリケーションにおける意思決定を改善します。
- リアルタイム処理: 計算を即座に実行するため、ライブビデオ分析に適しています。
- 統合機能: オブジェクトトラッキングや速度推定など、他のYOLO26ソリューションとシームレスに連携します。
Ultralytics YOLO26を使用してリアルタイムのビデオストリームで距離計算を実行できますか?
はい、Ultralytics YOLO26を使用してリアルタイムのビデオストリームで距離計算を実行できます。このプロセスには、OpenCVを使用したビデオフレームのキャプチャ、YOLO26のオブジェクト検出の実行、および DistanceCalculation クラスを使用した連続フレーム内のオブジェクト間の距離計算が含まれます。詳細な実装については、ビデオストリームの例を参照してください。
Ultralytics YOLO26を使用した距離計算中に描画されたポイントを削除するにはどうすればよいですか?
Ultralytics YOLO26を使用した距離計算中に描画されたポイントを削除するには、右クリックを使用します。この操作により、描画したすべてのポイントがクリアされます。詳細については、距離計算の例の下にある注釈セクションを参照してください。
Ultralytics YOLO26でDistanceCalculationクラスを初期化するための主要な引数は何ですか?
Ultralytics YOLO26で DistanceCalculation クラスを初期化するための主要な引数は以下の通りです。
model: YOLO26モデルファイルへのパス。tracker: 使用するトラッキングアルゴリズム(デフォルトは 'botsort.yaml')。conf: 検出の信頼度しきい値。show: 出力を表示するためのフラグ。
網羅的なリストとデフォルト値については、DistanceCalculationの引数を参照してください。
