Image Labeling — este o sarcină de viziune computerizată în care rețeaua neuronală atribuie imaginii etichete dintr-un set predefinit de clase: de la simple (pisică, câine, mașină) la specifice (specie de plantă, model de smartphone, imagine medicală). În dezvoltarea mobilă, Image Labeling este utilizat pentru etichetarea automată a fotografiilor în galerie, moderarea conținutului utilizatorilor, căutarea vizuală a produselor după fotografie și aplicațiile AR. Conform Google ML Kit, 2025, clasificatorul încorporat recunoaște 400+ categorii în 10–20 ms per cadru cu o precizie de 91% (top-1).
Principalele
Image Labeling — o subcategorie a clasificării imaginilor, în care modelul primește o imagine și returnează probabilități pentru fiecare clasă din setul de antrenare. Spre deosebire de object detection, Image Labeling nu determină poziția obiectului în imagine — doar prezența sau absența acestuia. Spre deosebire de image segmentation, nu delimitează conturul obiectului. Image Labeling rezolvă întrebarea “ce este în fotografie?”, nu “unde și ce este în fotografie?”.
Arhitectura clasificatorului: CNN backbone (MobileNet, ResNet, EfficientNet) extrage harta de caracteristici din imagine, Global Average Pooling comprimă dimensiunile spațiale, stratul complet conectat (Dense) cu activare Softmax produce probabilitățile claselor. MobileNetV2 — cel mai popular backbone pentru dispozitive mobile: 3.5M parametri, 0.5–2 ms inferență pe Pixel 6 prin GPU. EfficientNet-Lite — alternativă cu un raport accuracy/parametri mai bun.
Top-1 vs Top-5 accuracy: top-1 — modelul a ghicit corect clasa principală (91% pentru ML Kit); top-5 — clasa corectă se află în primele cinci cele mai probabile (98% pentru ML Kit). Pentru aplicații de producție utilizați top-5 și afișați utilizatorului mai multe variante de etichete. Pentru moderarea conținutului — top-1 cu pragul confidence >= 0.8 (reduce rata de false positive cu 40%).
| Arhitectură | Parametri | Latency | Top-1 | Dimensiune |
|---|---|---|---|---|
| MobileNetV2 | 3.5M | 0.5–2 ms | 90.2% | 14 MB |
| MobileNetV3 | 2.5M | 0.3–1.5 ms | 91.5% | 10 MB |
| EfficientNet-Lite0 | 4.7M | 1–3 ms | 92.3% | 18 MB |
| ResNet-50 | 25.6M | 10–30 ms | 95.2% | 98 MB |
On-device vs Cloud: clasificarea pe dispozitiv (ML Kit, Core ML) oferă o latență de 1–20 ms cu confidențialitate completă a datelor. Cloud API (Google Cloud Vision, AWS Rekognition) — latență 500–2000 ms + cost per cerere, dar mai precisă (97–99%) datorită modelelor mai mari (ViT, CLIP). Pentru aplicații în timp real (cameră, AR) alegeți on-device. Pentru scenarii complexe (medicină, expertiză) — cloud cu fallback pe on-device.
ML Kit Image Labeling — biblioteca gata făcută de la Google pentru clasificarea imaginilor pe dispozitiv. Disponibilă în două moduri: on-device (gratuit, 400+ etichete, 10–20 ms) și cloud (plată, 10000+ etichete, 500+ ms). Versiunea on-device folosește MobileNetV3 + cuantizare INT8, ocupă 4 MB pe disc. ML Kit determină automat orientarea imaginii și optimizează dimensiunea înainte de clasificare.
API ML Kit: InputImage (din Bitmap, media.Image, filePath) → ImageLabeler → OnSuccessListener cu lista de ImageLabel (label, confidence, index). MillisThreshold (implicit 0.5) — încrederea minimă pentru returnarea etichetei. Ridicarea pragului la 0.7 reduce numărul de etichete pe cadru, dar crește precizia fiecăreia. Pentru moderarea conținutului, setați pragul la 0.8.
val labeler = ImageLabeling.getClient(
ImageLabelerOptions.DEFAULT_OPTIONS
)
labeler.process(inputImage)
.addOnSuccessListener { labels ->
labels
.filter { it.confidence >= 0.7f }
.forEach { label ->
log("Label: ${label.label}")
log("Confidence: ${label.confidence}")
}
}
.addOnFailureListener { error -> handleError(error) }
ML Kit pe iOS: API similar cu Android, folosește UIImage sau CMSampleBuffer. ML Kit folosește automat Core ML + ANE pe dispozitivele A12+. Pentru iOS 16+, ML Kit Image Labeling oferă o latență de 8–15 ms pe iPhone 15 Pro. Pentru a minimiza întârzierea, trimiteți imaginea la cea mai mică rezoluție posibilă (224x224 pentru MobileNet) — ML Kit o scalează singur, dar conversia imaginilor mari adaugă 2–5 ms de suprasarcină.
Core ML — cadrul Apple pentru rularea modelelor ML pe dispozitiv. Împreună cu Vision Framework (VNCoreMLRequest), Core ML permite clasificarea imaginilor cu un cod minim. Apple oferă modele încorporate: SqueezeNet (5 MB, 80.5% top-1), ResNet50 (98 MB, 95.2%), MobileNetV2 (14 MB, 90.2%). Modelele în format .mlmodel sau .mlpackage sunt convertite prin coremltools din TensorFlow, PyTorch.
VNCoreMLRequest — Vision API care preia preprocesarea imaginii (scalare, crop-to-fill, conversie spațiu de culoare) și transmite rezultatul modelului. Vision returnează VNClassificationObservation cu identifier (numele clasei) și confidence (0..1). MaxCandidates — numărul maxim de etichete returnate (implicit 1). Pentru clasificare cu selecție automată, utilizați VNCoreMLRequest cu imageCropAndScaleOption = .centerCrop.
guard let model = try? VNCoreMLModel(for: MobileNetV2().model) else { return }
let request = VNCoreMLRequest(model: model) { request, _ in
guard let results = request.results as? [VNClassificationObservation] else { return }
results.prefix(5).forEach { obs in
print("Inferența modelului personalizat TFLite")
}
}
request.imageCropAndScaleOption = .centerCrop
let handler = VNImageRequestHandler(cgImage: cgImage, options: [:])
try handler.perform([request])
Core ML vs ML Kit pe iOS: Core ML — nativ, nu necesită SDK-uri suplimentare, este mai bine optimizat pentru ANE (motorul neural Apple). ML Kit — mai precis pe scene complexe datorită modelelor Google. Core ML suportă orice modele (convertite prin coremltools), ML Kit — doar pe ale sale. Pentru implementare rapidă — ML Kit. Pentru control maxim asupra modelului — Core ML. Alegerea practică: ambele cadre într-o singură aplicație — ML Kit pentru etichete standard, Core ML pentru cele personalizate.
Modele personalizate Image Labeling — antrenarea propriului clasificator pentru o sarcină specifică: recunoașterea calității fructelor, detectarea defectelor pe linia de producție, clasificarea raselor de câini. Procesul include colectarea setului de date (1000+ imagini per clasă), adnotarea, antrenarea prin transfer learning pe MobileNetV2 sau EfficientNet pre-antrenat și conversia în TFLite / Core ML.
Transfer Learning — metoda principală de antrenare a clasificatoarelor mobile. Se ia un model pre-antrenat pe ImageNet, se îngheață straturile inferioare (CNN backbone), se reantrenează straturile superioare (Fine-tuning). Aceasta necesită doar 100–500 de imagini per clasă și durează 1–2 ore pe Google Colab (GPU). Biblioteci: TensorFlow Keras (Android), PyTorch + coremltools (iOS). Rezultat: 95–98% accuracy pe clasele țintă.
// Image Labeling cu Core ML pentru căutare vizuală
val interpreter = Interpreter(loadModelFile(context))
val inputImage = TensorImage.fromBitmap(bitmap)
.apply { load(Bitmap.createScaledBitmap(bitmap, 224, 224, true)) }
val output = Array(1) { FloatArray(NUM_CLASSES) }
interpreter.run(inputImage.tensorBuffer, output)
val probabilities = TensorLabel.mapIndexToLabels(output[0])
val topClass = probabilities.maxByOrNull { it.value }
ML Kit Custom Model API — alternativă: nu este nevoie să scrieți cod pentru TFLite Interpreter — ML Kit însuși încarcă modelul și gestionează preprocesarea. Custom Image Labeler acceptă un model TFLite cu dimensiunea de intrare 224x224x3 și ieșirea score float[NUM_CLASSES]. Este suficient să transmiteți fișierul modelului și să primiți etichetele standard. ML Kit Custom Model API este recomandat dacă modelul corespunde formatului TFLite. Dacă este necesar un control mai fin asupra inferenței (praguri, threshold per class) — utilizați TFLite Interpreter direct.
TFLite (TensorFlow Lite) — formatul modelelor Google pentru dispozitive mobile și edge. Suportă cuantizarea (FP16, INT8), care reduce dimensiunea modelului de 4 ori și crește viteza de 2–3 ori cu prețul unei mici pierderi de precizie (1–2%). TFLite funcționează pe Android prin GPU Delegate (OpenGL/OpenCL), pe iOS — prin Core ML Delegate. TFLite Task API oferă o interfață unificată pentru Image Classifier, Object Detector și alte sarcini.
Core ML — format Apple (.mlpackage — nou, .mlmodel — vechi). Suportă cuantizarea (FP16), paletizarea greutăților (weight palettization până la 1/2/4/6/8 biți), ceea ce oferă compresia modelului până la 80%. Core ML folosește ANE (Neural Engine), GPU și CPU — sistemul alege automat motorul optim. Conversia din PyTorch prin torch.onnx.export + coremltools, din TensorFlow — prin tf-keras + coremltools. iOS 18+ suportă antrenarea pe dispozitiv prin Core ML Training API.
| Caracteristică | TFLite | Core ML |
|---|---|---|
| Dimensiune (MobileNetV2) | 14 MB (FP32) / 3.5 MB (INT8) | 14 MB (FP16) / 2.8 MB (4-bit) |
| Motor de inferență | GPU / NNAPI / XNNPACK | ANE / GPU / CPU (auto) |
| Cuantizare | FP16, INT8, DynamicRange | FP16, Palettization (1-8 bit) |
| Performanță iOS | Core ML Delegate (2–5 ms) | ANE nativ (1–3 ms) |
| Unelte | TFLite Model Maker, Task API | coremltools, Create ML |
ONNX ca format intermediar: convertiți modelele în ONNX (PyTorch → ONNX, TensorFlow → ONNX) și apoi în TFLite / Core ML prin onnx2tf sau onnx2coreml. ONNX — un format unificat suportat de 70+ cadre. Aceasta simplifică pipeline-ul: un model antrenat → ONNX → formate native pentru ambele platforme. Antrenarea în PyTorch + conversia în ONNX → TFLite (Android) / Core ML (iOS) — pipeline-ul recomandat pentru proiecte cross-platform.
Etichetarea automată a fotografiilor — aplicațiile de galerie (Google Photos, Apple Photos) atribuie automat etichete imaginilor: “plajă”, “apus”, “câine”, “mâncare”. ML Kit Image Labeling procesează fiecare fotografie din galerie în fundal — 1–2 secunde pentru 100 de fotografii (batch). Utilizatorul primește căutare după etichete fără sortare manuală. Google Photos utilizează clasificarea pe dispozitiv cu verificare ulterioară pe server pentru scene complexe.
Moderarea conținutului — detectarea automată a imaginilor nedorite în conținutul utilizatorilor (rețele sociale, marketplace-uri, platforme UGC). ML Kit Custom Model detectează conținut NSFW, violență, propagandă cu o precizie de 92–96%. Pragul de declanșare — confidence 0.8. Pentru reducerea false positives (imagini medicale legitime) utilizați un comitet de clasificatoare: Image Labeling + Object Detection + Blur Detection. Moderarea pe dispozitiv este mai rapidă și protejează confidențialitatea utilizatorilor.
Căutarea vizuală a produselor — utilizatorul fotografiază un produs (pantofi, geantă, mobilă), aplicația determină eticheta și găsește produse similare în catalog. Image Labeling restrânge căutarea la o categorie, apoi descriptorii de caracteristici (feature vectors) găsesc instanțe vizual similare. Pinterest Lens, Google Lens, Amazon StyleSnap folosesc această abordare. Clasificarea pe dispozitiv dă rezultatul în 10–30 ms, cloud — căutarea în baza de produse în 200–500 ms.
// Image Labeling with Core ML for visual search
let request = VNCoreMLRequest(model: productClassifier) { req, _ in
guard let result = req.results?.first as? VNClassificationObservation,
result.confidence > 0.6 else { return }
SearchService.findSimilarProducts(
category: result.identifier,
image: capturedPhoto,
limit: 10
) { products in
DispatchQueue.main.async {
self.showResults(products)
}
}
}
AR și aplicații educaționale — Image Labeling clasifică obiecte în timp real prin cameră. Utilizatorul îndreaptă telefonul spre o plantă — aplicația arată numele, îngrijirea, udarea. Îndreaptă spre o piesă de mecanism — explică scopul. Cerință: latență < 30 ms. EfficientNet-Lite pe dispozitive Flagship oferă 15–25 ms. În lumină slabă precizia scade — utilizați un prag automat de confidence (reduceți pragul în condiții de lumină scăzută pentru a compensa căderea calității intrării).
Întrebări frecvente
Image Labeling determină ce obiecte sunt prezente în imagine, dar nu indică locația lor. Object Detection — găsește obiecte și returnează bounding box-ul fiecăruia. Image Labeling este mai rapid (1–20 ms vs 20–100 ms), necesită mai puține date de antrenare, dar nu oferă informații poziționale. Pentru clasificare simplă (pisică/câine) — Image Labeling. Pentru recunoaștere precisă (câte obiecte, unde se află) — Object Detection.
Nu, ML Kit Image Labeling funcționează complet pe dispozitiv. Modelul se încarcă la prima pornire (mod descărcat — 4 MB) și se stochează local. Modelele Core ML se încarcă împreună cu aplicația. TFLite Custom Model — parte a APK-ului. Toate calculele se execută pe dispozitiv, datele nu sunt trimise către server. Aceasta garantează confidențialitatea utilizatorului și funcționarea fără internet. Clasificarea în cloud (Google Cloud Vision) — o alternativă cu internet și precizie mai mare.
Pentru transfer learning pe MobileNetV2: minim 50–100 de imagini per clasă, optim 300–500. Cu cât variabilitatea este mai mare (unghiuri, iluminare, fundal), cu atât precizia este mai mare. Pentru antrenarea de la zero (fără model pre-antrenat) sunt necesare minim 1000 de imagini per clasă. Recomandare: începeți cu 200 de imagini per clasă, evaluați accuracy, adăugați date pentru clasele cu precizie scăzută. Data augmentation (rotiri, scară, deplasare) mărește setul de date efectiv de 3–5 ori fără colectarea de noi date.
Metodele principale: cuantizarea INT8 după antrenare (post-training quantization) — reduce dimensiunea de 4 ori cu o pierdere de 1–2% accuracy; pruning (eliminarea greutăților puțin semnificative) — până la 50% compresie; distillation (un model student mai mic, antrenat pe ieșirile unui model teacher mare) — până la 80% compresie. MobileNetV2 INT8 ocupă 3.5 MB, SqueezeNet — 5 MB. Dimensiunea țintă — nu mai mult de 10 MB pentru încărcare instantanee fără indicator de progres.
ML Kit Image Labeling v2 arată top-1 accuracy de 91% pe setul de testare Google (400+ clase). Top-5 accuracy — 98%. La unghiuri și condiții de iluminare non-standard, precizia poate scădea la 75–85%. Pentru producție, se recomandă utilizarea unui prag confidence de 0.7 pentru filtrarea stabilă a predicțiilor de calitate scăzută. Dacă precizia este insuficientă — utilizați un model personalizat, antrenat pe un set de date specific: accuracy 95–98% pe clasele țintă.
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