コンテンツへスキップ

オブジェクト・カウントUltralytics YOLO11

オブジェクト・カウントとは何か?

オープン・オブジェクト・カウント

による物体計数では、ビデオやカメラストリーム内の特定の物体を正確に識別し、計数します。 Ultralytics YOLO11YOLO11 、リアルタイムアプリケーションに優れており、最先端のアルゴリズムとディープラーニング機能により、群衆分析や監視などのさまざまなシナリオで効率的かつ正確なオブジェクト計数を提供します。



見るんだ: クラス別オブジェクト・カウントUltralytics YOLOv8

オブジェクト・カウントの利点

  • リソースの最適化:オブジェクトカウンティングは、正確なカウントを提供することで効率的なリソース管理を促進し、在庫管理などのアプリケーションにおけるリソース割り当てを最適化します。
  • セキュリティの強化:物体計数は、実体を正確に追跡して計数することで、セキュリティと監視を強化し、事前の脅威検知を支援します。
  • 情報に基づいた意思決定オブジェクトカウンティングは、意思決定、小売、交通管理、その他様々な領域におけるプロセスの最適化に貴重な洞察を提供します。

実世界での応用

物流 水産養殖
ベルトコンベアによるパケットカウントUltralytics YOLO11 海での魚の数え方Ultralytics YOLO11
ベルトコンベアによるパケットカウントUltralytics YOLO11 海での魚の数え方Ultralytics YOLO11

Ultralytics YOLO使用したオブジェクト・カウント

# Run a counting example
yolo solutions count show=True

# Pass a source video
yolo solutions count source="path/to/video.mp4"

# Pass region coordinates
yolo solutions count region="[(20, 400), (1080, 400), (1080, 360), (20, 360)]"
import cv2

from ultralytics import solutions

cap = cv2.VideoCapture("path/to/video.mp4")
assert cap.isOpened(), "Error reading video file"

# region_points = [(20, 400), (1080, 400)]                                      # line counting
region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360)]  # rectangle region
# region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360), (20, 400)]   # polygon region

# 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("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Initialize object counter object
counter = solutions.ObjectCounter(
    show=True,  # display the output
    region=region_points,  # pass region points
    model="yolo11n.pt",  # model="yolo11n-obb.pt" for object counting with OBB model.
    # classes=[0, 2],  # count specific classes i.e. person and car with COCO pretrained model.
    # tracker="botsort.yaml",  # choose trackers i.e "bytetrack.yaml"
)

# Process video
while cap.isOpened():
    success, im0 = cap.read()

    if not success:
        print("Video frame is empty or processing is complete.")
        break

    results = counter(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 windows

ObjectCounter 議論

以下はその表である。 ObjectCounter という議論がある:

議論 タイプ デフォルト 説明
model str None Ultralytics YOLO モデルファイルへのパス。
show_in bool True ビデオストリームにインカウントを表示するかどうかを制御するフラグ。
show_out bool True ビデオストリームにアウトカウントを表示するかどうかを制御するフラグ。
region list [(20, 400), (1260, 400)] カウント領域を定義する点のリスト。

について ObjectCounter ソリューションでは、複数の track という議論がある:

議論 タイプ デフォルト 説明
tracker str 'botsort.yaml' 使用するトラッキングアルゴリズムを指定する、 bytetrack.yaml または botsort.yaml.
conf float 0.3 検出の信頼しきい値を設定します。低い値ではより多くのオブジェクトを追跡できますが、誤検出を含む可能性があります。
iou float 0.5 重複検出をフィルタリングするためのIoU(Intersection over Union)しきい値を設定します。
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 None or int None バウンディングボックスの線幅を指定します。もし None線幅は画像サイズに応じて自動的に調整されます。視覚的にわかりやすくカスタマイズできます。

よくあるご質問

Ultralytics YOLO11 を使ってビデオ内のオブジェクトを数えるには?

Ultralytics YOLO11 を使用してビデオ内のオブジェクトをカウントするには、次の手順に従います:

  1. 必要なライブラリをインポートするcv2, ultralytics).
  2. 計数領域を定義する(多角形、線など)。
  3. ビデオキャプチャを設定し、オブジェクトカウンターを初期化する。
  4. 各フレームを処理してオブジェクトを追跡し、定義された領域内でカウントする。

以下は、地域でカウントする簡単な例である:

import cv2

from ultralytics import solutions


def count_objects_in_region(video_path, output_video_path, model_path):
    """Count objects in a specific region within a video."""
    cap = cv2.VideoCapture(video_path)
    assert cap.isOpened(), "Error reading video file"
    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(output_video_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

    region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360)]
    counter = solutions.ObjectCounter(show=True, region=region_points, model=model_path)

    while cap.isOpened():
        success, im0 = cap.read()
        if not success:
            print("Video frame is empty or processing is complete.")
            break
        results = counter(im0)
        video_writer.write(results.plot_im)

    cap.release()
    video_writer.release()
    cv2.destroyAllWindows()


