スマホ研究部 byブレイブソフト

ヒットノウハウから最新技術まで、スマホの全てを明らかにする部活!

株式会社ブレイブソフト

麻雀牌自動認識による得点の自動計算アプリを作る

  • このエントリーをはてなブックマークに追加

はじめまして!エンジニアのs.tです!
カメラで麻雀牌を写したらOCRのように自動で牌を認識して計算までしてくれたら便利だなと思ったので、今回OpenCVを使ったiOSの画像処理に挑戦してみようと思います。

1.OpenCVを使う

OpenCVの組み込みについては過去の記事に記載されていますのでこちらを参照してください。

2.映像のリアルタイム処理を行う

わざわざ写真を撮影してそれを画像処理していては、写りが悪くて処理に失敗した場合に時間と手間がかかってしまいます。
そのため今回はAVCaptureVideoDataOutputを使った映像のリアルタイム処理を行います。

仕組みとしてはざっくり書くと以下のようになっています。

出力値であるAVCaptureOutputとしてAVCaptureVideoDataOutputを使用することで、AVCaptureVideoDataOutputSampleBufferDelegateにより背面カメラからの入力映像をCMSampleBufferとしてリアルタイムに取得することができます。
CMSampleBufferを以下のようにUIImageに変換することで画像処理を容易にします。

3.OpenCVで麻雀牌のエッジを抽出する

「2.映像のリアルタイム処理を行う」で取得したUIImageを使って画像内のエッジの検出を行います。

「1.OpenCVを使う」で紹介した記事にも記載されていますが、OpenCVの処理を書くためにはC++のmmファイルが必要です。
このmmファイルで画像処理を行なっていきます。

まずはエッジの検出がしやすいように画像の二値化を行います。

次にエッジの検出を行います。
今回はエッジによって囲まれたエリアがある程度の面積を有するものだけを抽出します。

出力結果は以下のようになりました。(エッジが赤い線で表示されています。)

以上の結果から得られたエッジ情報を使って、麻雀牌を一つずつ切り出してパターンマッチングで牌の認識を行おうとしましたが、時間が足りなかったので今回はここまでとさせていただきます。

★部員募集中★

ブレイブソフトは現在エンジニアを募集中です。ご応募お待ちしてます!

投稿者プロフィール

s.t
  • このエントリーをはてなブックマークに追加
カテゴリー:iOS