Object Detection: wat is het, algoritmen en werkingsprincipe

Auteur: IT Sectr Gepubliceerd: 2026-07-19 Leestijd: 9 min

Object Detection — is een computervisietaak die tegelijkertijd de klasse van een object (kat, auto, mens) en zijn positie op de afbeelding bepaalt in de vorm van een rechthoekig kader (bounding box). In tegenstelling tot Image Labeling, vindt Object Detection meerdere objecten van verschillende klassen in één frame en geeft hun coördinaten aan. In mobiele ontwikkeling wordt Object Detection toegepast in videobewakingssystemen, AR-applicaties, autonome drones, medische beeldvorming en retailanalyse. Volgens Google ML Kit, 2025 bereikt on-device Object Detection 30 FPS op flagship-apparaten met een nauwkeurigheid van 87% mAP.

Belangrijkste punten

  • Object Detection — classificatie + lokalisatie van objecten (bounding box)
  • ML Kit Object Detection — tot 30 FPS, 87% mAP, categorieën: fashion, food, home, places
  • YOLOv8-Nano — 2.6M parameters, 42% mAP COCO, 10–30 ms latency
  • SSD MobileNetV2 — 22% mAP COCO, 15–40 ms, maximale snelheid
  • On-device real-time — alle berekeningen lokaal, zonder video naar de server te sturen

Wat is Object Detection: werkingsprincipe

Object Detection lost twee taken tegelijk op: wat is er op de afbeelding (classificatie) en waar (coördinaatregressie). Het model verdeelt de afbeelding in een raster, voor elke cel voorspelt het een bounding box (x, y, width, height) en klassewaarschijnlijkheden. Non-Maximum Suppression (NMS) verwijdert dubbele kaders voor één object en laat de meest zekere voorspelling over. Moderne architecturen worden onderverdeeld in two-stage (Faster R-CNN — eerst region proposals, dan classificatie) en one-stage (YOLO, SSD — alles in één keer).

Evaluatiemetrieken: mAP (mean Average Precision) — de belangrijkste kwaliteitsmetriek van Object Detection. mAP@0.5 — nauwkeurigheid bij IoU-drempel 0.5, mAP@0.5:0.95 — gemiddelde over drempels van 0.5 tot 0.95. FPS — aantal frames per seconde (inferentiesnelheid). Voor mobiele apps is de balans mAP/FPS cruciaal: YOLOv8-Nano geeft 42% mAP@0.5:0.95 bij 50+ FPS, SSD MobileNet — 22% mAP bij 60+ FPS. Voor real-time > 20 FPS, voor interactief gebruik 5–15 FPS.

IoU (Intersection over Union) — metriek voor overlap tussen voorspelde en ground truth bounding box. IoU = oppervlakte overlapping / oppervlakte vereniging. De IoU-drempel voor NMS is meestal 0.5–0.7. Voor het volgen van objecten tussen frames (re-identification) gebruik Deep SORT of ByteTrack met IoU-matching. Voor het tellen van objecten op video — BoT-SORT zorgt voor 85% MOTA (Multiple Object Tracking Accuracy).

ArchitectuurmAP@0.5:0.95LatencyParametersGrootte
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 — vooraf gedefinieerde vormen van bounding box die het model corrigeert. YOLOv8 gebruikt ankerloze detectie (anchor-free), wat het leren vereenvoudigt en de inferentie versnelt. SSD en oude YOLO vereisen het selecteren van ankers voor de dataset. Voor mobiele ontwikkeling hebben anchor-free architecturen (YOLOv8, FCOS) de voorkeur — ze zijn niet afhankelijk van de objectgrootte en eenvoudiger aan te passen.

ML Kit Object Detection en Tracking

