Tensorflow Liteを使ってAndroidで文字認識(数字)をしてみた

こんな感じで試作ができたので、制作過程を紹介します。

(1)tfliteファイルを作る

https://qiita.com/yukagil/items/ca84c4bfcb47ac53af99

このサイトにある共有DocumentをGoogle laboratory で開いて以下の変更を行って実行する。
スクリプト最後の2段に関して

!pip3 install -q tensorflowjs
!tensorflowjs_converter –input_format keras mnist_cnn_model.h5 model

import tensorflow as tf
from tensorflow import keras
new_model = keras.models.load_model(‘mnist_cnn_model.h5’)
converter = tf.lite.TFLiteConverter.from_keras_model(new_model)
keras_model = converter.convert()

に変更

!zip -r model.zip model && ls -l
import google.colab
google.colab.files.download(‘model.zip’)

with open(“converted_model.tflite”, “w+b”) as f:
f.write(keras_model)
import google.colab
google.colab.files.download(‘converted_model.tflite’)

に変更

そうして、「すべてのセル実行」で数字認識モデルのtfliteファイルがDLされます。

https://github.com/Yanto7369/Number-recognition-on-Android-with-Tensorflow-Lite

確認用にpythonのコードを置いておきます。sample_path, modelpathにそれぞれ適切なパスを入れて実行すると予測結果がでてきます。サンプル用の画像を一枚入れときましたが、ネットから拾っても全然OKです。またpython触ったことない、importエラーが起きて解決できない場合はスルーしちゃっても大丈夫です。なおコード解説は次回行いたいと思います。

(2)Androidプロジェクトの作成

テンプレートはBottom Navigation Activityを選んでいますが、BasicActivityでも全然問題ないです。これ選ぶのは自分の癖ですね笑。

言語はJavaです。kotlinとJavaのコード変換機能があるとはいえ、公式のサンプルがJavaなので,こちらを選んだほうが無難です。あとAPIは19にしたほうがいいです。まあ後からgradleファイルをいじるので、後からなんとでもなりますが。

プロジェクトが作成できたら、File→New→Folderと進んでAssets Folderを作って下の画像のようにファイルを突っ込みます。

ファイルは(1)と同様のリンク先に置いてあります。converter_model.tfliteも一応置いてありますが、各自が(1)で作成したtfliteファイルを使えばよいです。
また、activity_main.xml , build.gradleも置き換えてください。ただし,置き換えるのはbuild.gradle(Module: app)の方です。

https://github.com/Yanto7369/Number-recognition-on-Android-with-Tensorflow-Lite

これで実行するとうまくアプリが起動するはずです。ただ何回やってみるとわかりますが、精度99%の割には間違えていて、もしかしたらコードになんらかの誤りがある可能性があります。
それについては今後改善していきたいと思います。
今回で導入は終わったので、次回はコードについてのざっくりした説明と、得た知識について話していきたいと思います。

yanto

大学生です。atcoder緑。ubuntuの民。ブログの他にアプリ開発とかやってます。趣味は読書、プログラミング。アニメ、映画も時々見ます。サムネイルに使わせていただいているサイト ・photoAC(https://www.ac-illust.com/) ・フリー素材ぱくたそ(www.pakutaso.com)

おすすめ

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA