Ultralytics YOLO27:

Ultralytics YOLO26によるリージョン内の物体カウント#

Ultralytics YOLO26RegionCounterソリューションは、動画フレーム間で物体を追跡し、各フレームで、バウンディングボックスの中心が定義した各リージョン内にある物体をカウントします。各リージョンは固有のリアルタイムカウントとともにフレーム上に描画されるため、1回のPython呼び出しまたはCLIコマンドで、店舗の通路、道路の車線、生産エリアなど複数のゾーンを監視できます。



Watch: Object Counting in Different Regions using Ultralytics YOLO | Ultralytics Solutions

リージョンカウントを使用する理由#

  • 1回の処理で複数のゾーン: 名前付きポリゴンの辞書を渡すと、各ゾーンに独立したカウントがフレーム上に描画されるため、1つの動画ストリームですべての対象エリアをカバーできます。
  • トラッキングを内蔵: このソリューションは内部でYOLO26による検出と物体追跡を実行するため、別途トラッキングパイプラインを構築する必要はありません。
  • プログラムから読み取れるカウント: 処理された各フレームは、リージョンごとのカウントを格納した辞書を持つresultsオブジェクトを返すため、ダッシュボード、アラート、ロギングですぐに利用できます。

実際の用途#

小売マーケットストリート
小売店内で描画されたポリゴンリージョン内の人物をカウントするUltralytics YOLO混雑したマーケットストリートに重ねて表示されたUltralytics YOLOのリージョンカウント
Ultralytics YOLOによるリージョン内の人物カウントUltralytics YOLOによるリージョン内の群衆カウント

Ultralytics YOLOでリージョン内の物体をカウントする方法#

CLIまたはPythonから動画ソースに対してRegionCounterソリューションを実行します。リージョンには、点のリスト(単一のゾーン)またはゾーン名を点のリストにマッピングする辞書を指定できます。以下のPython例では、名前付きの2つのリージョン内の物体をカウントし、処理済みのフレームを出力動画ファイルに書き込みます。

Ultralytics YOLOを使用したリージョンカウント
# Run a region counting example
yolo solutions region show=True

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

# Pass a custom region
yolo solutions region region="[(20, 400), (1080, 400), (1080, 360), (20, 360)]"

RegionCounter()の引数#

以下にRegionCounterの引数を示します。

引数デフォルト説明
modelstrNoneUltralytics YOLOモデルファイルへのパスです。
regionlistまたはdictNone関心領域を定義するポイントです。(x, y)タプルのリスト、または複数の領域に対応する領域名からポイントリストへの辞書(RegionCounterのみ)を指定します。Noneの場合、領域を必要とするソリューションはあらかじめ定義されたデフォルト値にフォールバックします。
line_widthint2ソリューションが描画するボックス、キーポイント、カウントの線の太さです。
verboseboolTrue入力形状、クラス数、処理速度をフレームごとにログに記録する機能を有効にします。トラッキング処理自体は常にサイレントです。

RegionCounterソリューションでは、物体追跡パラメーターを使用できます。

引数デフォルト説明
trackerstr'botsort.yaml'使用するトラッキングアルゴリズムを指定します。組み込みオプション:botsort.yamlbytetrack.yamlocsort.yamldeepocsort.yamlfasttrack.yamltracktrack.yaml
conffloat0.25検出の信頼度しきい値を設定します。値を下げるとより多くのオブジェクトを追跡できますが、誤検出が含まれる可能性があります。
ioufloat0.7重複する検出結果をフィルタリングするためのIntersection over Union(IoU)しきい値を設定します。
classeslistNoneクラスインデックスで結果をフィルタリングします。たとえば、classes=[0, 2, 3]は指定されたクラスのみを追跡します。
devicestrNone推論に使用するデバイスを指定します(例:cpucuda:00)。CPU、特定のGPU、その他の計算デバイスから、モデルの実行に使用するものを選択できます。
imgszint or tuple640推論対象の画像サイズ:正方形の場合は整数、または (height, width) のペアです。形状はモデルのストライドに合わせて調整されます。
max_detint300トラッキング前にフレームごとに保持される検出の最大数。高密度なシーンにおいてソリューションが処理するオブジェクトの数を制限します。
quantizeint or strNone推論精度:PyTorchおよびTorchScriptモデルの場合は 16 (FP16)または 32 /未設定(FP32);その他のフォーマットは、その成果物とランタイムが選択する精度で計算を行います。非推奨となった half フラグに置き換わるものです。

