LiteRT(TensorFlowLite)を利用してKotlin でAndroidアプリ作成

AndroidでAI実装したいな…TensorFlow使えないかな?

と調べてみると

 

LiteRT (Lite Runtime の略)

 

というキーワードが見つかる。

LiteRT は、TensorFlow Lite (TFLite) の新しいブランド名(2024年9月4日〜)。

 

 

TensorFlow Liteとは、Googleが2017年に初リリースしたオープンソースのディープラーニングライブリ「TensorFlow」の軽量版。「TensorFlow Mobile」の後継。

Android Studioでの開発が容易で、Java、Kotlin、C++でAPIが提供されている。

発表当時は以下の3つのモデルしか対応していなかった。

  • Inception V3
  • MobileNets
  • On Device Smart Reply

今では100を超えるモデルをサポート(一部抜粋)。

タスク モデル名
画像分類
(Image Classification)
MobileNet V1
MobileNet V2
MobileNet V3
EfficientNet-Lite0
ResNet-50
物体検出 (Object Detection) Quantized COCO SSD MobileNet V1
MobileNet V2 SSD
YOLO
EfficientDet Lite
顔検出 (Face Detection) BlazeFace
手検出・トラッキング
(Hand Detection & Tracking)
Palm Detection
2D Hand Landmark
3D Hand Landmark
ポーズ推定
(Pose Estimation)
PoseNet
セグメンテーション
(Segmentation)
DeepLab V3
その他のタスク テキスト補完 (Autocomplete):
Kerasベースのテキスト提案モデル
音声処理 (Audio): 音声分類モデル
自然言語処理: BERTの軽量版

注: モデルはKaggle ModelsTensorFlow Model Gardenで入手可能。最新情報は公式ガイドの参照。

 

名前ぐらいは聞いたことあったけど利用したことは無かった。

Androidアプリも最近作ったこと無いし、Kotlin実装も未経験だ。

 

LiteRTの動作確認するために、

  • int8 量子化済み MobileNet V3モデル
  • ImageNetの1000クラスに対応するラベルファイル(日本語化)

を用いて、入力画像の物体カテゴリを予測・分類する機能を持つAndroidアプリケーション (APK) をKotlinで作成してみた。

Android Studioをインストール

まずはここから。

  • Android Emulatorは不要(実機テスト利用)
  • 日本語化パッチは適用

英語で扱えるほど優秀では無いんだよ私は。

最新版の Android Studio を日本語化する方法 (Meerkat 以降) : 無類のねこ好き
Meerkat 以降、日本語パックは作成されなくなった ので、新しい記事にしました。 更新日更新内容 2025/08/19"Android Studio Narwhal Feature Drop | 2025.1.2 Patch 1" で確認 2025/08/01"Android Studio Narwhal F...

プロジェクト名やバージョンは次のとおり。

で起動すると、

 

Gemini様が右の御殿に御鎮座なさっていらっしゃる

 
 

 
 

これね、2024年4月以降の機能なんだけど全然知らなかったね。一年遅れだね。

Visual Studio Code(VS Code)で Github copilot は以前より使っていたけど、無料なのはイイね。

UINT8 (int8) 量子化済の MobileNet V3 をダウンロード

MobileNetは、Googleの研究チームが開発した軽量な畳み込みニューラルネットワーク(CNN)のアーキテクチャ。

スマートフォンでのリアルタイム画像認識、自動運転の物体検出、IoTデバイスでのエッジAI処理などに活用されている。

公式サイトにはV2の量子化済のMobileNetまでしか存在しない。

ホステッドモデル  |  TensorFlow

V2でも良いけど、2017年に初代MobileNet(V1)が発表され、その後V2(2018年)、V3(2019年)へと進化した歴史があるので、V3を使いたい。

Kaggleで検索すると存在した。

IREE | mobilenet_v3 | Kaggle
Mobilenet V3 trained on Imagenet.

ファイル名に「_quant」や説明に「uint8」 (または int8) と記載されている「.tflite」という拡張子は LiteRT(TensorFlowLite)向けの量子化済みFlatBuffers形式のモデル。

※ ファイル名に _quant が付かない、_float と付くもの を利用した場合は、float32(非量子化)データ型なので次のエラーが発生した。

Error getting native address of native library: task_version_jni
TFLite failed to load model.

例えば「mobilenet_v3_small_075_224_classification.tflite」というファイルの意味は、MobileNetV3 の軽量版 (small) で、チャンネル幅を0.75倍 (075) にし、224×224入力 (224) の画像分類モデルということ。

TensorFlowでは、次の2つのファイルを利用します。

  • pbファイル:TensorFlowのモデルを保存するProtocol Buffers形式のファイル
  • ckptファイル:TensorFlowの訓練によって自動調整された変数を保存するファイル

一方、TensorFlow Liteでは、この2つのファイルから作成した新しい形式のファイル(tfliteファイル)を利用して推測します。

ImageNetの1000クラスラベルを取得

MobileNetはImageNetデータセットで訓練されているため、モデルはImageNetのクラス定義(1000クラスのラベル)に準拠している。

このため、ImageNetの1000クラスラベルをダウンロードして利用する。

https://storage.googleapis.com/download.tensorflow.org/data/ImageNetLabels.txt

 

因みに英語じゃ味気ないので次のサイトを参考に日本語化も行った。

ファイルの配置&ソースコード実装

ダウンロードした「mobilenet_v3_1.0_224_quant.tflite」「labels_JP.txt」を「app/src/main/assets/」フォルダを作成して配置する。

 

加えて、テスト画像(224×224ピクセル、JPEG、例: 犬 sample_image.jpg)を用意して「res/drawable/」に配置する。

 

そして「build.gradle.kts」には次のようにライブラリを記載する。

ソースコードはGitHubにアップロード済。

 

で、完成。

おわりに

実装は「Vibe Coding(雰囲気コーディング:人間が音声やテキストで指示を出し、AIが主体となってコードを書くコーディングスタイル)」で行った。

Kotlin 使ったことないし。

知識ゼロからでも作成できたね。凄い。

もう僕は仕事でいらないね。まぁLLMが登場する前から僕は会社で必要とされてなかったけどねww

ソースコード

GitHub に置いた。READMEやLICENSEの書き方もLLMに学んだ。

GitHub - nehori/LiteRTMobileNetsSample
Contribute to nehori/LiteRTMobileNetsSample development by creating an account on GitHub.
タイトルとURLをコピーしました