Androidカメラであつ森のカブ価を認識したい

やりたいこと

あつ森のカブ価を表示したとき、Androidのカメラでカブ価の数字のみを認識したい

f:id:banbara:20200624223712p:plain

具体的には、この 560 という数値のみをスキャンし、正規表現で取得したい。

理想は、Switchにスマフォをかざす > アプリがカブ価を認識 > カブ価を嫁にLINEで共有
としたい。

いちいちLINEをひらいて、「○日の午前の株価は〜」と入力したくない。

自作OCRアプリでササッと共有したい

OCRライブラリを調査

以下の3つがネットで見かけたヤツ

Firebase ML Kit

公式ドキュメントを眺めたところ

日本語はクラウドベース API でのみサポートしてる

つまりデバイスモデルで認識できない

日本語はデバイスのみで認識できない、クラウドで認識してもらうしかない

クラウドAPIを使ってもいいが、今回は数字だけ認識したいので、デバイスモデルでの認識に挑戦してみる。

Amazon Rekognition

まさかの日本語非対応、、、なので使用できない

Amazon Rekognition イメージ内のテキスト は日本語に対応していない - Qiita

tess-two

このライブラリは初めて知った。

github.com

GitHub Repositoryがアーカイブされて読み取り専用になってるけど大丈夫? (ちょっと不安)

とりあえず今回はFirebase ML Kitで試してみる。

Firebase ML Kitで実装してみた

いきなり完成コード

github.com

細かくは説明しないが、やってることだけを雑に説明

スキャンしてる様子

こんな感じでスキャン

f:id:banbara:20200625135732p:plain
カブ価をスキャン中

結果

失敗だった。

カブ価の数値は認識はするんだけど、余計な文字まで認識している。。。

1回目

5
1h7 560NIL Tauä-.

560という数値はあるが、前後の単語まで認識してしまう。

しかも日本語をムリやり英語で認識しているので、意味不明な値に...

2回目

560は見えるが、1回目と文字が微妙に違う

117 560ILTIau-

3回目

3行になった。

おそらく、1行目は「まめきち
2行目は「ただ今の〜」
3行目がカブ価の

bE5
h7l&,
117 560NILTITu-

うーん、余計な文字が多すぎてカブ価が認識できない

これじゃ正規表現でもムリだなー

別のML Kitサンプルアプリではこのように認識してるらしい

f:id:banbara:20200625144029p:plain

感想

ML Kitのデバイスモデルでの数値(カブ価)のみ認識はできなかった。

原因は分かっている、ちゃんと日本語対応されたクラウドベース APIを使わなきゃダメだ。

次回はクラウドベース APIでの認識に挑戦してみたい。

(Firebaseプランをアップグレードするのに抵抗はあるが)

参考リンク

ML Kitドキュメント

Recognize Text in Images with ML Kit on Android  |  Firebase

CameraXドキュメント

CameraX のアーキテクチャ  |  Android デベロッパー  |  Android Developers

その他