さらに、以下の可視化設定にも対応しています。

引数デフォルト説明
showboolFalseTrueの場合、注釈付きの画像または動画をウィンドウに表示します。開発やテスト中の即時の視覚的フィードバックに役立ちます。
show_confboolTrue各検出のラベルの横に信頼度スコアを表示します。各検出に対するモデルの確信度を確認できます。
show_labelsboolTrue可視化出力に各検出のラベルを表示します。検出されたオブジェクトをすぐに把握できます。

リージョンカウントの仕組み#

RegionCounterソリューションは、渡された各リージョンを、リージョンごとに少なくとも3つの点を持つポリゴンに変換します。点の単純なリストはRegion#01という名前の単一ゾーンになり、辞書を使うと独自のゾーン名を維持できます。各ゾーンはUltralyticsのパレットから選ばれた固有の色で描画されます。その後、各フレームは次の3つの手順で処理されます。

  1. YOLO26の追跡により、フレーム内のすべての物体を検出して追跡します
  2. 追跡対象の各物体について、ソリューションがバウンディングボックスの中心を計算し、どのリージョンポリゴンに含まれるかを確認します
  3. 各リージョンの中心にカウントを描画し、次のフレームの前にカウントをリセットします

カウントはフレームごとに再開されるため、リージョンに表示される数は現在の占有数、つまり現時点でその中にある物体の数であり、累積合計ではありません。境界を通過する物体を累積的にカウントするには、代わりにObjectCounterソリューションを使用してください。

各呼び出しはresultsオブジェクトも返します。このオブジェクトのplot_im属性にはアノテーション付きフレームが格納され、region_counts辞書はリージョン名をそのカウントにマッピングするため、数値を独自のアプリケーションロジックに渡せます。

まとめ#

Ultralytics YOLO26のRegionCounterソリューションは、数行のコードで、必要な数の名前付きゾーンにおけるリアルタイムの物体数を監視します。さらに進んだ処理として、物体カウントで境界の通過をカウントしたり、TrackZoneで単一ゾーン内の物体を追跡したり、その他のUltralytics Solutionsを確認したりできます。

FAQ#

  • Ultralytics YOLO26は、フレーム内のすべての物体を追跡し、そのバウンディングボックスの中心がユーザー定義の各ポリゴン内にあるかどうかを判定することで、リージョン内の物体をカウントします。リージョンに表示されるカウントは、そのフレームにおける現在の占有数であり、累積合計ではありません。設定オプションは、RegionCounter() Argumentsセクションに記載されています。

  • メインの例のように、ゾーン名を点のリストにマッピングする辞書としてregion引数を渡します。

    from ultralytics import solutions
    
    region_points = {
        "region-01": [(50, 50), (250, 50), (250, 250), (50, 250)],
        "region-02": [(640, 640), (780, 640), (780, 720), (640, 720)],
    }
    regioncounter = solutions.RegionCounter(region=region_points, model="yolo26n.pt", show=True)

    名前付きの各ゾーンは固有の色で描画され、独立したカウントが表示されます。

  • regioncounter(im0)呼び出しが返すオブジェクトには、リージョン名をカウントにマッピングするregion_counts辞書が含まれます。また、plot_im(アノテーション付きフレーム)とtotal_tracks(追跡対象の物体数)も含まれます。resultsオブジェクトを出力すると、利用可能なすべてのフィールドを確認できます。

  • はい。保持するクラスインデックスを指定してclasses引数を渡します。たとえば、COCOで事前学習したモデルで人物だけをカウントするにはclasses=[0]を指定します。トラッキング関連の引数の完全な一覧は、RegionCounter() Argumentsセクションにあります。

  • RegionCounterは現在のフレームで各ポリゴンゾーン内にいる物体の数を表示します。一方、ObjectCounterは、物体がラインまたはリージョンの境界を通過する際に、進入数と退出数を追跡しながら累積的にカウントします。1つ以上のゾーンのリアルタイムの占有数にはRegionCounterを使用し、進入・退出のカウントにはObjectCounterを使用してください。線状のリージョンに対応しているのはObjectCounterのみです。

コメント