Розробка машинного навчання (ML Kit) у мобільних додатках
ML Kit від Google — це Firebase SDK, який працює на Android та iOS. Готові API закривають більшість типових завдань: OCR, виявлення облич, сканування штрих-кодів, переклад. Але за явною простотою приховуються нюанси, які проявляються не в документації, а в production.
Поширені проблеми з ML Kit
Готові API (Text Recognition v2, Face Detection, Barcode Scanning) працюють коректно, якщо дотримуються вимог до вхідного зображення. Face Detection з FaceDetectorOptions.PerformanceMode.ACCURATE повертає результати за 80–150 ms на Pixel 6, але на бюджетних пристроях з Snapdragon 680 — вже 400+ ms. Використання режиму FAST знижує точність при повороті голови більше 30°.
На iOS MLKitFaceDetection через VisionImage(image:) втрачає орієнтацію зображення, якщо image.orientation явно не встановлено з UIImage.imageOrientation. Краш не відбувається — облич просто не виявляються, коли телефон повернутий горизонтально.
З кастомними TFLite-моделями через CustomImageLabeler, правильне пакування метаданих критично. Без TFLiteMetadataHelper модель не знає нормалізацію входу — або додайте метадані через flatbuffers, або вручну вкажіть нормалізацію через опції CustomRemoteModel.
Наш підхід
Вибір між On-Device та Cloud API — перше питання. On-Device працює офлайн, швидше, без витрат на API-виклики. Cloud точніший для складних випадків (багатомовний OCR, нестандартні шрифти). Для більшості B2C додатків оптимальний гібридний підхід: on-device спочатку, cloud як fallback при низькій впевненості.
Реальний випадок: додаток для сканування чеків. ML Kit Text Recognition v2 on-device дав 94% точність на стандартних чеках, але 67% на термопапері з виціченим текстом. Ми додали preprocessing через CIFilter (підвищення контрасту, binarization) перед передачею до VisionImage — точність стрибнула до 89% без переходу на Cloud API.
На Android інтеграція йде через BarcodeScanning.getClient() або TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS). Моделі завантажуються автоматично через Play Services при першому запуску — врахуйте це в UX: початковий infer може займати кілька секунд, поки модель не завантажиться. Використовуйте ModuleInstallClient для явного preload під час onboarding.
Для кастомних моделей використовуйте FirebaseModelDownloader з ModelDownloadType.LOCAL_MODEL_UPDATE_IN_BACKGROUND. Модель оновлюється у фоні; додаток використовує поточну версію до наступного запуску.
Підтримувані API ML Kit
| API | Режим | Платформи |
|---|---|---|
| Text Recognition v2 | On-Device | Android, iOS |
| Face Detection | On-Device | Android, iOS |
| Barcode Scanning | On-Device | Android, iOS |
| Image Labeling | On-Device + Cloud | Android, iOS |
| Object Detection & Tracking | On-Device | Android, iOS |
| Translation | On-Device | Android, iOS |
| Custom Model (TFLite) | On-Device | Android, iOS |
Процес та часові рамки
Аудит вимог → вибір API (готовий vs кастомний) → інтеграція SDK → конфігурація preprocessing → тестування на цільових пристроях → моніторинг точності в production.
Інтеграція одного готового API (наприклад, Barcode Scanning або Face Detection): 2–4 робочих дні. Кастомна TFLite-модель з preprocessing та fallback-логікою: 1–2 тижні. Вартість розраховується індивідуально.