ML Kit Object Detection and Tracking — de Google-bibliotheek voor het detecteren en volgen van objecten op het apparaat. Ondersteunt twee modificaties: single-image detector (voor foto's) en streaming detector (voor video). Streamingmodus volgt automatisch objecten tussen frames met behulp van optische stroom, waardoor de latency tussen frames wordt verminderd tot 5–10 ms na initiële detectie. Categorieën: fashion, food, home, places — elk 10–20 klassen.

ML Kit API: ObjectDetector (opties: detectorMode, enableClassification, enableMultipleObjects) → InputImage → DetectedObject (trackingId, boundingBox, classificationCategory, classificationConfidence). TrackingId maakt het mogelijk hetzelfde object tussen frames te volgen. MultipleObjects = true — detecteert tot 5 objecten per frame. Classification — schakelt herkenning van de objectcategorie in (standaard false voor snelheid). Streamingmodus wordt aanbevolen voor real-time: 20–30 FPS op 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: na detectie van het object op het eerste frame, volgt ML Kit het door de videostroom zonder herhaalde detectie (op basis van optical flow + feature tracking). Dit vermindert de CPU/GPU-belasting: eerste detectie 30–60 ms, volgende trackingframes 2–5 ms. Als het object het frame verlaat of > 30° draait, wordt de tracker gereset en is herhaalde detectie nodig. TrackingId blijft behouden zolang het object in het frame is. Gebruik trackingId als identificatie voor het tellen van unieke objecten.

YOLO: You Only Look Once op mobiele apparaten

YOLOv8-Nano — de kleinste versie van YOLOv8 (Ultralytics) voor edge-apparaten. 2.6M parameters, 5.9 MB (FP16), 42% mAP@0.5:0.95 op COCO. YOLOv8 gebruikt ankerloze detectie + C2f backbone + TaskAlignedAssigner voor het matchen van voorspellingen. Voor mobiele ontwikkeling is export naar TFLite (INT8 — 2.0 MB, latency 8–20 ms) en Core ML (4.5 MB, latency 5–15 ms op iPhone 15 Pro) beschikbaar. YOLOv8-Nano — de beste keuze voor on-device real-time Object Detection.

YOLOv8 exporteren naar TFLite: Ultralytics biedt CLI: yolo export model=yolov8n.pt format=tflite int8. Het resultaat — een TFLite INT8-model geoptimaliseerd voor GPU Delegate via NNAPI. Voor een aangepaste dataset (eigen klassen, niet COCO) — training via Ultralytics HUB op 50–500 afbeeldingen per klasse. RT-DETR (Real-Time Detection Transformer) — een alternatief op Transformer-architectuur, 48% mAP bij 60 FPS op NVIDIA Jetson, maar voor mobiele apparaten is het qua snelheid nog steeds trager dan YOLOv8-Nano.

python
# YOLOv8 exporteren naar TFLite
from ultralytics import YOLO

model = YOLO("yolov8n.pt")
model.export(format="tflite", int8=True, imgsz=320)

# Inferentie met TFLite op Android
val interpreter = Interpreter(loadFile("yolov8n_int8.tflite"))
val output = Array(1) { Array(8400) { FloatArray(6) } }
interpreter.run(inputBuffer, output)

YOLO vs ML Kit op mobiele apparaten: ML Kit Object Detection is eenvoudiger te integreren (10 regels code), vereist geen ML-expertise, maar is beperkt tot standaardklassen (fashion, food, home, places). YOLOv8-Nano vereist aangepaste export, maar geeft volledige controle: elke klasse, invoergrootte, architectuur. Voor snel prototypen — ML Kit. Voor productie met niet-standaard objecten — YOLOv8-Nano. Voor iOS: YOLOv8-Core ML via modelexport uit Ultralytics + VNCoreMLRequest.

SSD en andere on-device architecturen

SSD (Single Shot Multibox Detector) — klassieke one-stage architectuur voor mobiele apparaten. SSD MobileNetV2 — de facto standaard in 2020–2023: 22% mAP@0.5:0.95 op COCO, 15–40 ms op Pixel 6. SSD gebruikt feature pyramid (verschillende lagen MobileNet voor detectie van objecten van verschillende grootte) en default boxes (anchor boxes) voor elke cel van de feature map. Pluspunt: maximale snelheid voor zijn tijd. Minpunt: lage nauwkeurigheid op kleine objecten (10–30 px).

EfficientDet-Lite — familie van Google (2020+), geoptimaliseerd voor TFLite. EfficientDet-Lite0: 3.9M parameters, 35% mAP, 20–50 ms. EfficientDet-Lite2: 8.1M, 42% mAP, 40–80 ms. EfficientDet gebruikt BiFPN (Bidirectional Feature Pyramid Network) voor multi-scale feature fusion — dit geeft een winst van 2–4% mAP zonder latency-verhoging. Voor mobiele ontwikkeling beveelt Google EfficientDet-Lite aan als primaire detector voor TFLite Task Vision.

MediaPipe Object Detector — kant-en-klare implementatie gebaseerd op EfficientDet-Lite binnen MediaPipe Tasks Vision. Biedt een uniforme API voor Android, iOS, Python, Web. MediaPipe Object Detector ondersteunt COCO-klassen (80 klassen), aangepaste modellen, streamingmodus en CPU/GPU-delegaten. Voor snelle integratie van Object Detection in een cross-platform project is MediaPipe de optimale keuze: één code voor alle platforms.

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()
}

