Image Labeling — je úloha počítačového vidění, ve které neuronová síť přiřazuje obrázku štítky z předdefinované sady tříd: od jednoduchých (kočka, pes, auto) po specifické (druh rostliny, model smartphonu, lékařský snímek). V mobilním vývoji se Image Labeling používá pro automatické tagování fotografií v galerii, moderování uživatelského obsahu, vizuální vyhledávání produktů podle fotografie a AR aplikace. Podle Google ML Kit, 2025 rozpoznává vestavěný klasifikátor 400+ kategorií za 10–20 ms na snímek s přesností 91 % (top-1).
Hlavní body
Image Labeling — podkategorie klasifikace obrázků, kde model přijímá obrázek a vrací pravděpodobnosti pro každou třídu z trénovací sady. Na rozdíl od object detection, Image Labeling neurčuje polohu objektu na obrázku — pouze jeho přítomnost nebo nepřítomnost. Na rozdíl od image segmentation, neodděluje obrys objektu. Image Labeling řeší otázku “co je na fotografii?”, nikoli “kde a co je na fotografii?”.
Architektura klasifikátoru: CNN backbone (MobileNet, ResNet, EfficientNet) extrahuje mapu příznaků z obrázku, Global Average Pooling sbalí prostorové rozměry, plně propojená vrstva (Dense) s aktivací Softmax vydává pravděpodobnosti tříd. MobileNetV2 — nejoblíbenější backbone pro mobilní zařízení: 3,5M parametrů, 0,5–2 ms inferenční doba na Pixel 6 přes GPU. EfficientNet-Lite — alternativa s lepším poměrem accuracy/parametry.
Top-1 vs Top-5 accuracy: top-1 — model správně uhodl hlavní třídu (91 % u ML Kit); top-5 — správná třída je v pěti nejpravděpodobnějších (98 % u ML Kit). Pro produkční aplikace používejte top-5 a zobrazte uživateli několik variant štítků. Pro moderování obsahu — top-1 s prahem confidence >= 0,8 (snižuje míru falešně pozitivních o 40 %).
| Architektura | Parametry | Latence | Top-1 | Velikost |
|---|---|---|---|---|
| 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: klasifikace na zařízení (ML Kit, Core ML) poskytuje latenci 1–20 ms s úplným soukromím dat. Cloud API (Google Cloud Vision, AWS Rekognition) — latence 500–2000 ms + náklady na požadavek, ale přesnější (97–99 %) díky větším modelům (ViT, CLIP). Pro aplikace v reálném čase (kamera, AR) zvolte on-device. Pro složité scénáře (medicína, expertíza) — cloud s fallbackem na on-device.
ML Kit Image Labeling — hotová knihovna od Google pro klasifikaci obrázků na zařízení. K dispozici ve dvou režimech: on-device (zdarma, 400+ štítků, 10–20 ms) a cloud (placené, 10000+ štítků, 500+ ms). On-device verze používá MobileNetV3 + INT8 kvantizaci, zabírá 4 MB na disku. ML Kit automaticky určuje orientaci obrázku a optimalizuje velikost před klasifikací.
ML Kit API: InputImage (z Bitmap, media.Image, filePath) → ImageLabeler → OnSuccessListener se seznamem ImageLabel (label, confidence, index). MillisThreshold (výchozí 0,5) — minimální jistota pro vrácení štítku. Zvýšení prahu na 0,7 snižuje počet štítků na snímek, ale zvyšuje přesnost každého z nich. Pro moderování obsahu nastavte práh na 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 na iOS: API je podobné Androidu, používá UIImage nebo CMSampleBuffer. ML Kit automaticky používá Core ML + ANE na zařízeních A12+. Pro iOS 16+ poskytuje ML Kit Image Labeling latenci 8–15 ms na iPhone 15 Pro. Pro minimalizaci latence pošlete obrázek v nejnižším možném rozlišení (224x224 pro MobileNet) — ML Kit sám přizpůsobí velikost, ale konverze velkých obrázků přidá 2–5 ms režie.
Core ML — framework Apple pro spouštění ML modelů na zařízení. Spolu s Vision Framework (VNCoreMLRequest) umožňuje Core ML klasifikovat obrázky s minimálním kódem. Apple poskytuje vestavěné modely: SqueezeNet (5 MB, 80,5% top-1), ResNet50 (98 MB, 95,2%), MobileNetV2 (14 MB, 90,2%). Modely ve formátu .mlmodel nebo .mlpackage se převádějí přes coremltools z TensorFlow, PyTorch.
VNCoreMLRequest — Vision API, které přebírá předzpracování obrázku (škálování, crop-to-fill, konverzi barevného prostoru) a předává výsledek modelu. Vision vrací VNClassificationObservation s identifier (název třídy) a confidence (0..1). MaxCandidates — maximální počet vrácených štítků (výchozí 1). Pro klasifikaci s automatickým výběrem použijte VNCoreMLRequest s 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("TFLite vlastní model inference")
}
}
request.imageCropAndScaleOption = .centerCrop
let handler = VNImageRequestHandler(cgImage: cgImage, options: [:])
try handler.perform([request])
Core ML vs ML Kit na iOS: Core ML — nativní, nevyžaduje další SDK, je lépe optimalizovaný pro ANE (neuronový engine Apple). ML Kit — přesnější na složitých scénách díky modelům Google. Core ML podporuje jakékoli modely (převedené přes coremltools), ML Kit — pouze své vlastní. Pro rychlou implementaci — ML Kit. Pro maximální kontrolu nad modelem — Core ML. Praktická volba: oba frameworky v jedné aplikaci — ML Kit pro standardní štítky, Core ML pro vlastní.
Vlastní modely Image Labeling — trénování vlastního klasifikátoru pro specifický úkol: rozpoznávání kvality ovoce, detekce defektů na výrobní lince, klasifikace plemen psů. Proces zahrnuje sběr datové sady (1000+ obrázků na třídu), anotaci, trénování pomocí transfer learning na předtrénovaném MobileNetV2 nebo EfficientNet a konverzi do TFLite / Core ML.
Transfer Learning — hlavní metoda trénování mobilních klasifikátorů. Vezme se model předtrénovaný na ImageNet, spodní vrstvy (CNN backbone) se zmrazí, horní vrstvy (Fine-tuning) se přeučí. To vyžaduje pouze 100–500 obrázků na třídu a trvá 1–2 hodiny na Google Colab (GPU). Knihovny: TensorFlow Keras (Android), PyTorch + coremltools (iOS). Výsledek: 95–98% accuracy na cílových třídách.
// Image Labeling s Core ML pro vizuální vyhledávání
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 — alternativa: není třeba psát kód pro TFLite Interpreter — ML Kit sám načte model a zpracuje předzpracování. Custom Image Labeler přijímá model TFLite s velikostí vstupu 224x224x3 a výstupem score float[NUM_CLASSES]. Stačí předat soubor modelu a získat standardní štítky. ML Kit Custom Model API se doporučuje, pokud model odpovídá formátu TFLite. Pokud je vyžadována jemnější kontrola nad inferencí (prahy, threshold per class) — použijte přímo TFLite Interpreter.
TFLite (TensorFlow Lite) — formát modelů Google pro mobilní a edge zařízení. Podporuje kvantizaci (FP16, INT8), která 4krát zmenšuje velikost modelu a 2–3x zvyšuje rychlost za cenu mírné ztráty přesnosti (1–2 %). TFLite funguje na Androidu přes GPU Delegate (OpenGL/OpenCL), na iOS — přes Core ML Delegate. TFLite Task API poskytuje jednotné rozhraní pro Image Classifier, Object Detector a další úlohy.
Core ML — formát Apple (.mlpackage — nový, .mlmodel — starý). Podporuje kvantizaci (FP16), paletizaci vah (weight palettization až 1/2/4/6/8 bitů), což poskytuje kompresi modelu až 80 %. Core ML používá ANE (Neural Engine), GPU a CPU — systém automaticky vybírá optimální engine. Konverze z PyTorch přes torch.onnx.export + coremltools, z TensorFlow — přes tf-keras + coremltools. iOS 18+ podporuje trénování na zařízení přes Core ML Training API.
| Vlastnost | TFLite | Core ML |
|---|---|---|
| Velikost (MobileNetV2) | 14 MB (FP32) / 3,5 MB (INT8) | 14 MB (FP16) / 2,8 MB (4-bit) |
| Inferenční engine | GPU / NNAPI / XNNPACK | ANE / GPU / CPU (auto) |
| Kvantizace | FP16, INT8, DynamicRange | FP16, Palettization (1-8 bit) |
| Výkon na iOS | Core ML Delegate (2–5 ms) | Nativní ANE (1–3 ms) |
| Nástroje | TFLite Model Maker, Task API | coremltools, Create ML |
ONNX jako meziformát: převeďte modely do ONNX (PyTorch → ONNX, TensorFlow → ONNX) a poté do TFLite / Core ML přes onnx2tf nebo onnx2coreml. ONNX je jednotný formát podporovaný 70+ frameworky. To zjednodušuje pipeline: jeden natrénovaný model → ONNX → nativní formáty pro obě platformy. Trénování v PyTorch + konverze do ONNX → TFLite (Android) / Core ML (iOS) — doporučená pipeline pro multiplatformní projekty.
Automatické tagování fotografií — galerijní aplikace (Google Photos, Apple Photos) automaticky přiřazují štítky obrázkům: “pláž”, “západ slunce”, “pes”, “jídlo”. ML Kit Image Labeling zpracovává každou fotografii z galerie na pozadí — 1–2 sekundy na 100 fotografií (dávka). Uživatel získá vyhledávání podle štítků bez ručního třídění. Google Photos používá klasifikaci na zařízení s následným ověřením na serveru pro složité scény.
Moderování obsahu — automatická detekce nežádoucích obrázků v uživatelském obsahu (sociální sítě, tržiště, UGC platformy). ML Kit Custom Model detekuje NSFW obsah, násilí, propagandu s přesností 92–96 %. Práh aktivace — confidence 0,8. Pro snížení falešně pozitivních (legální lékařské snímky) použijte výbor klasifikátorů: Image Labeling + Object Detection + Blur Detection. Moderování na zařízení je rychlejší a chrání soukromí uživatelů.
Vizuální vyhledávání produktů — uživatel vyfotí produkt (boty, taška, nábytek), aplikace určí štítek a najde podobné produkty v katalogu. Image Labeling zužuje vyhledávání na kategorii, poté deskriptory příznaků (feature vectors) najdou vizuálně podobné instance. Pinterest Lens, Google Lens, Amazon StyleSnap používají tento přístup. Klasifikace na zařízení dává výsledek za 10–30 ms, cloud — vyhledávání v databázi produktů za 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 a vzdělávací aplikace — Image Labeling klasifikuje objekty v reálném čase přes kameru. Uživatel namíří telefon na rostlinu — aplikace zobrazí název, péči, zalévání. Namíří na část mechanismu — vysvětlí účel. Požadavek: latence < 30 ms. EfficientNet-Lite na špičkových zařízeních poskytuje 15–25 ms. Při slabém osvětlení přesnost klesá — použijte automatický práh confidence (snižte práh při slabém světle pro kompenzaci poklesu kvality vstupu).
Často kladené otázky
Image Labeling určuje, jaké objekty jsou na obrázku přítomny, ale neuvádí jejich polohu. Object Detection — najde objekty a vrátí bounding box každého z nich. Image Labeling je rychlejší (1–20 ms vs 20–100 ms), vyžaduje méně trénovacích dat, ale neposkytuje poziční informace. Pro jednoduchou klasifikaci (kočka/pes) — Image Labeling. Pro přesné rozpoznání (kolik objektů, kde se nacházejí) — Object Detection.
Ne, ML Kit Image Labeling funguje zcela na zařízení. Model se načte při prvním spuštění (režim stažení — 4 MB) a ukládá se lokálně. Modely Core ML se načítají spolu s aplikací. TFLite Custom Model — součást APK. Všechny výpočty probíhají na zařízení, data se neodesílají na server. To zaručuje soukromí uživatele a fungování bez internetu. Cloudová klasifikace (Google Cloud Vision) — alternativa s internetem a vyšší přesností.
Pro transfer learning na MobileNetV2: minimálně 50–100 obrázků na třídu, optimálně 300–500. Čím větší variabilita (úhly, osvětlení, pozadí), tím vyšší přesnost. Pro trénování od nuly (bez předtrénovaného modelu) je potřeba minimálně 1000 obrázků na třídu. Doporučení: začněte s 200 obrázky na třídu, vyhodnoťte accuracy, přidejte data pro třídy s nízkou přesností. Data augmentation (rotace, měřítko, posun) zvyšuje efektivní datovou sadu 3–5x bez sběru nových dat.
Hlavní metody: INT8 kvantizace po trénování (post-training quantization) — zmenší velikost 4x se ztrátou 1–2% accuracy; pruning (odstranění méně významných vah) — až 50% komprese; distillation (menší studentský model trénovaný na výstupech velkého učitelského modelu) — až 80% komprese. MobileNetV2 INT8 zabírá 3,5 MB, SqueezeNet — 5 MB. Cílová velikost — ne více než 10 MB pro okamžité načtení bez indikátoru průběhu.
ML Kit Image Labeling v2 vykazuje top-1 accuracy 91 % na testovací sadě Google (400+ tříd). Top-5 accuracy — 98 %. Při nestandardních úhlech a světelných podmínkách může přesnost klesnout na 75–85 %. Pro produkci se doporučuje používat práh confidence 0,7 pro stabilní filtrování nízko kvalitních predikcí. Pokud přesnost není dostatečná — použijte vlastní model natrénovaný na specifické datové sadě: accuracy 95–98% na cílových třídách.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také