Python OpenCVで固定UI上の画像グループを高精度認識・追跡する設計方法|差分検出と状態管理の考え方

プログラミング

固定されたUI上に追加される小さな画像やアイコンのグループをリアルタイムで認識する場合、単純な画像認識だけでは高精度な判定が難しいことがあります。特に、一度表示された要素が長時間残るUIでは、一瞬の画像判定よりも「状態を管理する仕組み」を組み合わせることが重要です。

この記事では、PythonとOpenCVを利用して、決まった位置に追加される画像グループを誤検出を抑えながら追跡するための設計方法について解説します。

固定UIの画像認識では物体検出より状態管理が重要

画面上の決まった位置に画像が表示され、表示後は長時間維持される場合、毎フレームごとに新しい物体を探す設計は最適ではありません。

例えばゲームや業務アプリのように、画面内の特定エリアに最大4つまで画像グループが追加される仕組みの場合、「現在その場所に何が存在しているか」を記録して管理する方が誤検出を減らせます。

このようなケースでは、YOLOなどの汎用物体検出モデルよりも、固定スロットごとの状態管理と画像認識を組み合わせた方式が向いています。

おすすめの設計はスロット単位のステートマシン方式

固定UIの場合、まず画面内の画像が出現する可能性がある場所をスロットとして定義します。

例えば4つの表示位置がある場合、それぞれに以下のような状態を持たせます。

状態 意味
EMPTY 何も表示されていない状態
DETECTING 新しい画像候補を検出した状態
CONFIRMED 複数フレームで確認済みの状態
HIDDEN 一時的に隠れている可能性がある状態

このように状態を保持すると、一瞬だけ背景変化が発生した場合でも、すぐに新しいグループとして登録することを防げます。

例えば、3フレーム連続で同じ特徴を確認した場合のみ追加確定する、数秒間見えなくても削除しない、といったルールを設定できます。

検出部分は差分処理とテンプレートマッチングの組み合わせが有効

新しいグループが追加された瞬間を検出する場合、現在利用しているフレーム差分は有効な方法です。ただし、差分だけでは背景変化や演出による誤検出が発生しやすくなります。

そのため、以下のような2段階判定がおすすめです。

  • 第1段階:ROI内の差分で変化を検出する
  • 第2段階:テンプレートマッチングや特徴量比較で本物か確認する

例えば、画面の一部が光る演出が入った場合でも、差分だけなら新しい画像として認識される可能性があります。しかし、その後テンプレートとの一致率を確認すれば、本当に目的の画像なのか判断できます。

小さい画像の種類判定には特徴量や専用分類が有効

数十ピクセル程度の小さい画像を種類ごとに判別する場合、単純なテンプレートマッチングだけでは回転や重なりに弱くなります。

横向きになるパターンや一部が隠れるケースがある場合は、以下のような方法を検討できます。

  • ORBなどの特徴点ベース認識
  • SIFTなどによる特徴量比較
  • 画像分類モデルによる判定
  • 複数テンプレートによる比較

例えば同じ画像でも90度回転した状態や少し隠れた状態をテンプレートとして複数登録しておくことで、認識率を向上できます。

一時的に隠れる画像は削除せず追跡する

表示された画像が演出などで数秒消える場合、見えなくなった瞬間に状態をリセットすると誤判定につながります。

このような場合は、トラッキングの考え方を取り入れます。

例えば、最後に確認できた位置、画像種類、出現時刻を保存しておき、一定時間以内なら「一時非表示」と判断します。

実際の処理では以下のようなルールを設定すると安定します。

  • 5秒以内の消失は維持する
  • 一定時間以上消えた場合のみ削除する
  • 再表示時は以前の状態と比較する

YOLOなどの物体検出モデルが向いているケース

YOLOなどの深層学習による物体検出は強力ですが、今回のような固定UIでは必ずしも最適とは限りません。

物体検出モデルは画面内のどこに何があるか分からない状況で力を発揮します。しかし、表示位置が固定され、最大数も決まっている場合は、ルールベースとOpenCV処理の方が高速で安定する場合があります。

ただし、画像種類が非常に多い、表示パターンが複雑、背景変化が激しい場合は、YOLOや画像分類モデルを組み合わせる価値があります。

高精度認識を目指す場合の推奨構成

今回のような「固定位置に追加され、長時間残る画像グループ」の場合、以下の構成がバランスの良い設計になります。

  1. 固定ROIで対象エリアを取得
  2. 差分検出で変化を検知
  3. テンプレートや特徴量で候補確認
  4. ステートマシンで状態管理
  5. 複数フレームによる多数決
  6. 一定時間の消失許容

重要なのは、画像認識だけで完全な答えを出そうとしないことです。UIの仕様そのものを利用し、「一度認識した情報を信用して管理する」ことで誤検出を大幅に減らせます。

まとめ

固定UI上に追加される画像グループを高精度に認識する場合、単純なテンプレートマッチングや物体検出だけでは限界があります。

表示場所が決まっていて、一度表示された画像が長時間残るという特徴を活かし、スロットごとのステートマシン方式で管理する設計が最も適しています。

差分検出、テンプレートマッチング、特徴量判定、時系列追跡を組み合わせることで、誤検出を限りなく少なくした安定した画像認識システムを構築できます。

コメント

タイトルとURLをコピーしました