忍者ブログ

マインのブログ

マインが何かを気まぐれに書く日記です。

[PR]

カテゴリー:

2017/05/27(Sat)07:49

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

No.|CommentTrackback

ディバゲ関連で作ってみた

カテゴリー:プログラムとか

2014/01/18(Sat)19:12

ガンホーのスマホ向けゲーム、「ディバインゲート」。
2014/1/17に150万DLを達成したらしく、イベントが行われています。
また、ミスター☆ディバインダンジョンも出現中。

まあ、こんな宣伝は公式の方でもっとうまくやってるのでそっちを見てくださいということで、
ここからが本題。

ファミ通Appにもありますが、個人的にちょっとディバインゲート「以下ディバゲ」のデータベースっぽい(ともいえないものだけど)ものを作ってたりします。
ディバゲでスクショを撮り、Photo Editorというアプリでユニット画像をトリムし、Memento Databaseでデータをまとめ、Googleドライブを通してPCへデータと画像を移動し、Javaプログラムで画像の縮小とCSV→HTML変換をする、と、こんな感じの事をやってます。
ぶっちゃけ、大したことやってないです。

↑2号をHTMLにしてみたところの奴(一部)

これを作るうえで、スクショを基にデータベースにデータを手動で入れてるんですが、ユニットのプロフィールに関してはソースネクストの超スキャンというアプリ(auスパートパスなら無料!)のOCR機能を使ってスクショからテキストに起こしています。
けど、やっぱり誤認識があるわけですよ。そりゃあ、汎用的に動作するようにしているでしょうし、そもそもゲームのテキストを読ませようなんて言うバカはオレくらいなもんなわけで。

まあ、そこで、OCRは無理にしても、文字をマッチングさせるくらいならオレにでもできそうだと思って、手を出してみようかと。
そこで、まずは今イベント中のミスター☆ディバイン2号を実験台にしてみました。
さくっとスクショを撮ります。


↑実験台(生贄)にされる2号。

ここでスクショを画像編集ソフトで見てみて愕然。
(余白とか加味しても)文字幅が均等じゃないぢゃん・・・。
これでは、画像を文字幅に分割して、判明済み画像とのマッチングができないじゃん。
32ピクセルにするとだんだん後ろにずれてくるし、31ピクセルにすると前にずれてくる・・・。
オレのスマホがいけないのかスクショを撮るアプリがいけないのかは不明だが、こうなっては仕様がない。ちょっと考えて、1文字ずつ取り出せるようにしてやる。

幸い文字の高さは均一だったので、いろいろ試行錯誤して、以下のような方法を考えました(多分もっとましなやり方あるんだろうなー)。
・まずプロフィールの起点となる座標を決める
・起点から右方向に文字の左側を検索
 白とみなせるピクセルが縦方向のどこかにあればそれが文字の左側でしょ。
・上で見つけた文字の左側から32ピクセル右のところから、左に文字の右側を検索
 隣の文字に被ってしまうことを考えて、いったん縦方向がどこも白でない行を文字間の隙間
とし、そこから左に見ていって白とみなせるピクセルが縦方向のどこかにあればそれが文字の右側でしょ。)
・左側から右側まで、白とみなせるピクセルをカウントしていく
 カウントと言っても、左上から右下まで1つずつ見ていって、文字データと突き合わせるだけ。
・文字データが見つからなければ新規の文字ということで、その文字画像が何の文字かを入力してデータを登録
 アンチ掛かってるんで、同じ文字でもデータにすると違うことがあり、何回も入力しなくちゃいけないんですけどね。蓄積することでまともになるかと。
・文字データが見つかれば、その文字を文字列に追加する
・次の文字の場所を決めて次の文字を読み込む。

これを繰り返すだけ。
文字データの検索は、ツリー構造にしてピクセルごとに階層を組み、白(アンチ掛かってるんで、RGBのそれぞれの値がすべて160以上なら白としました)なら左のノード、シロでなければ右のノードに子ノードを追加(または参照)するようにし、末端のノードに文字を置くようにしました。
あと、ツリーは文字幅(文字の左と右の差)でハッシュを組んで、少しでも検索が速くなるようにしてみました。(正確にはノードが文字を持ってるのに子ノードもあるという状態をうまくさばけなかっただけですが・・・。まあ、結局子ノードがあっても問題なかったですけどね)

で、出来上がったのが以下のようなもの。見た目が悪いのは堪忍。


小さいけど、上の方がプロフィールの部分、下の方が文字列にしたやつ。
あとはこれをHTMLに入れるだけで一番最初のようになります。(Mementoに入れてからHTMLにしてますけど)

こんな風に、スクショからデータを作り出せるようになると、ゲームのデータベースを作るのは楽ですねー、というのが今回の話。
Wikiとかでも外部プログラムが使えるとスクショを投稿すると勝手にデータが作成されるようになったりするんですかね??

3、4時間くらいで作ってみましたけど、ぶっちゃけスクショ全部を読み込んでデータを作るようにしないとうまみがないなーということで、このプログラムはお蔵入りでしょう。

拍手[0回]

PR

No.2185|Comment(0)Trackback

Comment

Comment Write
Name
Title
Mail
URL

Pass Vodafone絵文字 i-mode絵文字 Ezweb絵文字