ML Kit — este un SDK mobil de la Google pentru integrarea modelelor ML gata făcute în aplicații Android și iOS. ML Kit oferă API pentru recunoașterea textului, detectarea fețelor, scanarea codurilor de bare, recunoașterea obiectelor, traducerea textului, determinarea poziției și segmentarea imaginilor — toate modelele funcționează pe dispozitiv (on-device) fără conexiune obligatorie la server. Potrivit datelor Google ML Kit, 2025, biblioteca este utilizată în peste 100 000 de aplicații, procesând 2+ miliarde de cereri pe zi
Principalele puncte
ML Kit — este un SDK compatibil Firebase pentru platforme mobile, care oferă 14 ML-API pentru Android și iOS. ML Kit a înlocuit Firebase ML (numele vechi) în 2020 și este acum disponibil ca SDK autonom prin Google Play Services (Android) sau CocoaPods/SPM (iOS). Avantajul cheie — toate modelele funcționează on-device, garantând confidențialitatea datelor și funcționarea fără internet.
Arhitectura ML Kit este construită în jurul a două moduri: bundled (modelul este încorporat în APK/IPA) și downloaded (modelul se descarcă prin Google Play Services la prima apelare). Modul bundled oferă pornire instantanee, dar mărește dimensiunea aplicației cu 5–20 MB. Downloaded — economisește spațiu, dar necesită internet la prima lansare. Google recomandă downloaded pentru API-uri care nu sunt utilizate pe fiecare ecran (Object Detection, Pose Detection).
Personalizare prin TFLite — ML Kit permite încărcarea propriului model TensorFlow Lite prin Custom Model API. Acest lucru oferă flexibilitate — utilizați API-uri gata făcute pentru sarcini standard și propriul model pentru cele specifice. ML Kit oferă un handler universal Input/Output care lucrează cu ByteBuffer și FloatArray. Potrivit Google (2025), 40% dintre proiectele ML Kit combină API-uri gata făcute și modele personalizate.
// Configurare 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 ->
// Eroare de procesare
}
Firebase vs standalone — ML Kit poate fi utilizat cu Firebase (funcții Cloud, Analytics, Crashlytics) sau ca SDK autonom fără Firebase. Modul standalone se conectează prin Google Play Services (Android) fără configurarea unui cont Firebase. API-urile Cloud sunt disponibile prin Firebase (Cloud Vision, Natural Language) pentru sarcini care necesită rețele neuronale pe serverul Google — dar aceste funcții sunt contra cost și nu on-device.
ML Kit Text Recognition — API pentru recunoașterea optică a caracterelor (OCR) pe imagini. Suportă două moduri: Latin-based (alfabet latin, chirilic, cifre — 45 de limbi) și Chinese/Japanese/Korean (CJK — limbi hieroglifice). Recunoașterea Latin utilizează modelul V2 (mai rapid) sau V1 (de înaltă precizie). V2 oferă viteză de 10–30 ms pe cadru, V1 — 50–100 ms.
Capacitățile Text Recognition includ recunoașterea textului tipărit și de mână, determinarea orientării textului, detectarea rândurilor, cuvintelor și simbolurilor, determinarea limbii textului. API returnează structura: Text → TextBlock → Line → Element (Word/Symbol). Fiecare element are bounding box, confidence și text recunoscut. Potrivit Google (2025), precizia ML Kit Text Recognition V2 pe alfabet latin este de 96%, pe chirilic — 91%.
Text Recognition în timp real — utilizare cu CameraX sau Camera2 pentru flux video. Creați un ImageAnalysis.Analyzer și transmiteți cadrele către ML Kit. Pentru performanță, reduceți rezoluția cadrului la 480p (640x480) — acesta este echilibrul optim între viteză și precizie. ML Kit gestionează automat rotirea imaginii, dar pentru viteză maximă transmiteți imaginea în orientarea corectă.
// Recunoașterea textului cu analizorul CameraX
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() }
}
}
Optimizarea Text Recognition: utilizați ImageDecoder pentru îmbunătățirea recunoașterii imaginilor neclare sau întunecate. Pentru text tipărit — TextRecognizerOptions.DEFAULT_OPTIONS (model V2). Pentru text de mână — TextRecognizerOptions.SCRIPT_LATIN (mai precis, dar mai lent). În proiectele IT Sectr folosim V2 pentru recunoașterea documentelor și modelul Latin pentru cecuri și chitanțe.
ML Kit Face Detection — API pentru detectarea fețelor în imagini și video. Determină bounding box-ul feței, coordonatele ochilor, nasului, gurii, urechilor (468 de puncte de contur) și expresiile de bază: zâmbet, gură deschisă, ochi închiși. Face Detection este unul dintre cele mai rapide API-uri ML Kit: 5–15 ms per cadru în funcție de numărul de fețe și puncte de contur.
Modurile Face Detection: contour mode (468 de puncte de contur ale feței pentru aplicarea precisă a măștilor/filtrelor), classification mode (determinarea zâmbetului, ochilor deschiși), landmark mode (puncte cheie fără contur). Modurile se combină în FaceDetectorOptions. Activarea tuturor modurilor încetinește detectarea de 2–3 ori — utilizați setul minim necesar pentru sarcina dumneavoastră.
Face Detection în aplicații AR — pe baza punctelor de contur, ML Kit construiește o mască facială pentru filtre de tip Snapchat. ML Kit returnează 468 de puncte cu coordonatele x, y, z (z = adâncime). Punctele sunt actualizate de 30–60 de ori pe secundă pe dispozitive moderne. Pentru aplicarea AR utilizați FaceMeshDetector (versiune specializată) — acesta returnează și triunghiurile rețelei pentru texturare.
// Detectarea fețelor cu puncte de contur
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
}
}
Limitările Face Detection: API nu recunoaște cui aparține fața (face recognition) — doar detectează fețele. Pentru identificarea persoanei utilizați FaceNet sau ArcFace pe un model TFLite personalizat. ML Kit funcționează corect cu fețe la un unghi de până la 45°, cu ochelari și mască parțială. Pentru unghiuri de profil (90°) precizia scade la 40–60%.
ML Kit Barcode Scanning — API pentru citirea și decodarea codurilor de bare unidimensionale (EAN, UPC, Code 128) și bidimensionale (QR, Data Matrix, PDF417). Barcode Scanning detectează codul în imagine — spre deosebire de ZXing, care necesită ca codul să ocupe aproape întregul cadru. ML Kit detectează codul de orice dimensiune și orientare, inclusiv mai multe coduri într-un singur cadru (mod multi-barcode).
Formate suportate: EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, ITF, Codabar, QR, Data Matrix, PDF417, Aztec. ML Kit determină automat formatul — nu trebuie să specificați tipul codului. În producție utilizați setBarcodeFormats() pentru a limita formatele suportate — aceasta accelerează scanarea cu 30–50% prin excluderea algoritmilor de decodare inutili.
Barcode Scanning în timp real — similar cu Text Recognition, integrare cu CameraX. ML Kit procesează cadrele cu o frecvență de până la 60 FPS. Pentru viteză maximă activați setPerformanceMode(PerformanceMode.FAST). Barcode Scanning ML Kit este de 2–3 ori mai rapid decât ZXing și detectează mai precis codurile neclare sau parțial acoperite. Potrivit Google (2025), ML Kit Barcode Scanning are o precizie de 98.5% în condiții de iluminare standard.
// Scanarea codurilor de bare cu filtru de format
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
}
}
Comparație cu ZXing: ML Kit este mai rapid, mai precis și mai simplu de integrat. ZXing — open-source, funcționează complet offline, nu necesită Google Play Services. ML Kit necesită Google Play Services (Android) sau CocoaPods (iOS). Pentru aplicațiile care rulează pe dispozitive fără Google (Huawei, Amazon Fire), utilizați ZXing ca fallback. Pentru restul — ML Kit, deoarece oferă o experiență UX mai bună datorită detectării multi-cod.
ML Kit Object Detection — API pentru detectarea și urmărirea obiectelor în imagini. Detectează obiecte din peste 1000 de categorii (clase ImageNet) — oameni, animale, vehicule, obiecte de uz casnic. Object Detection funcționează în două moduri: single-image (fotografie unică) și streaming (flux video cu urmărire). Modul streaming urmărește obiectele între cadre, atribuind fiecăruia un track ID unic.
Pose Detection — API pentru determinarea poziției umane pe baza a 33 de puncte cheie (schelet): cap, umeri, coate, încheieturi, șolduri, genunchi, picioare. Determină coordonatele (x, y, z) și confidence-ul fiecărui punct. Pose Detection se aplică în trackere de fitness (numărarea repetărilor, controlul formei), aplicații AR (avatar care copiază mișcările) și analitică sportivă. Viteza — 10–30 ms per cadru în funcție de numărul de persoane.
Object Tracking — ML Kit Object Detection cu urmărire între cadre utilizează un tracker bazat pe Optical Flow. Când un obiect este detectat, tracker-ul îl urmărește fără redetectare, economisind CPU/GPU. Dacă tracker-ul pierde obiectul (mișcare rapidă, obstrucționare), ML Kit pornește redetectarea. Potrivit Google (2025), tracker-ul menține obiectul în 95% din cadre la o viteză de mișcare de până la 30 km/h.
// Detectarea poziției (schelet uman)
val poseDetector = PoseDetection.getClient(
PoseDetectorOptions.Builder()
.setDetectorMode(PoseDetectorOptions.STREAM_MODE)
.build()
)
poseDetector.process(inputImage)
.addOnSuccessListener { pose ->
pose.allPoseLandmarks.forEach { landmark ->
val type = landmark.landmarkType // UMĂR_STÂNG, COT_DREPT...
val position = landmark.position3D
}
}
Selfie Segmentation — API pentru segmentarea persoanei în imagine (separarea persoanei de fundal). Returnează o mască de încredere pentru fiecare pixel. Selfie Segmentation este utilizat pentru estomparea sau înlocuirea fundalului în apeluri video, editor foto și aplicații AR. Masca este returnată ca UInt8Array de dimensiunea imaginii originale — fiecare pixel conține o valoare de la 0.0 (fundal) la 1.0 (persoană).
Custom Model API — posibilitatea de a încărca și rula propriile modele TensorFlow Lite prin interfața ML Kit. ML Kit oferă un API Input/Output unificat: ByteBuffer la intrare, FloatArray/TensorImage la ieșire. Acest lucru permite utilizarea avantajelor ML Kit (gestionarea modelelor, procesarea imaginilor, conexiunea cu CameraX) cu modele personalizate de face recognition, object classification, NLP și altele.
Încărcarea modelului — plasați fișierul .tflite în assets/ (Android) sau bundle (iOS) și încărcați-l prin CustomModelDownloadConditions sau Firebase Model Manager. Pentru descărcarea modelelor mari (5+ MB) utilizați condiții de descărcare: Wi-Fi, încărcat, în fundal. Google recomandă încărcarea modelului la prima lansare a aplicației, nu în momentul primei utilizări.
// Încărcarea modelului TFLite personalizat
val conditions = CustomModelDownloadConditions.Builder()
.requireWifi()
.build()
val remoteModel = CustomRemoteModel.Builder("my_model")
.setRemoteModelName("my_model_v2")
.build()
remoteModel.download(conditions)
.addOnSuccessListener { /* model ready */ }
.addOnFailureListener {
// Utilizați modelul inclus din active
}
Optimizarea modelelor personalizate: utilizați TFLite Converter cu compatibilitate delegate. Pentru performanță maximă, cuantizați modelul (INT8) — aceasta reduce dimensiunea modelului de 4 ori și accelerează inferența de 2–3 ori prin XNNPACK Delegate. ML Kit Custom Model API suportă Dynamic Shape (batch = 1), Image Input (UInt8, Float32) și Tensor Output.
Întrebări frecvente
ML Kit — este un SDK de la Google cu modele ML gata făcute pentru Android și iOS. Include API pentru recunoașterea textului (OCR), detectarea fețelor, scanarea codurilor de bare, recunoașterea obiectelor, determinarea poziției, traducere și segmentare. Funcționează pe dispozitiv, nu necesită internet. Se conectează prin Google Play Services (Android) sau CocoaPods (iOS) minimal — cu o singură linie de dependență.
ML Kit — un SDK de nivel înalt cu API-uri gata făcute pentru sarcini specifice (text, fețe, coduri). TensorFlow Lite — un runtime de nivel scăzut pentru rularea oricăror modele TFLite. ML Kit include TFLite sub capotă, dar oferă cod gata făcut și optimizări pentru sarcini standard. Dacă trebuie să recunoașteți text — ML Kit (5 linii de cod). Dacă aveți propria rețea neuronală — TFLite (20+ linii).
Da, toate API-urile principale ML Kit (Text Recognition, Face Detection, Barcode Scanning, Object Detection, Pose Detection, Image Labeling) funcționează complet on-device fără conexiune la internet după descărcarea inițială a modelului. Cloud API (Cloud Vision, Natural Language) — opționale și necesită internet. Pentru modelele downloaded, internetul este necesar doar la prima descărcare a modelului.
Da, ML Kit suportă complet iOS prin CocoaPods sau Swift Package Manager. API-urile sunt similare cu versiunea Android. Pentru iOS, ML Kit utilizează Vision Framework și Core ML sub capotă — modelele rulează pe Apple Neural Engine (A12+). ML Kit pe iOS funcționează cu UIImage, CVPixelBuffer și CMSampleBuffer. Suport iOS 12+ și Xcode 15+.
Da, API-urile on-device ML Kit sunt complet gratuite, fără limite ale numărului de cereri. Cloud API (prin Firebase) — sunt contra cost după depășirea limitei gratuite (200 USD/lună gratuit). Modelele on-device nu necesită un cont Firebase — ML Kit funcționează autonom prin Google Play Services. Pentru aplicații comerciale, on-device ML Kit este o alegere sigură cu cost operațional zero.
Rezumat
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și