ぷよぷよの画面から何色のぷよぷよを抽出する
使いたい人がいるかもしれないのでコードの共有が目的
抽出した上でやることは秘密だが、この記事とコードでできることは
プレイ画像(動画) -> 配置されているぷよぷよのnumpy配列(横6×縦12×色)のplayer数分
github
https://github.com/daikiclimate/PuyoExtractor
細かいところはこれからリファクタリング。
実装途中なので細かい修正はあるかも
基本的にはこのまま使うことはあまり考えていない。使う動画や画像に合わせて修正してほしい
結果
大体あってそうですね
みどりぷよのテンプレートを適当に選んじゃったからいつも横と繋がっているみたいになっちゃってますねw
実装の工夫
こんなぷよの分類如きに機械学習は使えないのでルールベースでノイズに強いうまく行く方法を考えた。
色の分類
当初はテンプレート画像との差分でいけるという話があったが、あまり頑健でなかった。
というより差分画像だとピクセル単位の位置ずれが起きた時にがっつり数字が変わってしまうので少し扱いづらかった気がする
そこで、画像をHSV空間に変換し、色をHで表現してから、cv2のcalcHistとcompareHistを使うことで、Hueをヒストグラム化して色を分類します。
上記の方法でタチが悪かったのが、背景。
背景は一定かと思いきや、実はキャラクターが書かれているんですね。
背景にバッチリアミティがいますね。この背景がなんとなく色相を持っていることでたまに誤りが発生します。
どうしようかと思いましたが、背景は色合いは確実に薄いのでHSVのSaturationの薄いのではと思いましたが、背景はSaturationで閾値を切れでした。
ということで、背景だけSaturationで分けています。
×の抽出
ぷよが出てくる位置に×があって、しかもこのバツくるくる回るんですよね。テンプレートマッチングだと検出できないし、色だと赤ぷよとかぶるのでどうしたもんかと。今回はこの下にぷよがなければとりあえず空白になることになっていますが、後半のバツの下にぷよがある様なシーンではバグ実装になってます。仕方ない