コンテンツへスキップ

Ultralytics YOLO11を使用したオブジェクトのカウント

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

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


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

見るんだ: Ultralytics YOLO11を用いたクラス別オブジェクトカウント

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

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

実世界での応用

物流水産養殖
Ultralytics YOLO11 を使用したコンベヤベルトパケットカウントUltralytics YOLO11を使った海の魚のカウント
Ultralytics YOLO11 を使用したコンベヤベルトパケットカウントUltralytics YOLO11を使った海の魚のカウント

YOLO11を使ったオブジェクト・カウントの例

# Run a counting example
yolo solutions count show=True

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

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

from ultralytics import solutions

cap = cv2.VideoCapture("path/to/video/file.mp4")
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))

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

# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Init Object Counter
counter = solutions.ObjectCounter(
    show=True,  # Display the output
    region=region_points,  # Pass region points
    model="yolo11n.pt",  # model="yolo11n-obb.pt" for object counting using YOLO11 OBB model.
    # classes=[0, 2],  # If you want to count specific classes i.e person and car with COCO pretrained model.
    # show_in=True,  # Display in counts
    # show_out=True,  # Display out counts
    # line_width=2,  # Adjust the line width for bounding boxes and text display
)

# Process video
while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    im0 = counter.count(im0)
    video_writer.write(im0)

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

議論 ObjectCounter

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

名称タイプデフォルト説明
modelstrNoneUltralytics YOLO モデルファイルへのパス
regionlist[(20, 400), (1260, 400)]カウント領域を定義する点のリスト。
line_widthint2バウンディングボックスの線の太さ。
showboolFalseビデオストリームを表示するかどうかを制御するフラグ。
show_inboolTrueビデオストリームにインカウントを表示するかどうかを制御するフラグ。
show_outboolTrueビデオストリームにアウトカウントを表示するかどうかを制御するフラグ。

議論 model.track

議論タイプデフォルト説明
sourcestrNone画像や動画のソースディレクトリを指定します。ファイルパスとURLをサポートします。
persistboolFalseフレーム間のオブジェクトの永続的なトラッキングを可能にし、ビデオシーケンス間のIDを維持します。
trackerstrbotsort.yaml使用するトラッキングアルゴリズムを指定する、 bytetrack.yaml または botsort.yaml.
conffloat0.3検出の信頼しきい値を設定します。低い値ではより多くのオブジェクトを追跡できますが、誤検出を含む可能性があります。
ioufloat0.5重複検出をフィルタリングするためのIoU(Intersection over Union)しきい値を設定します。
classeslistNoneクラス・インデックスによって結果をフィルタリングする。例えば classes=[0, 2, 3] は指定されたクラスのみを追跡する。
verboseboolTrueトラッキング結果の表示をコントロールし、トラッキングされたオブジェクトのビジュアル出力を提供します。

よくあるご質問

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, 404), (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 video processing has been successfully completed.")
            break
        im0 = counter.count(im0)
        video_writer.write(im0)

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


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

その他の設定やオプションについては、オブジェクト・カウントのセクションを参照してください。

Ultralytics YOLO11を物体計測に使う利点は何ですか?

Ultralytics YOLO11を物体カウントに使用すると、いくつかの利点がある:

  1. リソースの最適化正確な計数を提供することで効率的なリソース管理を促進し、在庫管理などの産業におけるリソース配分の最適化を支援する。
  2. セキュリティの強化:エンティティの正確な追跡とカウントにより、セキュリティと監視を強化し、脅威の事前検知を支援します。
  3. 情報に基づいた意思決定意思決定のための貴重な洞察を提供し、小売、交通管理などの領域におけるプロセスを最適化します。

実際のアプリケーションとコード例については、オブジェクト・カウントの利点のセクションをご覧ください。

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 video processing has been successfully completed.")
            break
        im0 = counter.count(im0)
        video_writer.write(im0)

    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 (例:人と車)。

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

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

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

Ultralytics YOLO11Documentationで、その特徴や性能比較について深く掘り下げている。

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

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

  • 群衆分析:大規模な集まりを監視・管理し、安全を確保し、群衆の流れを最適化する。
  • 交通管理:車両を追跡・カウントし、交通パターンを分析し、渋滞をリアルタイムで管理します。

より詳細な情報と実装の詳細については、YOLO11によるオブジェクト・カウントの実世界での応用に関するガイドを参照してください。

📅作成 11ヶ月前 ✏️更新 9日前

コメント