Object Detection: co to je, algoritmy a princip fungování

Autor: IT Sectr Publikováno: 2026-07-19 Doba čtení: 9 min

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 — klasifikace + lokalizace objektů (bounding box)
  • ML Kit Object Detection — až 30 FPS, 87% mAP, kategorie: fashion, food, home, places
  • YOLOv8-Nano — 2.6M parametrů, 42% mAP COCO, 10–30 ms latence
  • SSD MobileNetV2 — 22% mAP COCO, 15–40 ms, maximální rychlost
  • On-device real-time — všechny výpočty lokálně, bez odesílání videa na server

Co je Object Detection: princip fungování

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).

ArchitekturamAP@0.5:0.95LatenceParametryVelikost
YOLOv8-Nano42%10–30 ms2.6M5.9 MB
YOLOv8-Small50%25–60 ms11.2M22 MB
SSD MobileNetV222%15–40 ms5.2M21 MB
EfficientDet-Lite035%20–50 ms3.9M15 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 a Tracking

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.

kotlin
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.

YOLO: You Only Look Once na mobilních zařízeních

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.

python
# 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 a další on-device architektury

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.

kotlin
// 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.

TensorFlow Lite Task Vision API

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.

kotlin
// 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.

Použití Object Detection v mobilních aplikacích

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.

swift
// 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

Jaký je rozdíl mezi Object Detection a Image Segmentation?

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.

Kolik tříd dokáže Object Detection detekovat na mobilním zařízení?

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.

Lze Object Detection použít pro sledování objektů mezi snímky?

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.

Jak nasadit YOLOv8 na iOS?

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.

Jak zlepšit přesnost Object Detection na mobilních zařízeních?

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í

  • Object Detection — klasifikace + lokalizace objektů s bounding boxem
  • ML Kit — až 30 FPS, 40+ tříd, vestavěné sledování objektů
  • YOLOv8-Nano — 2.6M parametrů, 42% mAP, 10–30 ms, nejlepší pro on-device
  • SSD / EfficientDet — klasické a moderní alternativy pro TFLite
  • Task Vision API — jednotné TFLite API s GPU/ANE zrychlením
  • On-device — soukromí dat, nulová latence, bez internetu
  • Použití — retailová analytika, AR, medicína, defektoskopie, počítání objektů

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í.

Prodiskutovat projekt

Přečtěte si také