Architectuurkeuze voor de mobiele app: voor > 30 FPS op mid-range apparaten — YOLOv8-Nano (INT8) of SSD MobileNetV2. Voor nauwkeurigheid > 40% mAP — YOLOv8-Small (11.2M) of EfficientDet-Lite2 (8.1M). Voor cross-platform — MediaPipe Object Detector. Voor eenvoud — ML Kit. Voor iOS-first — Core ML + YOLOv8 .mlpackage. Voor Android-first — TFLite Task Vision (ObjectDetector API). Training: Roboflow (dataset) + Ultralytics YOLOv8 (training) + export naar TFLite/Core ML.

TensorFlow Lite Task Vision API

TFLite Task Vision ObjectDetector — uniforme API van Google voor het uitvoeren van Object Detection-modellen op Android en iOS. Task API verwerkt automatisch de voorbewerking van de afbeelding (schaling, normalisatie, kleurruimteconversie) en nabewerking (NMS, thresholding). De ontwikkelaar moet het .tflite-model aanleveren en een lijst Detections ontvangen met bounding box + category + score. Task API ondersteunt COCO-compatibele modellen (80 klassen).

Conversie van aangepast model naar Task API: Het TFLite-model moet invoer [1, height, width, 3] (float32/uint8) en uitvoer: detection_boxes[1,N,4], detection_classes[1,N], detection_scores[1,N], num_detections[1] hebben. Export uit TensorFlow Object Detection API met ingeschakelde post-processing ops (SSD Postprocess). Voor YOLOv8 — TFLite-export met NMS via ops-compat. Task API op iOS gebruikt Core ML Delegate voor versnelling op 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
    )
}

Prestaties van Task API: GPU Delegate op Android geeft een versnelling van 3–5x vergeleken met CPU (XNNPACK). NNAPI Delegate — nog eens 1.5–2x op apparaten met NPU (Pixel 8, Snapdragon 8 Gen 3, Dimensity 9300). Hexagon, DSP — tot 10x op DSP-versnellers. Voor iOS Core ML Delegate — 4–6x versus CPU. Task API selecteert automatisch de beschikbare hardwareversneller, maar de delegate kan geforceerd worden via DetectorOptions.

Toepassing van Object Detection in mobiele apps

Tellen van personen en objecten — retailanalyse: detectie van bezoekers in de winkel, tellen van rijen, bepalen van de vulgraad van schappen met producten. De Object Detection-teller in het frame maakt het mogelijk de doorloop en conversie te evalueren. ML Kit Object Detector geeft tot 30 FPS — voldoende voor real-time tellen. Voor het overschrijden van lijnen (zone crossing) — combinatie van Object Detection + ByteTrack tracking. Tel nauwkeurigheid: 92–95% bij goede belichting.

Detectie van defecten in productie — Object Detection identificeert fouten op de lopende band: krassen, schilfers, scheuren, verkeerde montage. Het aangepaste YOLOv8-Nano (INT8) model draait op een Android-tablet verbonden met een USB-camera. Latency: 20–40 ms per frame (25–50 FPS). Voor complexe defecten (microscheuren) — verhoog de invoerresolutie naar 640x640 (latency 40–80 ms). Training: Roboflow — dataset van 200–1000 defectafbeeldingen + Ultralytics YOLOv8.

AR-markering van objecten in real-time — ARCore (Android) en ARKit (iOS) gebruiken Object Detection voor het herkennen van vlakke oppervlakken, verticale vlakken en 3D-objecten. ML Kit Object Detection + ARCore Scene Semantics geeft segmentatie van objecten: muur, vloer, plafond, meubilair. Voor aangepaste AR-markering (bijv. herkenning van een specifiek model bank en het plaatsen van AR-informatie) — YOLOv8-Nano + SceneKit/SceneForm. Real-time vereiste: > 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))
    }
}

