ginga_canvas
ログインはこちらから
ID (ユーザ名)
PW (パスワード)

   
Diary
←最新日記一覧へ戻る
村上雅人さんの日記一覧
 
麻雀牌OCR  05月15日 16:23:16   村上雅人
閲覧数(2)
最近は、そうですね。
JavaScriptで麻雀牌OCRをちまちま作ってます。
要するにアレです。
手牌をスマフォのカメラでカシャッとやると、シャンテン数や和了役が出てくるシャレオツなアプリを作りたいわけですよ。HTML5は機能が充実しているので、割と組めるんじゃないかと思っています。

この手のアプリケーションは相当難易度の高い部類に入りますが、ポイントは3点。
1. 麻雀牌の取得
2. 麻雀牌の評価
3. パフォーマンスの考慮

地味に3が重要ですね。ご存知かと思いますが、JSの実行速度は遅いです。今回はしかも配列がメインです。ループで遅くなるに決まっています。
いろいろ思案して、データはバイナリで持つことにしました。なんとHTML5ではバイナリをUint32Arrayでラッピングして使えます。JSでビットをガシガシ書き換えるのはなんだか新鮮です。

バイナリ操作用の基礎ライブラリはすべて自作。2値化、線引き、塗りつぶし、エッジ探索、切り出し等、ネットで調べつつなんとか実装。作るのは大変ですが、C言語のデータ型を直接扱っているので爆速です。

評価ロジックは比較的シンプルです。
外周特徴検査をして、上り、下り、平坦、直角の計4パラメータを算出し
あらかじめ用意したテンプレートとマッチング、得点化して比較します。

雀牌取得ロジックは、なかなか難航。。というか、コイツが一番曲者ですね。
麻雀牌を並べて置くと牌同士でくっついて見えるため、どこで区切るかを正確に判定する必要があります。
そこで半ば強引ですが、矩形を成さない場合は仮想の区切りを見立てて補完するロジックを実装してあります。

やはり、画像を扱うプログラムは各種判定の匙加減が難しいです。
まぁこの辺は作りながら調整するしかないですね。

そろそろ試作品が出来そうなので、出来たらちょっと公開しようと思います。

Copyright 2010 Planet Co.,Ltd.. All rights reserved. No reproduction or republication without written permission.