potato4d/pokemon63

feat: Use diff for analyze screen shot

Opened this issue · 1 comments

About

現状は Jimp の distanceFromHash を使って、画像のハッシュ同士の距離から類似度を推定しているが、これだけだと精度の面でいくつか課題があるため、指標を追加して対処したい。

現状のアプローチ

  1. 事前に png 画像として正しく完全にトリミングが終わった画像のハッシュを用意
  2. jpeg ノイズを考慮し、ある程度甘めに背景色の同一判定を行った上で、スクリーンショットを最低限のサイズでトリミング
  3. トリミングしたスクリーンショットの画像ハッシュを取得し、すべてのポケモン画像と比較
  4. 最も近似しているものを対象のポケモンとして設定

課題点

  • サニーゴとガラルサニーゴのような、完全に同じ見た目の種族違いを検出できない
    • マホイップなど、同じ種族で色が違う場合は誤検出しても本質的には問題がない

新たに行いたいアプローチ

  1. 事前に png 画像として正しく完全にトリミングが終わった画像のハッシュを用意
  2. jpeg ノイズを考慮し、ある程度甘めに背景色の同一判定を行った上で、スクリーンショットを最低限のサイズでトリミング
  3. トリミングしたスクリーンショットの画像ハッシュを取得し、すべてのポケモン画像と比較
  4. 最も近似しているものを対象のポケモンとして設定
  5. 近似しているものが複数ある場合、 Jimp の diff も合わせて行い、 percent によって最も近いポケモンを判定する。

課題点

  • 画像を bitmap 化したすべての情報が必要となるため、ファイルサイズ・実行時間ともに肥大化する
  • やるのであれば1,2,3位の類似度がどれも極端に高い場合などに限定したい

まずアス比を追加した。一部治ったが、まだインテレオンなど無理なやつがいる。