Medische beeldvorming — Object Detection voor analyse van röntgenfoto's, MRI, CT. Detectie van tumoren, fracturen, pathologieën op het mobiele apparaat van de arts. YOLOv8-Nano op een Android-tablet detecteert longknobbeltjes in 15–30 ms met een sensitiviteit van 89% en specificiteit van 93% (gegevens NIH ChestX-ray14). Vereisten: INT8-kwantificatie (gegevensprivacy), high recall (het missen van pathologie is gevaarlijker dan een vals alarm), gebruik van confidence-drempel < 0.4. Verwerking op het apparaat garandeert de privacy van medische gegevens.

Veelgestelde vragen

Wat is het verschil tussen Object Detection en Image Segmentation?

Object Detection geeft een bounding box voor elk object — een rechthoekig kader dat het object omsluit. Image Segmentation (semantisch of instance) geeft de exacte contour van het object — een pixelmasker. Segmentatie is nauwkeuriger, maar langzamer (50–300 ms versus 10–30 ms voor detectie). Voor taken waar de vorm van het object belangrijk is (medisch, AR), gebruik segmentatie. Voor taken waar positie en aanwezigheid belangrijk zijn (tellen, moderatie), gebruik detectie. MobileViT — architectuur die beide taken oplost.

Hoeveel klassen kan Object Detection op een mobiel apparaat detecteren?

YOLOv8-Nano is getraind op COCO (80 klassen). ML Kit Object Detection — 40+ klassen (fashion, food, home, places). Een aangepast model kan tot 100 klassen op een mobiel apparaat detecteren zonder prestatieverlies. Boven 100 klassen — neemt de latency toe en daalt de mAP. Voor apps met 1000+ klassen gebruik hiërarchische classificatie: eerst een grove categorie (10 klassen), dan exacte (100 subklassen). EfficientNet + YOLO — hiërarchische benadering voor 1000+ klassen met latency < 50 ms.

Kan Object Detection worden gebruikt voor het volgen van objecten tussen frames?

Ja, ML Kit Object Detection bevat ingebouwde tracking: na detectie op het eerste frame wordt het object gevolgd door de videostroom zonder herhaalde detectie. Voor complexere tracking (kruisen van objecten, verlaten van frame) gebruik ByteTrack of BoT-SORT. ByteTrack werkt op basis van IoU (intersection over union) tussen bounding boxes van aangrenzende frames — 85% MOTA op MOT17. BoT-SORT gebruikt daarnaast re-identification (ReID) voor het herstellen van verloren objecten — 90% MOTA.

Hoe implementeer ik YOLOv8 op iOS?

Exporteer YOLOv8 naar Core ML: yolo export model=yolov8n.pt format=coreml int8. Het resulterende .mlpackage wordt geïntegreerd via VNCoreMLRequest (Vision Framework). Alternatief: YOLOv8 → TFLite → Core ML Delegate (iOS TFLite API). Ultralytics YOLOv8 Core ML-export ondersteunt iOS 16+, ANE-versnelling, FP16 en INT8-kwantificatie. Gebruik voor streaming AVFoundation + Vision met herhaalde VNImageRequestHandler-verzoeken. Real-time: 20–30 FPS op iPhone 14 Pro.

Hoe verbeter ik de nauwkeurigheid van Object Detection op mobiele apparaten?

Verhoog de diversiteit van de dataset (hoeken, belichting, achtergrond) — 500+ afbeeldingen per klasse. Gebruik data-augmentatie: mosaic, mixup, random perspective (Ultralytics YOLOv8-augmentatie — 2–5% mAP-stijging). Verhoog de invoergrootte naar 640x640 (in plaats van 320x320) — +4–8% mAP, maar latency ×2. Gebruik FP16 of INT8-kwantificatie na training (post-training) — +0–1% mAP-verlies, 4x compressie. Gebruik voor iOS ANE (Neural Engine) via Core ML Delegate — versnelling 3–5x versus CPU.

Samenvatting

  • Object Detection — classificatie + lokalisatie van objecten met bounding box
  • ML Kit — tot 30 FPS, 40+ klassen, ingebouwde object tracking
  • YOLOv8-Nano — 2.6M parameters, 42% mAP, 10–30 ms, beste voor on-device
  • SSD / EfficientDet — klassieke en moderne alternatieven voor TFLite
  • Task Vision API — uniforme TFLite API met GPU/ANE-versnelling
  • On-device — gegevensprivacy, zero latency, zonder internet
  • Toepassing — retailanalyse, AR, medisch, defectoscopie, objecttelling

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook