Object Detection — je úloha počítačového vidění, která současně určuje třídu objektu (kočka, auto, člověk) a jeho polohu na obrázku ve formě obdélníkového rámečku (bounding box). Na rozdíl od Image Labeling, Object Detection nachází více objektů různých tříd v jednom snímku a udává jejich souřadnice. V mobilním vývoji se Object Detection používá v systémech videodohledu, AR aplikacích, autonomních dronech, lékařském zobrazování a retailové analytice. Podle údajů Google ML Kit, 2025 dosahuje on-device Object Detection 30 FPS na vlajkových zařízeních s přesností 87% mAP.
Hlavní body
Object Detection řeší dva úkoly současně: co je na obrázku (klasifikace) a kde (regrese souřadnic). Model rozdělí obrázek do mřížky, pro každou buňku předpovídá bounding box (x, y, width, height) a pravděpodobnosti tříd. Non-Maximum Suppression (NMS) odstraňuje duplicitní rámečky pro jeden objekt a ponechává nejjistější predikci. Moderní architektury se dělí na two-stage (Faster R-CNN — nejprve region proposals, poté klasifikace) a one-stage (YOLO, SSD — vše najednou).
Metriky hodnocení: mAP (mean Average Precision) — hlavní metrika kvality Object Detection. mAP@0.5 — přesnost při prahu IoU 0.5, mAP@0.5:0.95 — průměr přes prahy od 0.5 do 0.95. FPS — počet snímků za sekundu (rychlost inferencí). Pro mobilní aplikace je rovnováha mAP/FPS kritická: YOLOv8-Nano poskytuje 42% mAP@0.5:0.95 při 50+ FPS, SSD MobileNet — 22% mAP při 60+ FPS. Pro real-time > 20 FPS, pro interaktivní použití 5–15 FPS.
IoU (Intersection over Union) — metrika překryvu mezi predikovaným a ground truth bounding boxem. IoU = plocha průniku / plocha sjednocení. Práh IoU pro NMS je obvykle 0.5–0.7. Pro sledování objektů mezi snímky (re-identification) použijte Deep SORT nebo ByteTrack s IoU párováním. Pro počítání objektů ve videu — BoT-SORT poskytuje 85% MOTA (Multiple Object Tracking Accuracy).
| Architektura | mAP@0.5:0.95 | Latence | Parametry | Velikost |
|---|---|---|---|---|
| YOLOv8-Nano | 42% | 10–30 ms | 2.6M | 5.9 MB |
| YOLOv8-Small | 50% | 25–60 ms | 11.2M | 22 MB |
| SSD MobileNetV2 | 22% | 15–40 ms | 5.2M | 21 MB |
| EfficientDet-Lite0 | 35% | 20–50 ms | 3.9M | 15 MB |
Anchor Boxes — předdefinované tvary bounding boxu, které model koriguje. YOLOv8 používá detekci bez kotev (anchor-free), což zjednodušuje učení a zrychluje inferenci. SSD a staré YOLO vyžadují výběr kotev pro datovou sadu. Pro mobilní vývoj jsou preferovány anchor-free architektury (YOLOv8, FCOS) — nezávisí na velikosti objektů a jsou jednodušší na přizpůsobení.
ML Kit Object Detection and Tracking — knihovna Google pro detekci a sledování objektů na zařízení. Podporuje dvě modifikace: single-image detector (pro fotografie) a streaming detector (pro video). Režim streamování automaticky sleduje objekty mezi snímky pomocí optického toku, čímž snižuje latenci mezi snímky na 5–10 ms po počáteční detekci. Kategorie: fashion, food, home, places — každá 10–20 tříd.
API ML Kit: ObjectDetector (možnosti: detectorMode, enableClassification, enableMultipleObjects) → InputImage → DetectedObject (trackingId, boundingBox, classificationCategory, classificationConfidence). TrackingId umožňuje sledovat stejný objekt mezi snímky. MultipleObjects = true — detekuje až 5 objektů na snímek. Classification — zapíná rozpoznávání kategorie objektu (výchozí false pro rychlost). Režim streamování je doporučen pro real-time: 20–30 FPS na Pixel 6.
val options = ObjectDetectorOptions.Builder()
.setDetectorMode(ObjectDetectorOptions.STREAM_MODE)
.enableClassification()
.enableMultipleObjects()
.build()
val detector = ObjectDetection.getClient(options)
detector.process(inputImage)
.addOnSuccessListener { objects ->
objects.forEach { obj ->
val box = obj.boundingBox
val trackingId = obj.trackingId
val category = obj.classificationCategory()
drawBoundingBox(box, trackingId, category)
}
}
Object Tracking: po detekci objektu na prvním snímku jej ML Kit sleduje přes video stream bez opakované detekce (na základě optical flow + feature tracking). To snižuje zatížení CPU/GPU: první detekce 30–60 ms, následující snímky sledování 2–5 ms. Pokud objekt opustí snímek nebo se otočí o > 30°, tracker se resetuje a je vyžadována opakovaná detekce. TrackingId zůstává, dokud je objekt ve snímku. Pro počítání jedinečných objektů použijte trackingId jako identifikátor.
YOLOv8-Nano — nejmenší verze YOLOv8 (Ultralytics) pro okrajová zařízení. 2.6M parametrů, 5.9 MB (FP16), 42% mAP@0.5:0.95 na COCO. YOLOv8 používá anchor-free detekci + C2f backbone + TaskAlignedAssigner pro párování predikcí. Pro mobilní vývoj je k dispozici export do TFLite (INT8 — 2.0 MB, latence 8–20 ms) a Core ML (4.5 MB, latence 5–15 ms na iPhone 15 Pro). YOLOv8-Nano — nejlepší volba pro on-device real-time Object Detection.
Export YOLOv8 do TFLite: Ultralytics poskytuje CLI: yolo export model=yolov8n.pt format=tflite int8. Výsledkem je model TFLite INT8 optimalizovaný pro GPU Delegate přes NNAPI. Pro vlastní datovou sadu (vlastní třídy, ne COCO) — trénink přes Ultralytics HUB na 50–500 obrázcích na třídu. RT-DETR (Real-Time Detection Transformer) — alternativa na architektuře Transformer, 48% mAP při 60 FPS na NVIDIA Jetson, ale pro mobilní zařízení zatím zaostává za YOLOv8-Nano v rychlosti.
# Export YOLOv8 do TFLite
from ultralytics import YOLO
model = YOLO("yolov8n.pt")
model.export(format="tflite", int8=True, imgsz=320)
# Inference s TFLite na Androidu
val interpreter = Interpreter(loadFile("yolov8n_int8.tflite"))
val output = Array(1) { Array(8400) { FloatArray(6) } }
interpreter.run(inputBuffer, output)
YOLO vs ML Kit na mobilních zařízeních: ML Kit Object Detection je jednodušší na integraci (10 řádků kódu), nevyžaduje ML expertizu, ale je omezen na standardní třídy (fashion, food, home, places). YOLOv8-Nano vyžaduje vlastní export, ale poskytuje plnou kontrolu: libovolné třídy, velikost vstupu, architekturu. Pro rychlé prototypování — ML Kit. Pro produkci s nestandardními objekty — YOLOv8-Nano. Pro iOS: YOLOv8-Core ML přes export modelu z Ultralytics + VNCoreMLRequest.
SSD (Single Shot Multibox Detector) — klasická one-stage architektura pro mobilní zařízení. SSD MobileNetV2 — de facto standard v letech 2020–2023: 22% mAP@0.5:0.95 na COCO, 15–40 ms na Pixel 6. SSD používá feature pyramid (různé vrstvy MobileNet pro detekci objektů různých velikostí) a default boxes (anchor boxes) pro každou buňku feature mapy. Plus: maximální rychlost na svou dobu. Mínus: nízká přesnost na malých objektech (10–30 px).
EfficientDet-Lite — rodina od Google (2020+), optimalizovaná pro TFLite. EfficientDet-Lite0: 3.9M parametrů, 35% mAP, 20–50 ms. EfficientDet-Lite2: 8.1M, 42% mAP, 40–80 ms. EfficientDet používá BiFPN (Bidirectional Feature Pyramid Network) pro multi-scale feature fusion — to poskytuje nárůst 2–4% mAP bez zvýšení latence. Pro mobilní vývoj Google doporučuje EfficientDet-Lite jako hlavní detektor pro TFLite Task Vision.
MediaPipe Object Detector — hotová implementace založená na EfficientDet-Lite v rámci MediaPipe Tasks Vision. Poskytuje jednotné API pro Android, iOS, Python, Web. MediaPipe Object Detector podporuje třídy COCO (80 tříd), vlastní modely, režim streamování a CPU/GPU delegáty. Pro rychlou integraci Object Detection do cross-platform projektu je MediaPipe optimální volbou: jeden kód pro všechny platformy.
// MediaPipe Object Detection
val options = ObjectDetectorOptions.Builder()
.setBaseOptions(BaseOptions.builder()
.setDelegate(BaseOptions.Delegate.GPU)
.build())
.setMaxResults(5)
.setScoreThreshold(0.5f)
.build()
val detector = ObjectDetector.createFromOptions(context, options)
val image = MPImage.fromBitmap(bitmap)
val result = detector.detect(image)
result.detections.forEach { detection ->
val box = detection.boundingBox
val category = detection.categories.first()
}
Výběr architektury pro mobilní aplikaci: pro > 30 FPS na středních zařízeních — YOLOv8-Nano (INT8) nebo SSD MobileNetV2. Pro přesnost > 40% mAP — YOLOv8-Small (11.2M) nebo EfficientDet-Lite2 (8.1M). Pro cross-platform — MediaPipe Object Detector. Pro jednoduchost — ML Kit. Pro iOS-first — Core ML + YOLOv8 .mlpackage. Pro Android-first — TFLite Task Vision (ObjectDetector API). Trénink: Roboflow (datová sada) + Ultralytics YOLOv8 (trénování) + export do TFLite/Core ML.
TFLite Task Vision ObjectDetector — jednotné API od Google pro spouštění modelů Object Detection na Android a iOS. Task API automaticky zpracovává předzpracování obrazu (škálování, normalizace, konverze barevného prostoru) a následné zpracování (NMS, thresholding). Vývojář musí předat model .tflite a obdržet seznam Detections s bounding box + category + score. Task API podporuje modely kompatibilní s COCO (80 tříd).
Konverze vlastního modelu do Task API: Model TFLite musí mít vstup [1, height, width, 3] (float32/uint8) a výstup: detection_boxes[1,N,4], detection_classes[1,N], detection_scores[1,N], num_detections[1]. Export z TensorFlow Object Detection API s vloženými operacemi post-processingu (SSD Postprocess). Pro YOLOv8 — export TFLite s NMS přes ops-compat. Task API na iOS používá Core ML Delegate pro zrychlení na ANE.
// TFLite Task Vision Object Detector
val options = ObjectDetectorOptions.Builder()
.setScoreThreshold(0.5f)
.setMaxResults(10)
.setDelegate(Delegate.GPU)
.build()
val detector = ObjectDetector.createFromFileAndOptions(
context, "custom_model.tflite", options
)
val image = TensorImage.fromBitmap(bitmap)
val results = detector.detect(image)
results.forEach { detection ->
onObjectDetected(
detection.boundingBox,
detection.categories.first().label,
detection.categories.first().score
)
}
Výkon Task API: GPU Delegate na Androidu poskytuje zrychlení 3–5x oproti CPU (XNNPACK). NNAPI Delegate — dalších 1.5–2x na zařízeních s NPU (Pixel 8, Snapdragon 8 Gen 3, Dimensity 9300). Hexagon, DSP — až 10x na DSP akcelerátorech. Pro iOS Core ML Delegate — 4–6x oproti CPU. Task API automaticky vybírá dostupný hardwarový akcelerátor, ale delegáta lze vynutit pomocí DetectorOptions.
Počítání osob a objektů — retailová analytika: detekce návštěvníků v obchodě, počítání front, určování zaplněnosti regálů zbožím. Počítadlo Object Detection ve snímku umožňuje vyhodnotit průchodnost a konverzi. ML Kit Object Detector poskytuje až 30 FPS — dostatečné pro počítání v reálném čase. Pro překračování čar (zone crossing) — kombinace Object Detection + ByteTrack sledování. Přesnost počítání: 92–95% při dobrém osvětlení.
Detekce vad ve výrobě — Object Detection určuje vady na lince: škrábance, odštěpky, praskliny, nesprávnou montáž. Vlastní model YOLOv8-Nano (INT8) běží na Android tabletu připojeném k USB kameře. Latence: 20–40 ms na snímek (25–50 FPS). Pro složité vady (mikropraskliny) — zvyšte rozlišení vstupu na 640x640 (latence 40–80 ms). Trénink: Roboflow — datová sada 200–1000 obrázků vad + Ultralytics YOLOv8.
AR označování objektů v reálném čase — ARCore (Android) a ARKit (iOS) používají Object Detection pro rozpoznávání rovných povrchů, vertikálních rovin a 3D objektů. ML Kit Object Detection + ARCore Scene Semantics poskytuje segmentaci objektů: zeď, podlaha, strop, nábytek. Pro vlastní AR označování (např. rozpoznání konkrétního modelu pohovky a umístění AR informací) — YOLOv8-Nano + SceneKit/SceneForm. Požadavek real-time: > 20 FPS.
// ARKit + Object Detection
let request = VNCoreMLRequest(model: objectDetector) { req, _ in
guard let results = req.results as? [VNDetectedObjectObservation] else { return }
for result in results where result.confidence > 0.6 {
let rect = result.boundingBox
let worldPos = arView.hitTest(rect.center)
arView.addAnchor(ARAnchor(name: label, transform: worldPos))
}
}
Lékařské zobrazování — Object Detection pro analýzu rentgenových snímků, MRI, CT. Detekce nádorů, zlomenin, patologií na mobilním zařízení lékaře. YOLOv8-Nano na Android tabletu detekuje plicní uzliny za 15–30 ms s citlivostí 89% a specificitou 93% (data NIH ChestX-ray14). Požadavky: INT8 kvantizace (soukromí dat), high recall (přehlédnutí patologie je nebezpečnější než falešný poplach), použití prahu spolehlivosti < 0.4. Zpracování na zařízení zaručuje soukromí lékařských dat.
Často kladené otázky
Object Detection vrací bounding box pro každý objekt — obdélníkový rámeček obklopující objekt. Image Segmentation (sémantická nebo instance) vrací přesný obrys objektu — pixelovou masku. Segmentace je přesnější, ale pomalejší (50–300 ms vs 10–30 ms pro detekci). Pro úkoly, kde je tvar objektu důležitý (medicína, AR), použijte segmentaci. Pro úkoly, kde je důležitá poloha a přítomnost (počítání, moderace), použijte detekci. MobileViT — architektura řešící oba úkoly.
YOLOv8-Nano je trénován na COCO (80 tříd). ML Kit Object Detection — 40+ tříd (fashion, food, home, places). Vlastní model dokáže detekovat až 100 tříd na mobilním zařízení bez ztráty výkonu. Nad 100 tříd — roste latence a klesá mAP. Pro aplikace s 1000+ třídami použijte hierarchickou klasifikaci: nejprve hrubá kategorie (10 tříd), poté přesná (100 podtříd). EfficientNet + YOLO — hierarchický přístup pro 1000+ tříd s latencí < 50 ms.
Ano, ML Kit Object Detection obsahuje vestavěné sledování: po detekci na prvním snímku je objekt sledován přes video stream bez opakované detekce. Pro složitější sledování (křížení objektů, opuštění snímku) použijte ByteTrack nebo BoT-SORT. ByteTrack pracuje na základě IoU (intersection over union) mezi bounding boxy sousedních snímků — 85% MOTA na MOT17. BoT-SORT navíc používá re-identification (ReID) pro obnovení ztracených objektů — 90% MOTA.
Exportujte YOLOv8 do Core ML: yolo export model=yolov8n.pt format=coreml int8. Výsledný .mlpackage se integruje přes VNCoreMLRequest (Vision Framework). Alternativa: YOLOv8 → TFLite → Core ML Delegate (iOS TFLite API). Ultralytics YOLOv8 Core ML export podporuje iOS 16+, zrychlení ANE, kvantizaci FP16 a INT8. Pro streamování použijte AVFoundation + Vision s opakovanými požadavky VNImageRequestHandler. Real-time: 20–30 FPS na iPhone 14 Pro.
Zvyšte rozmanitost datové sady (úhly, osvětlení, pozadí) — 500+ obrázků na třídu. Použijte augmentaci dat: mosaic, mixup, random perspective (augmentace Ultralytics YOLOv8 — 2–5% nárůst mAP). Zvyšte velikost vstupu na 640x640 (místo 320x320) — +4–8% mAP, ale latence ×2. Použijte kvantizaci FP16 nebo INT8 po tréninku (post-training) — +0–1% ztráta mAP, 4x komprese. Pro iOS použijte ANE (Neural Engine) přes Core ML Delegate — zrychlení 3–5x oproti CPU.
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é