2017/08/27

プレモルのポイント入力アプリ

全国のプレモル愛飲家が長いこと望んでいたであろう、プレモルのポイントシールの入力正式アプリ「ザ・プレミアム・モルツ キャンペーン応募シール読取アプリ」が、やっとサントリーから発表された。

実はこのアプリが出るまで、ポイント入力が面倒でTesseractOCRiOSを使った自前のiOSアプリを作って入力していたのだが、度々ホームページの構成が変わるため、追従するのが面倒になって放置気味になっていた。おかげで近くのカレンダーやら、いろんなところにポイントシールがペタペタと貼られて汚い状態に…(笑)。

最近になって上の通り正式なアプリが提供されたので、やれやれこれで自前アプリのアップデートから解放されると思って喜んでインストール、が…ちょっとダメ。調子が悪い時は数字を認識するまでに10回ぐらいスキャンし直しとなったり、当然誤認識もあるので、フラストレーションがたまる。

自前アプリを作った時にも同じような問題にはまって、利便性を上げるためにいろいろ作り変えた。その時の経験をまとめておくと以下のような感じ。
  • iPhoneのカメラの解像度は十分高く、OCRのインプットとして十分。
  • しかしシールのサイズが小さいので、画面一杯に数字を表示させるようにデジタルズームしてプレビューさせるやり方だと、当然手振れも拡大されるためとても扱いにくくなる。
  • またOCR側の解像度に合わせて接写することをユーザーに求めると、iPhoneの接写能力ギリギリになりがちで、ピントが怪しくなってしまうことが多い。
このような不安定な状況でキャプチャーしたイメージを認識処理に送り込んでも、ピント、傾き、コントラスト不足などが原因で認識失敗することが多く、使い物にならなかった。つまり、自前アプリも最初の版は今の正式アプリと非常に近い状況だった。こうした経験から、自前アプリでは以下のような妥協案で利便性を確保していた。
  • キャプチャーと認識処理を2ステップに分ける。
  • キャプチャーのステップでは数字部分だけの接写を求めず、シールが含まれた周囲を含めて無理なく撮影する感じにしておく。またこれを利用してシールを並べておいて一度のキャプチャーで複数のシールを撮影することも良しとする。
  • 認識処理のステップでは、前段で綺麗にキャプチャーされた画像に対し、シールの存在するところをタップし、そこにズームインして認識を行う。もう一度押すとズームアウトし、続けて他のシールの認識を行えるようにする。
  • ズームインした時に若干傾いていて認識に失敗することが多いので、画像の傾きを調整する方法も用意しておくと認識成功率が高まった。
頑張れば認識処理のステップを自動化して、タップ操作なしで数字の領域を探すことは可能だと思うけど、そこまでやらずに簡単な実装で済ませている。

プレモルのアプリ開発者の人がこれを読むことはないかも知れないけど、もうちょい改良されることを期待して…。