count_objects_in_region("path/to/video.mp4", "output_video.avi", "yolo11n.pt")

より高度な構成とオプションについては、複数のリージョン内のオブジェクトを同時にカウントするRegionCounterソリューションをチェックしてください。

Ultralytics YOLO11 、物体カウントに使用する利点は?

Ultralytics YOLO11 を物体計数に使用すると、いくつかの利点がある:

  1. リソースの最適化正確な計数を提供することで効率的なリソース管理を促進し、在庫管理などの産業におけるリソース配分の最適化を支援する。
  2. セキュリティの強化:エンティティの正確な追跡とカウントにより、セキュリティと監視を強化し、事前の脅威検知とセキュリティシステムを支援します。
  3. 情報に基づいた意思決定意思決定のための貴重な洞察を提供し、小売、交通管理などの領域におけるプロセスを最適化します。
  4. リアルタイム処理: YOLO11アーキテクチャはリアルタイム推論を可能にし、ライブビデオストリームや時間に敏感なアプリケーションに適している。

実装例と実用的なアプリケーションについては、特定のゾーンで物体を追跡するTrackZoneソリューションをご覧ください。

Ultralytics YOLO11 を使って特定のクラスのオブジェクトを数えるには?

Ultralytics YOLO11 を使ってオブジェクトの特定のクラスをカウントするには、トラッキングの段階で、関心のあるクラスを指定する必要がある。以下はPython の例である:

import cv2

from ultralytics import solutions


def count_specific_classes(video_path, output_video_path, model_path, classes_to_count):
    """Count specific classes of objects in a video."""
    cap = cv2.VideoCapture(video_path)
    assert cap.isOpened(), "Error reading video file"
    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(output_video_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

    line_points = [(20, 400), (1080, 400)]
    counter = solutions.ObjectCounter(show=True, region=line_points, model=model_path, classes=classes_to_count)

    while cap.isOpened():
        success, im0 = cap.read()
        if not success:
            print("Video frame is empty or processing is complete.")
            break
        results = counter(im0)
        video_writer.write(results.plot_im)

    cap.release()
    video_writer.release()
    cv2.destroyAllWindows()


count_specific_classes("path/to/video.mp4", "output_specific_classes.avi", "yolo11n.pt", [0, 2])

この例では classes_to_count=[0, 2] クラスのオブジェクトを数えることを意味する。 0 そして 2 (例えば、COCO データセットでは person と car)。クラスインデックスについての詳細は COCOデータセット・ドキュメント.

なぜリアルタイム・アプリケーションに他の物体検出モデルではなく、YOLO11 を使う必要があるのか?

Ultralytics YOLO11 、Faster R-CNN、SSD、および以前のYOLO バージョンのような他の物体検出モデルと比較して、いくつかの利点を提供します:

  1. スピードと効率: YOLO11 リアルタイム処理能力を備えており、監視や自律走行など高速推論を必要とするアプリケーションに最適です。
  2. 精度物体の検出と追跡タスクに最先端の精度を提供し、誤検出の数を減らし、システム全体の信頼性を向上させます。
  3. 統合の容易さ: YOLO11 、最新のAIアプリケーションに不可欠な、モバイルやエッジデバイスを含む様々なプラットフォームやデバイスとのシームレスな統合を提供します。
  4. 柔軟性:特定のユースケースの要件を満たすために設定可能なモデルで、オブジェクト検出、セグメンテーション、トラッキングなどのさまざまなタスクをサポートします。

Ultralytics YOLO11 ドキュメントで、その機能と性能比較についてさらに深く掘り下げてご覧ください。

YOLO11 、群衆分析や交通管理のような高度なアプリケーションに使用できますか?

そう、Ultralytics YOLO11 、そのリアルタイム検出能力、拡張性、統合の柔軟性により、群衆分析や交通管理などの高度なアプリケーションに完璧に適している。その高度な機能により、動的な環境でも高精度の物体追跡、カウント、分類が可能です。使用例

  • 群衆分析:大規模な集会を監視・管理し、安全を確保し、地域ベースのカウントで群集の流れを最適化します。
  • 交通管理:車両の追跡とカウント、交通パターンの分析、速度推定機能によるリアルタイムの渋滞管理。
  • リテール・アナリティクス顧客の移動パターンや商品とのインタラクションを分析し、店舗レイアウトの最適化と顧客体験の向上を図る。
  • 産業オートメーション:ベルトコンベア上の製品をカウントし、生産ラインを監視して品質管理と効率向上を図る。

より専門的なアプリケーションについては、Ultralytics ソリューションをご覧ください。

📅作成:1年前 ✏️更新 5日前

コメント