ML Kit — это мобильный SDK от Google для интеграции готовых ML-моделей в Android и iOS приложения. ML Kit предоставляет API для распознавания текста, обнаружения лиц, сканирования штрих-кодов, распознавания объектов, перевода текста, определения позы и сегментации изображений — все модели работают на устройстве (on-device) без обязательного подключения к серверу. По данным Google ML Kit, 2025, библиотека используется в более чем 100 000 приложений, обрабатывая 2+ миллиарда запросов в день
Главное
ML Kit — это Firebase-совместимый SDK для мобильных платформ, предоставляющий 14 ML-API для Android и iOS. ML Kit заменил Firebase ML (старое название) в 2020 году и теперь доступен как автономный SDK через Google Play Services (Android) или CocoaPods/SPM (iOS). Ключевое преимущество — все модели работают on-device, что гарантирует конфиденциальность данных и работу без интернета.
Архитектура ML Kit построена вокруг двух режимов: bundled (модель встроена в APK/IPA) и downloaded (модель загружается через Google Play Services при первом вызове). Bundled режим даёт мгновенный старт, но увеличивает размер приложения на 5–20 MB. Downloaded — экономит место, но требует интернета при первом запуске. Google рекомендует downloaded для API, используемых не на каждом экране (Object Detection, Pose Detection).
Кастомизация через TFLite — ML Kit позволяет загрузить собственную TensorFlow Lite модель через Custom Model API. Это даёт гибкость — используйте готовые API для стандартных задач и свою модель для специфических. ML Kit предоставляет универсальный Input/Output обработчик, работающий с ByteBuffer и FloatArray. По данным Google (2025), 40% ML Kit проектов комбинируют готовые API и кастомные модели.
// ML Kit Text Recognition setup (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 ->
// Processing error
}
Firebase vs standalone — ML Kit может использоваться с Firebase (Cloud-функции, Analytics, Crashlytics) или как standalone SDK без Firebase. Standalone режим подключается через Google Play Services (Android) без настройки Firebase-аккаунта. Cloud API доступны через Firebase (Cloud Vision, Natural Language) для задач, требующих нейросетей на сервере Google — но эти функции платные и не on-device.
ML Kit Text Recognition — API для оптического распознавания символов (OCR) на изображениях. Поддерживает два режима: Latin-based (латиница, кириллица, цифры — 45 языков) и Chinese/Japanese/Korean (CJK — иероглифические языки). Latin-распознавание использует модель V2 (более быстрая) или V1 (высокоточная). V2 даёт скорость 10–30 мс на кадр, V1 — 50–100 мс.
Возможности Text Recognition включают распознавание печатного и рукописного текста, определение ориентации текста, обнаружение строк, слов и символов, определение языка текста. API возвращает структуру: Text → TextBlock → Line → Element (Word/Symbol). Каждый элемент имеет bounding box, confidence и recognised text. По данным Google (2025), точность ML Kit Text Recognition V2 на латинице — 96%, на кириллице — 91%.
Text Recognition в реальном времени — использование с CameraX или Camera2 для видеопотока. Создайте ImageAnalysis.Analyzer и передавайте кадры в ML Kit. Для производительности уменьшите разрешение кадра до 480p (640x480) — это оптимальный баланс между скоростью и точностью. ML Kit автоматически обрабатывает поворот изображения, но для максимальной скорости передавайте изображение в правильной ориентации.
// Text Recognition with 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 для обнаружения лиц на изображениях и видео. Определяет bounding box лица, координаты глаз, носа, рта, ушей (468 контурных точек) и основные выражения: улыбка, открытый рот, закрытые глаза. Face Detection — один из самых быстрых API ML Kit: 5–15 мс на кадр в зависимости от количества лиц и контурных точек.
Режимы Face Detection: contour mode (468 точек контура лица для точного наложения масок/фильтров), classification mode (определение улыбки, открытых глаз), landmark mode (ключевые точки без контура). Режимы комбинируются в FaceDetectorOptions. Включение всех режимов замедляет детекцию в 2–3 раза — используйте минимально необходимый набор для вашей задачи.
Face Detection в AR-приложениях — на основе контурных точек ML Kit строится маска лица для Snapchat-like фильтров. ML Kit возвращает 468 точек с координатами x, y, z (z = глубина). Точки обновляются 30–60 раз в секунду на современных устройствах. Для AR-наложения используйте FaceMeshDetector (специализированная версия) — он возвращает ещё и треугольники сетки для текстурирования.
// Face Detection with contour points
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 не распознаёт, кому принадлежит лицо (face recognition) — только обнаруживает лица. Для идентификации личности используйте FaceNet или ArcFace на кастомной TFLite-модели. ML Kit корректно работает с лицами под углом до 45°, с очками и частичной маской. Для профильных ракурсов (90°) точность падает до 40–60%.
ML Kit Barcode Scanning — API для считывания и декодирования одномерных (EAN, UPC, Code 128) и двумерных (QR, Data Matrix, PDF417) штрих-кодов. Barcode Scanning детектирует код на изображении — в отличие от ZXing, который требует, чтобы код занимал почти весь кадр. ML Kit обнаруживает код любого размера и ориентации, в том числе несколько кодов на одном кадре (multi-barcode mode).
Поддерживаемые форматы: EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, ITF, Codabar, QR, Data Matrix, PDF417, Aztec. ML Kit автоматически определяет формат — не нужно указывать тип кода. В production используйте setBarcodeFormats() для ограничения поддерживаемых форматов — это ускоряет сканирование на 30–50% за счёт исключения лишних алгоритмов декодирования.
Barcode Scanning в реальном времени — аналогично Text Recognition, интеграция с CameraX. ML Kit обрабатывает кадры с частотой до 60 FPS. Для максимальной скорости включите setPerformanceMode(PerformanceMode.FAST). Barcode Scanning ML Kit быстрее ZXing в 2–3 раза и точнее детектирует размытые или частично закрытые коды. По данным Google (2025), ML Kit Barcode Scanning имеет 98.5% точность при стандартном освещении.
// Barcode Scanning with format filter
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 — open-source, работает полностью офлайн, не требует Google Play Services. ML Kit требует Google Play Services (Android) или CocoaPods (iOS). Для приложений, работающих на устройствах без Google (Huawei, Amazon Fire), используйте ZXing как fallback. Для остальных — ML Kit, так как он обеспечивает лучший UX за счёт многокодового обнаружения.
ML Kit Object Detection — API для обнаружения и трекинга объектов на изображениях. Детектирует объекты из 1000+ категорий (ImageNet-классы) — люди, животные, транспорт, предметы быта. Object Detection работает в двух режимах: single-image (одиночное фото) и streaming (видеопоток с трекингом). Streaming-режим отслеживает объекты между кадрами, назначая каждому уникальный track ID.
Pose Detection — API для определения позы человека по 33 ключевым точкам (скелет): голова, плечи, локти, запястья, бёдра, колени, стопы. Определяет координаты (x, y, z) и confidence каждой точки. Pose Detection применяется в фитнес-трекерах (счёт повторений, контроль формы), AR-приложениях (аватар копирует движения) и аналитике спорта. Скорость — 10–30 мс на кадр в зависимости от количества людей.
Object Tracking — ML Kit Object Detection с трекингом между кадрами использует трекер на основе Optical Flow. Когда объект обнаружен, трекер следит за ним без повторного детектирования, что экономит CPU/GPU. Если трекер теряет объект (быстрое движение, заслонение), ML Kit запускает повторное детектирование. По данным Google (2025), трекер удерживает объект в 95% кадров при скорости движения до 30 км/ч.
// Pose Detection (human skeleton)
val poseDetector = PoseDetection.getClient(
PoseDetectorOptions.Builder()
.setDetectorMode(PoseDetectorOptions.STREAM_MODE)
.build()
)
poseDetector.process(inputImage)
.addOnSuccessListener { pose ->
pose.allPoseLandmarks.forEach { landmark ->
val type = landmark.landmarkType // LEFT_SHOULDER, RIGHT_ELBOW...
val position = landmark.position3D
}
}
Selfie Segmentation — API для сегментации человека на изображении (отделение человека от фона). Возвращает маску уверенности для каждого пикселя. Selfie Segmentation используется для размытия или замены фона в видеозвонках, фото-редакторах и AR-приложениях. Маска возвращается в виде UInt8Array размером с исходное изображение — каждый пиксель содержит значение от 0.0 (фон) до 1.0 (человек).
Custom Model API — возможность загружать и запускать собственные TensorFlow Lite модели через ML Kit интерфейс. ML Kit предоставляет унифицированный Input/Output API: ByteBuffer на вход, FloatArray/TensorImage на выход. Это позволяет использовать преимущества ML Kit (управление моделью, обработка изображений, связь с CameraX) с кастомными моделями face recognition, object classification, NLP и другими.
Загрузка модели — разместите .tflite файл в assets/ (Android) или bundle (iOS) и загрузите через CustomModelDownloadConditions или Firebase Model Manager. Для скачивания больших моделей (5+ MB) используйте download conditions: Wi-Fi, заряжено, в фоне. Google рекомендует загружать модель при первом запуске приложения, а не в момент первого использования.
// Loading custom TFLite model
val conditions = CustomModelDownloadConditions.Builder()
.requireWifi()
.build()
val remoteModel = CustomRemoteModel.Builder("my_model")
.setRemoteModelName("my_model_v2")
.build()
remoteModel.download(conditions)
.addOnSuccessListener { /* model ready */ }
.addOnFailureListener {
// Use bundled model from assets
}
Оптимизация кастомных моделей: используйте TFLite Converter с delegate-совместимостью. Для максимальной производительности квантуйте модель (INT8) — это уменьшает размер модели в 4x и ускоряет инференс в 2–3x через XNNPACK Delegate. ML Kit Custom Model API поддерживает Dynamic Shape (батч = 1), Image Input (UInt8, Float32) и Tensor Output.
Часто задаваемые вопросы
ML Kit — это SDK от Google с готовыми ML-моделями для Android и iOS. Включает API для распознавания текста (OCR), обнаружения лиц, сканирования штрих-кодов, распознавания объектов, определения позы, перевода и сегментации. Работает на устройстве, не требует интернета. Подключается через Google Play Services (Android) или CocoaPods (iOS) минимально — одной строкой зависимости.
ML Kit — высокоуровневый SDK с готовыми API для конкретных задач (текст, лица, коды). TensorFlow Lite — низкоуровневый рантайм для запуска любых TFLite-моделей. ML Kit включает TFLite под капотом, но даёт готовый код и оптимизации для стандартных задач. Если вам нужно распознать текст — ML Kit (5 строк кода). Если своя нейросеть — TFLite (20+ строк).
Да, все основные API ML Kit (Text Recognition, Face Detection, Barcode Scanning, Object Detection, Pose Detection, Image Labeling) работают полностью on-device без подключения к интернету после первоначальной загрузки модели. Cloud API (Cloud Vision, Natural Language) — опциональны и требуют интернета. Для downloaded-моделей интернет нужен только при первом скачивании модели.
Да, ML Kit полностью поддерживает iOS через CocoaPods или Swift Package Manager. API аналогичны Android-версии. Для iOS ML Kit использует Vision Framework и Core ML под капотом — модели выполняются на Apple Neural Engine (A12+). ML Kit на iOS работает с UIImage, CVPixelBuffer и CMSampleBuffer. Поддержка iOS 12+ и Xcode 15+.
Да, ML Kit on-device API полностью бесплатны, без лимитов на количество запросов. Cloud API (через Firebase) — платные после бесплатного лимита ($200/месяц бесплатно). On-device модели не требуют Firebase-аккаунта — ML Kit работает standalone через Google Play Services. Для коммерческих приложений on-device ML Kit — безопасный выбор с нулевой стоимостью эксплуатации.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также