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 ModelsやTensorFlow Model Gardenで入手可能。最新情報は公式ガイドの参照。
名前ぐらいは聞いたことあったけど利用したことは無かった。
Androidアプリも最近作ったこと無いし、Kotlin実装も未経験だ。
LiteRTの動作確認するために、
- int8 量子化済み MobileNet V3モデル
- ImageNetの1000クラスに対応するラベルファイル(日本語化)
を用いて、入力画像の物体カテゴリを予測・分類する機能を持つAndroidアプリケーション (APK) をKotlinで作成してみた。
Android Studioをインストール
まずはここから。
- Android Emulatorは不要(実機テスト利用)
- 日本語化パッチは適用
英語で扱えるほど優秀では無いんだよ私は。

プロジェクト名やバージョンは次のとおり。
で起動すると、
Gemini様が右の御殿に御鎮座なさっていらっしゃる
これね、2024年4月以降の機能なんだけど全然知らなかったね。一年遅れだね。
Visual Studio Code(VS Code)で Github copilot は以前より使っていたけど、無料なのはイイね。
UINT8 (int8) 量子化済の MobileNet V3 をダウンロード
MobileNetは、Googleの研究チームが開発した軽量な畳み込みニューラルネットワーク(CNN)のアーキテクチャ。
スマートフォンでのリアルタイム画像認識、自動運転の物体検出、IoTデバイスでのエッジAI処理などに活用されている。
公式サイトにはV2の量子化済のMobileNetまでしか存在しない。

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

ファイル名に「_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) の画像分類モデルということ。
- pbファイル:TensorFlowのモデルを保存するProtocol Buffers形式のファイル
- ckptファイル:TensorFlowの訓練によって自動調整された変数を保存するファイル
一方、TensorFlow Liteでは、この2つのファイルから作成した新しい形式のファイル(tfliteファイル)を利用して推測します。
ImageNetの1000クラスラベルを取得
MobileNetはImageNetデータセットで訓練されているため、モデルはImageNetのクラス定義(1000クラスのラベル)に準拠している。
このため、ImageNetの1000クラスラベルをダウンロードして利用する。

因みに英語じゃ味気ないので次のサイトを参考に日本語化も行った。
ファイルの配置&ソースコード実装
ダウンロードした「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」には次のようにライブラリを記載する。
|
1 2 3 |
dependencies { implementation("org.tensorflow:tensorflow-lite:2.16.1") implementation("org.tensorflow:tensorflow-lite-support:0.4.4") implementation("org.tensorflow:tensorflow-lite-task-vision:0.4.4") // 画像分類タスクライブラリ |
ソースコードはGitHubにアップロード済。
で、完成。
おわりに
実装は「Vibe Coding(雰囲気コーディング:人間が音声やテキストで指示を出し、AIが主体となってコードを書くコーディングスタイル)」で行った。
Kotlin 使ったことないし。
知識ゼロからでも作成できたね。凄い。
もう僕は仕事でいらないね。まぁLLMが登場する前から僕は会社で必要とされてなかったけどねww
ソースコード
GitHub に置いた。READMEやLICENSEの書き方もLLMに学んだ。









