ML Kitは、AndroidおよびiOSアプリケーションに既製のMLモデルを統合するためのGoogleのモバイルSDKです。ML Kitは、テキスト認識、顔検出、バーコードスキャン、オブジェクト検出、テキスト翻訳、ポーズ検出、画像セグメンテーションのAPIを提供します。すべてのモデルはサーバー接続を必要とせず、デバイス上(on-device)で動作します。Google ML Kit、2025年によると、このライブラリは10万以上のアプリケーションで使用され、毎日20億以上のリクエストを処理しています
主要ポイント
ML Kitは、モバイルプラットフォーム向けのFirebase互換SDKで、AndroidとiOSに14のML APIを提供します。ML Kitは2020年にFirebase ML(旧称)を置き換え、現在はGoogle Play Services(Android)またはCocoaPods/SPM(iOS)を介してスタンドアロンSDKとして利用可能です。主な利点は、すべてのモデルがデバイス上で動作し、データのプライバシーとオフライン動作を保証することです。
ML Kitのアーキテクチャは、バンドル(モデルがAPK/IPAに組み込まれる)とダウンロード(最初の呼び出し時にGoogle Play Servicesを介してモデルがダウンロードされる)の2つのモードを中心に構築されています。バンドルモードは即座に起動できますが、アプリサイズが5~20MB増加します。ダウンロードモードは容量を節約しますが、初回起動時にインターネットが必要です。Googleは、毎画面使用しないAPI(Object Detection、Pose Detection)にはダウンロードモードを推奨しています。
TFLiteによるカスタマイズ — ML Kitでは、Custom Model APIを介して独自のTensorFlow Liteモデルを読み込むことができます。これにより柔軟性が向上し、標準的なタスクには既製APIを、特定のタスクには独自のモデルを使用できます。ML KitはByteBufferとFloatArrayを扱うユニバーサルな入出力ハンドラを提供します。Google(2025年)によると、ML Kitプロジェクトの40%が既製APIとカスタムモデルを組み合わせています。
// ML Kit Text Recognitionのセットアップ(Android)
val recognizer = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
val image = InputImage.fromBitmap(bitmap)
recognizer.process(image)
.addOnSuccessListener { result ->
for (block in result.textBlocks) {
Log.d("MLKit", block.text)
}
}
.addOnFailureListener { error ->
// 処理エラー
}
Firebase vs スタンドアロン — ML KitはFirebase(Cloud機能、Analytics、Crashlytics)と併用することも、FirebaseなしでスタンドアロンSDKとして使用することもできます。スタンドアロンモードは、Firebaseアカウントを設定せずにGoogle Play Services(Android)を介して接続します。Cloud APIは、Googleサーバー上のニューラルネットワークを必要とするタスク向けにFirebase(Cloud Vision、Natural Language)を介して利用可能ですが、これらは有料であり、オンデバイスではありません。
ML Kit Text Recognition — 画像上の光学文字認識(OCR)のためのAPIです。ラテン文字ベース(ラテン文字、キリル文字、数字 — 45言語)と中国語/日本語/韓国語(CJK — 表意文字言語)の2つのモードをサポートします。ラテン文字認識はV2モデル(高速)またはV1(高精度)を使用します。V2はフレームあたり10~30ミリ秒、V1は50~100ミリ秒です。
Text Recognitionの機能には、印刷テキストと手書きテキストの認識、テキストの向きの検出、行・単語・文字の検出、テキスト言語の判定が含まれます。APIはText → TextBlock → Line → Element(単語/記号)の構造を返します。各要素にはバウンディングボックス、信頼度、認識されたテキストが含まれます。Google(2025年)によると、ラテン文字でのML Kit Text Recognition V2の精度は96%、キリル文字では91%です。
リアルタイムのText Recognition — ビデオストリームにはCameraXまたはCamera2を使用します。ImageAnalysis.Analyzerを作成し、フレームをML Kitに渡します。パフォーマンスを最適化するには、フレーム解像度を480p(640x480)に下げます。これが速度と精度の最適なバランスです。ML Kitは画像の回転を自動的に処理しますが、最大速度を得るには画像を正しい向きで渡してください。
// CameraX Analyzerによるテキスト認識
class TextAnalyzer : ImageAnalysis.Analyzer {
private val recognizer = TextRecognition.getClient(
TextRecognizerOptions.DEFAULT_OPTIONS
)
override fun analyze(image: ImageProxy) {
val inputImage = InputImage.fromMediaImage(
image.image, image.imageInfo.rotationDegrees
)
recognizer.process(inputImage)
.addOnSuccessListener { /* text found */ }
.addOnCompleteListener { image.close() }
}
}
Text Recognitionの最適化:ImageDecoderを使用して、ぼやけた画像や暗い画像の認識を向上させます。印刷テキストの場合はTextRecognizerOptions.DEFAULT_OPTIONS(V2モデル)、手書きテキストの場合はTextRecognizerOptions.SCRIPT_LATIN(より正確ですが低速)を使用します。IT Sectrのプロジェクトでは、文書認識にV2、小切手や領収書にLatinモデルを使用しています。
ML Kit Face Detection — 画像や動画から顔を検出するためのAPIです。顔のバウンディングボックス、目、鼻、口、耳の座標(468の輪郭点)、および基本的な表情(笑顔、開口、閉眼)を検出します。Face DetectionはML Kitで最も高速なAPIの1つで、顔の数と輪郭点に応じてフレームあたり5~15ミリ秒です。
Face Detectionのモード:輪郭モード(マスク/フィルターの正確な重ね合わせのための468の顔輪郭点)、分類モード(笑顔、開眼の検出)、ランドマークモード(輪郭なしのキーポイント)。モードはFaceDetectorOptionsで組み合わせます。すべてのモードを有効にすると検出が2~3倍遅くなるため、タスクに必要な最小限のセットを使用してください。
ARアプリケーションでのFace Detection — 輪郭点に基づいて、ML KitはSnapchatのようなフィルター用の顔マスクを構築します。ML Kitはx、y、z座標(z = 深度)を持つ468点を返します。最新デバイスでは毎秒30~60回ポイントが更新されます。ARオーバーレイにはFaceMeshDetector(専門版)を使用してください。テクスチャリング用のメッシュ三角形も返します。
// 輪郭点による顔検出
val options = FaceDetectorOptions.Builder()
.setPerformanceMode(FaceDetectorOptions.PerformanceMode.FAST)
.setContourMode(FaceDetectorOptions.ContourMode.ALL)
.setClassificationMode(FaceDetectorOptions.ClassificationMode.ALL)
.build()
val detector = FaceDetection.getClient(options)
detector.process(inputImage)
.addOnSuccessListener { faces ->
faces.forEach { face ->
val bounds = face.boundingBox
val smileProb = face.smilingProbability
}
}
Face Detectionの制限:このAPIは顔が誰のものかを認識する(顔認識)ことはできず、顔を検出するだけです。個人識別には、カスタムTFLiteモデルでFaceNetまたはArcFaceを使用してください。ML Kitは45度までの角度、眼鏡や部分的なマスクを着用した顔でも正しく動作します。横顔(90度)では精度が40~60%に低下します。
ML Kit Barcode Scanning — 1次元(EAN、UPC、Code 128)および2次元(QR、Data Matrix、PDF417)バーコードを読み取り、デコードするためのAPIです。Barcode Scanningは画像内のコードを検出します。ZXingのようにコードがフレームのほぼ全体を占める必要はありません。ML Kitはあらゆるサイズと向きのコードを検出し、1つのフレーム内の複数コード(マルチバーコードモード)も処理できます。
サポートされる形式:EAN-8、EAN-13、UPC-A、UPC-E、Code 39、Code 93、Code 128、ITF、Codabar、QR、Data Matrix、PDF417、Aztec。ML Kitは自動的に形式を判別するため、コードタイプを指定する必要はありません。本番環境ではsetBarcodeFormats()を使用してサポート形式を制限すると、不要なデコードアルゴリズムを除外してスキャン速度が30~50%向上します。
リアルタイムのBarcode Scanning — Text Recognitionと同様に、CameraXと統合します。ML Kitは最大60FPSでフレームを処理します。最大速度を得るにはsetPerformanceMode(PerformanceMode.FAST)を有効にします。ML Kit Barcode ScanningはZXingより2~3倍高速で、ぼやけたり一部が隠れたコードの検出精度も優れています。Google(2025年)によると、標準照明下でのML Kit Barcode Scanningの精度は98.5%です。
// フォーマットフィルター付きバーコードスキャン
val options = BarcodeScannerOptions.Builder()
.setBarcodeFormats(Barcode.FORMAT_QR_CODE,
Barcode.FORMAT_EAN_13)
.build()
val scanner = BarcodeScanning.getClient(options)
scanner.process(inputImage)
.addOnSuccessListener { barcodes ->
barcodes.forEach { barcode ->
val value = barcode.rawValue
val type = barcode.format
}
}
ZXingとの比較:ML Kitはより高速、高精度、かつ統合が容易です。ZXingはオープンソースで完全にオフライン動作し、Google Play Servicesを必要としません。ML KitにはGoogle Play Services(Android)またはCocoaPods(iOS)が必要です。Googleのないデバイス(Huawei、Amazon Fire)で動作するアプリには、フォールバックとしてZXingを使用してください。それ以外の端末では、マルチコード検出による優れたUXを提供するML Kitをお勧めします。
ML Kit Object Detection — 画像内のオブジェクトを検出および追跡するためのAPIです。1000以上のカテゴリ(ImageNetクラス)からオブジェクト(人、動物、車両、家庭用品)を検出します。Object Detectionはシングルイメージ(単一写真)とストリーミング(追跡付きビデオストリーム)の2つのモードで動作します。ストリーミングモードはフレーム間でオブジェクトを追跡し、それぞれに一意のトラックIDを割り当てます。
Pose Detection — 33のキーポイント(骨格)を通じて人間の姿勢を判定するためのAPIです:頭、肩、肘、手首、腰、膝、足。各ポイントの座標(x、y、z)と信頼度を判定します。Pose Detectionはフィットネストラッカー(反復回数のカウント、フォームの確認)、ARアプリケーション(アバターが動きを模倣)、スポーツ分析に使用されます。速度は人数に応じてフレームあたり10~30ミリ秒です。
Object Tracking — フレーム間追跡機能付きML Kit Object Detectionは、Optical Flowベースのトラッカーを使用します。オブジェクトが検出されると、トラッカーは再検出せずに追跡を継続し、CPU/GPUを節約します。トラッカーがオブジェクトを見失った場合(高速移動、遮蔽)、ML Kitは再検出を開始します。Google(2025年)によると、トラッカーは時速30kmまでの速度で95%のフレームでオブジェクトを維持します。
// ポーズ検出(人間の骨格)
val poseDetector = PoseDetection.getClient(
PoseDetectorOptions.Builder()
.setDetectorMode(PoseDetectorOptions.STREAM_MODE)
.build()
)
poseDetector.process(inputImage)
.addOnSuccessListener { pose ->
pose.allPoseLandmarks.forEach { landmark ->
val type = landmark.landmarkType // 左肩、右肘...
val position = landmark.position3D
}
}
Selfie Segmentation — 画像から人物を切り出す(人物を背景から分離する)ためのAPIです。各ピクセルの信頼マスクを返します。Selfie Segmentationは、ビデオ通話、写真編集アプリ、ARアプリケーションでの背景のぼかしや置き換えに使用されます。マスクは元の画像サイズのUInt8Arrayとして返され、各ピクセルには0.0(背景)から1.0(人物)の値が含まれます。
Custom Model API — ML Kitインターフェースを介して独自のTensorFlow Liteモデルを読み込み、実行する機能です。ML Kitは統一された入出力API(入力にByteBuffer、出力にFloatArray/TensorImage)を提供します。これにより、ML Kitの利点(モデル管理、画像処理、CameraX統合)を、顔認識、オブジェクト分類、NLPなどのカスタムモデルと組み合わせて活用できます。
モデルの読み込み — .tfliteファイルをassets/(Android)またはbundle(iOS)に配置し、CustomModelDownloadConditionsまたはFirebase Model Managerを介して読み込みます。大きなモデル(5MB以上)をダウンロードするには、Wi-Fi、充電中、バックグラウンドのダウンロード条件を使用します。Googleは、最初の使用時ではなく、アプリの初回起動時にモデルをダウンロードすることを推奨しています。
// カスタムTFLiteモデルを読み込み中
val conditions = CustomModelDownloadConditions.Builder()
.requireWifi()
.build()
val remoteModel = CustomRemoteModel.Builder("my_model")
.setRemoteModelName("my_model_v2")
.build()
remoteModel.download(conditions)
.addOnSuccessListener { /* model ready */ }
.addOnFailureListener {
// assetsからバンドルモデルを使用
}
カスタムモデルの最適化:デリゲート互換性のあるTFLite Converterを使用します。最大のパフォーマンスを得るにはモデルを量子化(INT8)します。これによりモデルサイズが4分の1に減少し、XNNPACK Delegateを介して推論が2~3倍高速化します。ML Kit Custom Model APIはDynamic Shape(バッチ=1)、Image Input(UInt8、Float32)、Tensor Outputをサポートしています。
よくある質問
ML Kitは、AndroidとiOS向けの既製MLモデルを備えたGoogleのSDKです。テキスト認識(OCR)、顔検出、バーコードスキャン、オブジェクト検出、ポーズ検出、翻訳、セグメンテーションのAPIが含まれます。デバイス上で動作し、インターネットは不要です。Google Play Services(Android)またはCocoaPods(iOS)を介して最小限の依存関係(1行)で接続できます。
ML Kitは、特定のタスク(テキスト、顔、コード)向けの既製APIを備えた高レベルSDKです。TensorFlow Liteは、あらゆるTFLiteモデルを実行するための低レベルランタイムです。ML Kitは内部的にTFLiteを含みますが、標準タスク向けの既製コードと最適化を提供します。テキスト認識が必要な場合はML Kit(5行のコード)、独自のニューラルネットワークがある場合はTFLite(20行以上)を使用します。
はい、主要なML Kit API(Text Recognition、Face Detection、Barcode Scanning、Object Detection、Pose Detection、Image Labeling)はすべて、初期モデルダウンロード後はインターネット接続なしでデバイス上で完全に動作します。Cloud API(Cloud Vision、Natural Language)はオプションであり、インターネットが必要です。ダウンロードモデルの場合、インターネットは最初のモデルダウンロード時にのみ必要です。
はい、ML KitはCocoaPodsまたはSwift Package Managerを介してiOSを完全にサポートしています。APIはAndroid版と同様です。iOSでは、ML Kitは内部的にVision FrameworkとCore MLを使用し、モデルはApple Neural Engine(A12+)で実行されます。iOSのML KitはUIImage、CVPixelBuffer、CMSampleBufferを扱います。iOS 12+およびXcode 15+をサポートしています。
はい、ML KitのオンデバイスAPIは完全に無料で、リクエスト数に制限はありません。Cloud API(Firebase経由)は無料枠を超えると有料です(月額200ドルまで無料)。オンデバイスモデルにはFirebaseアカウントは不要で、ML KitはGoogle Play Servicesを介してスタンドアロンで動作します。商用アプリケーションにとって、オンデバイスのML Kitは運用コストゼロの安全な選択肢です。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。