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%の割には間違えていて、もしかしたらコードになんらかの誤りがある可能性があります。
それについては今後改善していきたいと思います。
今回で導入は終わったので、次回はコードについてのざっくりした説明と、得た知識について話していきたいと思います。