Object Detection — egy számítógépes látás feladat, amely egyszerre határozza meg az objektum osztályát (macska, autó, ember) és annak helyzetét a képen egy téglalap alakú keret (bounding box) formájában. Az Image Labeling-től eltérően az Object Detection több különböző osztályú objektumot talál egyetlen képkockán, és jelzi azok koordinátáit. A mobilos fejlesztésben az Object Detection alkalmazásra kerül videó megfigyelő rendszerekben, AR alkalmazásokban, autonóm drónokban, orvosi képalkotásban és kiskereskedelmi analitikában. A Google ML Kit, 2025 adatai szerint az on-device Object Detection eléri a 30 FPS-t a zászlóshajó eszközökön 87% mAP pontossággal.
Főbb pontok
Object Detection két feladatot old meg egyszerre: mi van a képen (osztályozás) és hol (koordináta regresszió). A modell rácsra osztja a képet, minden cellához bounding box-ot (x, y, width, height) és osztályvalószínűségeket jelez előre. A Non-Maximum Suppression (NMS) eltávolítja a duplikált kereteket egy objektumhoz, megtartva a legbiztosabb előrejelzést. A modern architektúrák two-stage (Faster R-CNN — először region proposals, aztán osztályozás) és one-stage (YOLO, SSD — mindent egyszerre) kategóriákra oszlanak.
Értékelési metrikák: mAP (mean Average Precision) — az Object Detection minőségének fő metrikája. mAP@0.5 — pontosság IoU küszöbérték 0.5-nél, mAP@0.5:0.95 — átlag a 0.5-től 0.95-ig terjedő küszöbértékeken. FPS — képkockák száma másodpercenként (inferencia sebesség). Mobil alkalmazásoknál az mAP/FPS egyensúly kritikus: a YOLOv8-Nano 42% mAP@0.5:0.95-öt ad 50+ FPS-nél, az SSD MobileNet — 22% mAP-t 60+ FPS-nél. Valós idejű használathoz > 20 FPS, interaktív használathoz 5–15 FPS.
IoU (Intersection over Union) — az előrejelzett és a ground truth bounding box közötti átfedés metrikája. IoU = metszet területe / unió területe. Az IoU küszöbérték NMS-hez általában 0.5–0.7. Objektumok követéséhez képkockák között (re-identification) használja a Deep SORT vagy ByteTrack algoritmust IoU-illesztéssel. Objektumok számlálásához videón — a BoT-SORT 85% MOTA-t (Multiple Object Tracking Accuracy) biztosít.
| Architektúra | mAP@0.5:0.95 | Késleltetés | Paraméterek | Méret |
|---|---|---|---|---|
| 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 — előre meghatározott bounding box formák, amelyeket a modell korrigál. A YOLOv8 horgony nélküli detekciót (anchor-free) használ, ami egyszerűsíti a tanulást és felgyorsítja az inferenciát. Az SSD és a régi YOLO horgonyok kiválasztását igényli az adathalmazhoz. Mobilos fejlesztéshez az anchor-free architektúrák (YOLOv8, FCOS) előnyösebbek — nem függnek az objektum méretétől és egyszerűbbek testreszabni.
ML Kit Object Detection and Tracking — a Google könyvtára objektumok észlelésére és követésére a készüléken. Két módosítást támogat: single-image detector (fényképekhez) és streaming detector (videóhoz). A streaming mód automatikusan követi az objektumokat a képkockák között optikai áramlás segítségével, csökkentve a képkockák közötti késleltetést 5–10 ms-ra a kezdeti észlelés után. Kategóriák: fashion, food, home, places — egyenként 10–20 osztály.
ML Kit API: ObjectDetector (opciók: detectorMode, enableClassification, enableMultipleObjects) → InputImage → DetectedObject (trackingId, boundingBox, classificationCategory, classificationConfidence). A TrackingId lehetővé teszi ugyanazon objektum követését a képkockák között. MultipleObjects = true — akár 5 objektum észlelése képkockánként. Classification — bekapcsolja az objektum kategória felismerését (alapértelmezett false a sebesség érdekében). A streaming mód ajánlott valós idejű használatra: 20–30 FPS Pixel 6-on.
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: az objektum első képkockán történő észlelése után az ML Kit követi azt a videófolyamon keresztül ismételt észlelés nélkül (optical flow + feature tracking alapján). Ez csökkenti a CPU/GPU terhelést: első észlelés 30–60 ms, következő követési képkockák 2–5 ms. Ha az objektum elhagyja a képkockát vagy > 30°-kal elfordul, a tracker alaphelyzetbe áll, és ismételt észlelés szükséges. A TrackingId megmarad, amíg az objektum a képkockán belül van. Egyedi objektumok számlálásához használja a trackingId-t azonosítóként.
YOLOv8-Nano — a YOLOv8 (Ultralytics) legkisebb verziója edge eszközökhöz. 2.6M paraméter, 5.9 MB (FP16), 42% mAP@0.5:0.95 a COCO-n. A YOLOv8 anchor-free detekciót + C2f backend + TaskAlignedAssigner-t használ az előrejelzések illesztéséhez. Mobilos fejlesztéshez elérhető az export TFLite (INT8 — 2.0 MB, késleltetés 8–20 ms) és Core ML (4.5 MB, késleltetés 5–15 ms iPhone 15 Pro-n) formátumba. A YOLOv8-Nano a legjobb választás on-device valós idejű Object Detection-hez.
YOLOv8 exportálása TFLite-ba: Az Ultralytics CLI-t biztosít: yolo export model=yolov8n.pt format=tflite int8. Az eredmény — TFLite INT8 modell, optimalizálva GPU Delegate számára NNAPI-n keresztül. Egyedi adathalmazhoz (saját osztályok, nem COCO) — képzés Ultralytics HUB-on keresztül 50–500 képen osztályonként. RT-DETR (Real-Time Detection Transformer) — alternatíva Transformer architektúrán, 48% mAP 60 FPS-nél NVIDIA Jetson-on, de mobileszközökön sebességben még mindig elmarad a YOLOv8-Nano-tól.
# YOLOv8 exportálása TFLite-ba
from ultralytics import YOLO
model = YOLO("yolov8n.pt")
model.export(format="tflite", int8=True, imgsz=320)
# Inferencia TFLite-tal Androidon
val interpreter = Interpreter(loadFile("yolov8n_int8.tflite"))
val output = Array(1) { Array(8400) { FloatArray(6) } }
interpreter.run(inputBuffer, output)
YOLO vs ML Kit mobileszközökön: Az ML Kit Object Detection egyszerűbb integrálni (10 sor kód), nem igényel ML szakértelmet, de a standard osztályokra korlátozódik (fashion, food, home, places). A YOLOv8-Nano egyedi exportot igényel, de teljes kontrollt ad: bármilyen osztály, bemeneti méret, architektúra. Gyors prototípuskészítéshez — ML Kit. Produkcióhoz nem szabványos objektumokkal — YOLOv8-Nano. iOS-hez: YOLOv8-Core ML modell exporton keresztül az Ultralytics-ből + VNCoreMLRequest.
SSD (Single Shot Multibox Detector) — klasszikus one-stage architektúra mobileszközökhöz. SSD MobileNetV2 — de facto szabvány 2020–2023-ban: 22% mAP@0.5:0.95 a COCO-n, 15–40 ms Pixel 6-on. Az SSD feature pyramid-ot (a MobileNet különböző rétegei különböző méretű objektumok észleléséhez) és default boxes-t (anchor boxes) használ a feature map minden cellájához. Előny: maximális sebesség a maga korában. Hátrány: alacsony pontosság kis objektumokon (10–30 px).
EfficientDet-Lite — család a Google-től (2020+), TFLite-ra optimalizálva. EfficientDet-Lite0: 3.9M paraméter, 35% mAP, 20–50 ms. EfficientDet-Lite2: 8.1M, 42% mAP, 40–80 ms. Az EfficientDet BiFPN-t (Bidirectional Feature Pyramid Network) használ a multi-scale feature fusion-hoz — ez 2–4% mAP növekedést ad a késleltetés növelése nélkül. Mobilos fejlesztéshez a Google az EfficientDet-Lite-ot ajánlja fő detektorként a TFLite Task Vision-hoz.
MediaPipe Object Detector — kész implementáció az EfficientDet-Lite alapján a MediaPipe Tasks Vision keretrendszerben. Egységes API-t biztosít Android, iOS, Python, Web számára. A MediaPipe Object Detector támogatja a COCO osztályokat (80 osztály), egyedi modelleket, streaming módot és CPU/GPU delegátumokat. Gyors Object Detection integrációhoz egy cross-platform projektben a MediaPipe az optimális választás: egy kód minden platformra.
// 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()
}
Architektúra választása mobil alkalmazáshoz: > 30 FPS-hez középkategóriás eszközökön — YOLOv8-Nano (INT8) vagy SSD MobileNetV2. > 40% mAP pontossághoz — YOLOv8-Small (11.2M) vagy EfficientDet-Lite2 (8.1M). Cross-platformhoz — MediaPipe Object Detector. Egyszerűséghez — ML Kit. iOS-first-hez — Core ML + YOLOv8 .mlpackage. Android-first-hez — TFLite Task Vision (ObjectDetector API). Képzés: Roboflow (adathalmaz) + Ultralytics YOLOv8 (tréning) + export TFLite/Core ML formátumba.
TFLite Task Vision ObjectDetector — egységes API a Google-tól Object Detection modellek futtatásához Androidon és iOS-en. A Task API automatikusan kezeli a kép előfeldolgozását (skálázás, normalizálás, színtér konverzió) és utófeldolgozását (NMS, thresholding). A fejlesztőnek át kell adnia a .tflite modellt, és meg kell kapnia a Detections listát bounding box + category + score adatokkal. A Task API COCO-kompatibilis modelleket támogat (80 osztály).
Egyedi modell konvertálása Task API-ba: A TFLite modellnek bemenete [1, height, width, 3] (float32/uint8) és kimenete: detection_boxes[1,N,4], detection_classes[1,N], detection_scores[1,N], num_detections[1] kell legyen. Export a TensorFlow Object Detection API-ból beépített post-processing ops-szal (SSD Postprocess). YOLOv8-hoz — TFLite export NMS-sel ops-compat-on keresztül. A Task API iOS-en Core ML Delegate-et használ az ANE gyorsításához.
// 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
)
}
Task API teljesítménye: A GPU Delegate Androidon 3–5x gyorsulást ad a CPU-hoz (XNNPACK) képest. NNAPI Delegate — további 1.5–2x NPU-val rendelkező eszközökön (Pixel 8, Snapdragon 8 Gen 3, Dimensity 9300). Hexagon, DSP — akár 10x DSP gyorsítókon. iOS-re Core ML Delegate — 4–6x a CPU-hoz képest. A Task API automatikusan kiválasztja a rendelkezésre álló hardvergyorsítót, de a delegátum kényszeríthető a DetectorOptions segítségével.
Emberek és objektumok számlálása — kiskereskedelmi analitika: látogatók észlelése az üzletben, sorok számlálása, polcok áruval való telítettségének meghatározása. Az Object Detection számláló a képkockán lehetővé teszi a forgalom és konverzió értékelését. Az ML Kit Object Detector akár 30 FPS-t ad — elegendő a valós idejű számláláshoz. Vonalak átlépéséhez (zone crossing) — Object Detection + ByteTrack követés kombinációja. Számlálási pontosság: 92–95% jó megvilágítás mellett.
Gyártási hibák észlelése — Az Object Detection meghatározza a hibákat a gyártósoron: karcolások, forgácsok, repedések, helytelen összeszerelés. Az egyedi YOLOv8-Nano (INT8) modell USB kamerához csatlakoztatott Android táblagépen fut. Késleltetés: 20–40 ms képkockánként (25–50 FPS). Összetett hibákhoz (mikrorepedések) — növelje a bemeneti felbontást 640x640-re (késleltetés 40–80 ms). Képzés: Roboflow — 200–1000 hibaképből álló adathalmaz + Ultralytics YOLOv8.
AR objektumjelölés valós időben — Az ARCore (Android) és ARKit (iOS) Object Detection-t használ sík felületek, függőleges síkok és 3D objektumok felismerésére. Az ML Kit Object Detection + ARCore Scene Semantics objektumszegmentációt ad: fal, padló, mennyezet, bútor. Egyedi AR jelöléshez (pl. egy adott kanapémodel felismerése és AR információ elhelyezése) — YOLOv8-Nano + SceneKit/SceneForm. Valós idejű követelmény: > 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))
}
}
Orvosi képalkotás — Object Detection röntgenfelvételek, MRI, CT elemzéséhez. Daganatok, törések, patológiák észlelése az orvos mobileszközén. A YOLOv8-Nano Android táblagépen tüdőcsomókat észlel 15–30 ms alatt 89% érzékenységgel és 93% specificitással (NIH ChestX-ray14 adatok). Követelmények: INT8 kvantálás (adatok magánélete), high recall (a patológia kihagyása veszélyesebb, mint a téves riasztás), confidence küszöb < 0.4 használata. A készüléken történő feldolgozás garantálja az orvosi adatok magánéletét.
Gyakran ismételt kérdések
Object Detection minden objektumhoz bounding box-ot ad vissza — egy téglalap alakú keretet, amely körülveszi az objektumot. Image Segmentation (szemantikus vagy instance) az objektum pontos kontúrját adja vissza — egy pixelmaszkot. A szegmentáció pontosabb, de lassabb (50–300 ms vs 10–30 ms az észleléshez). Azokhoz a feladatokhoz, ahol az objektum alakja fontos (orvosi, AR), használjon szegmentációt. Azokhoz a feladatokhoz, ahol a pozíció és jelenlét fontos (számlálás, moderálás), használjon észlelést. MobileViT — architektúra, amely mindkét feladatot megoldja.
A YOLOv8-Nano a COCO-n van képezve (80 osztály). ML Kit Object Detection — 40+ osztály (fashion, food, home, places). Egy egyedi modell akár 100 osztályt is képes észlelni egy mobileszközön teljesítményvesztés nélkül. 100 osztály felett — a késleltetés nő és az mAP csökken. 1000+ osztályú alkalmazásokhoz használjon hierarchikus osztályozást: először durva kategória (10 osztály), majd pontos (100 alkategória). EfficientNet + YOLO — hierarchikus megközelítés 1000+ osztályhoz < 50 ms késleltetéssel.
Igen, az ML Kit Object Detection beépített követést tartalmaz: az első képkockán történő észlelés után az objektum követésre kerül a videófolyamon keresztül ismételt észlelés nélkül. Bonyolultabb követéshez (objektumok kereszteződése, képkocka elhagyása) használja a ByteTrack vagy BoT-SORT algoritmust. A ByteTrack a szomszédos képkockák bounding box-ai közötti IoU (intersection over union) alapján működik — 85% MOTA a MOT17-en. A BoT-SORT emellett re-identification (ReID) segítségével állítja vissza az elveszett objektumokat — 90% MOTA.
Exportálja a YOLOv8-at Core ML-be: yolo export model=yolov8n.pt format=coreml int8. A kapott .mlpackage integrálódik a VNCoreMLRequest (Vision Framework) segítségével. Alternatíva: YOLOv8 → TFLite → Core ML Delegate (iOS TFLite API). Az Ultralytics YOLOv8 Core ML export támogatja az iOS 16+, ANE gyorsítást, FP16 és INT8 kvantálást. Streaminghez használja az AVFoundation + Vision alkalmazást ismétlődő VNImageRequestHandler kérésekkel. Valós idejű: 20–30 FPS iPhone 14 Pro-n.
Növelje az adathalmaz változatosságát (szögek, megvilágítás, háttér) — 500+ kép osztályonként. Használjon adatbővítést: mosaic, mixup, random perspective (Ultralytics YOLOv8 bővítés — 2–5% mAP növekedés). Növelje a bemeneti méretet 640x640-re (320x320 helyett) — +4–8% mAP, de késleltetés ×2. Használjon FP16 vagy INT8 kvantálást képzés után (post-training) — +0–1% mAP veszteség, 4x tömörítés. iOS-hez használja az ANE (Neural Engine) segítségével a Core ML Delegate-et — 3–5x gyorsulás a CPU-hoz képest.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is