読者です 読者をやめる 読者になる 読者になる

酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Pokétomoで稀にカイロスがキャタピーと誤認識されてしまう問題

poketomo 画像処理

Pokémon GO用のポケモンの個体値を計算するアプリを作っています。

個体値計算器 Pokétomo for Pokémon GO

個体値計算器 Pokétomo for Pokémon GO

  • KENJI WADA
  • ユーティリティ
  • 無料

Pokétomoではスクリーンショットを解析して個体値を求めるのですが、今回稀にカイロスがキャタピーと誤認識されてしまう問題についてメモしておきたいと思います。

個体値計算アプリでのポケモン識別について

まぁ、Pokétomo自身が他のアプリの二番煎じだったりするんですけれど、スクリーンショットからポケモン識別をおこなうサービスは他にもたくさんあります。

ざっくりと確認した限り、名前部分をOCRにかけてポケモンの識別をおこなうものが多いようです。

Pokétomoでは諸々の前提があったのもあり、僕には名前から識別する発想が出てきませんでした。例えば、

  • Pokémon GOは日本での配信が後発だった
  • Pokémon GOは多言語対応されている(言語によってポケモンの名前が一定ではない)
  • 僕自身が1匹1匹に名前をつけていた*1

確かに自分が使うために開発しているので、OCRかけて日本語だけに対応しておけばよかったな……と思いましたが、画像処理の勉強になるし、結果的にはよかったのかな……と。

Pokétomoでのポケモン識別について

Pokétomoでは名前ではなくて、ポケモン画像の部分から種族(っていうのか?)を特定しています。

当初、OpenCVのオブジェクト検出のみで対応しようと、適当な分類器を作ってかなり雑な前提で一度テストしてみたのですが、1つの分類器を使って検出させるのに20ミリ秒かかっていました。これだけならば十分に早いのですが、全ポケモン151種類を対応しようと思うと151種類x20ミリ秒(=3,020ミリ秒)もかかってしまうことがわかりました。

CPやらHPやらの解析も必要な中で、スクリーンショット1枚を解析するのに何秒も待たないといけないのは使い勝手が悪いなぁと思ったので、まずは色の頻出度で類似性である程度絞り込みをおこなってから、OpenCVでオブジェクト検出させようと思いました。

ほとんどの場合はこれで十分対応することができたようでしたので、v1.1ではポケモンの識別は色のみでおこなっています。

明らかに他と異なる配色のエレブーは0.9(90%)を超えた類似度で誤認識することが少ないですが、似た背景のポケモンの場合には誤検出してしまいました。やはり色だけでは完全ではないようです。

カイロス-キャタピー類似問題

近所ではカイロスしかでない土地柄なので、自然とカイロスのスクリーンショットを使ってテストすることが多いです。

今回の登場人物(カイロスとキャタピーを知らない人向けの情報)

f:id:ch3cooh393:20160821152841p:plain

見た目が全然違います。人間が見るとカイロスとキャタピーとは別のものだと一瞬でわかるのですが、色だけで見ると背景色の緑が強く出てしまって、カイロスをキャタピーと誤認識してしまうことがあります。

左のカイロスは「キャタピー」と認識されます。右のカイロスは「カイロス」と認識されます。

f:id:ch3cooh393:20160821151555p:plain

それぞれの類似度は以下のようになりました。正しく認識される時も誤って認識される時も認識率はめっちゃ僅差やねんな……

誤り

  1. キャタピー:0.7421875
  2. バタフリー:0.734375
  3. カイロス:0.72265625
  4. コンパン:0.6953125
  5. スピアー:0.67578125

正しい

  1. カイロス:0.78125
  2. パラセクト:0.75390625
  3. バタフリー:0.734375
  4. コンパン:0.73046875
  5. キャタピー:0.71875

v1.1ではRGBでヒストグラムを出してるんだけど、HSVでヒストグラムを出したら精度が上がるという話を聞いたので、今度の週末にでも試してみたいと思います。

うまくいけばv1.3あたりで修正の予定です。

*1:ポケモンの乱獲を始める前の話で、今は名前欄には個体値が……

Pokémon GO 0.35.0で個体値チェックが実装されたので試してみました

poketomo

Pokémon GOがv0.35.0にバージョンアップしました。このバージョンから公式アプリで個体値チェックができるらしいので試してみました。

被験者となるのは24-29/13-15のアズマオウです。個体値総数45を100%としたレート*1で書くと 82.2%〜97.8%の個体です。

このアズマオウの考えうる個体値の組み合わせです。

あ、この画面はPokétomoのv1.2で追加される予定です。無料なのでよろしくお願いします。

個体値計算器 Pokétomo for Pokémon GO

個体値計算器 Pokétomo for Pokémon GO

  • KENJI WADA
  • ユーティリティ
  • 無料

ジムリーダーに聞いてみた

さて、本題です。ポケモンの詳細画面の右下に「ポケモンを調べてもらう」が追加されています。

まずリーダーが分析をしてくれます。このセリフはどのポケモンも共通のようです。

個体値の合計に関して。攻撃+防御とスタミナのそれぞれが一定を超えているとセリフが変わるようです。

個体値が13/15のポケモンの場合、スタミナが個体値MAXにも関わらず「なかなか活躍が難しそうだ。」と言われてしまいます。そこから推測するに個体値の合計でセリフが変わるものと推測しました。

ちなみにこのアズマオウは80%を超えているからか「驚異的で、芸術的だ。」とのお言葉。

前述したようにこのアズマオウの攻撃力は13〜15のなので「こうげきの高さ」について褒めてくれています。

(追記)特筆して素晴らしいと評価されるのは、個体値が最高値の15の場合のようですね。分度器で分かる個体値は「範囲」なので、個体値の特定がはかどりそうです。

「重さ」か「高さ」について。XSとXLのマークが付いていると聞くことができます。

分析完了、このセリフもどのポケモンも共通のようです。

おまけ

分析を聞きたいのに間違って博士に送ってしまいそう。

そしてアメになる。

*1:CPレートとかPerfectionと呼んだりしているアレ。正確な呼び方はわかりません

ポケモン個体値計算器「Pokétomo for Pokémon GO v1.1」をリリースしました

poketomo iPhone

ポケトモ「Pokétomo for Pokémon GO」の新しいバージョンv1.1がリリースされました。

個体値計算器 Pokétomo for Pokémon GO

個体値計算器 Pokétomo for Pokémon GO

  • KENJI WADA
  • ユーティリティ
  • 無料

v1.0のリリース記事で書いていた通り、下記の修正をおこないました。

  • ポケモンの認識精度向上

公式アプリの新しいバージョンで強さ評価をしてくれるようなので、このアプリの役割も終わろうとしています。ただ「アップデートされました」と書いているけれど、現時点ではまだ配信が始まっていないので、首を長くして待っています。

関連記事

バージョン履歴が長くなってきたのでイカにまとめました。