Object Detection — је задатак компјутерског вида који истовремено одређује класу објекта (мачка, ауто, човек) и његов положај на слици у облику правоугаоног оквира (bounding box). За разлику од Image Labeling, Object Detection проналази више објеката различитих класа у једном кадру и указује њихове координате. У мобилном развоју Object Detection се примењује у системима видео надзора, AR апликацијама, аутономним дроновима, медицинској визуализацији и retail аналитици. Према подацима Google ML Kit, 2025, on-device Object Detection достиже 30 FPS на флагманским уређајима са тачношћу од 87% mAP.
Главне тачке
Object Detection решава два задатка истовремено: шта је на слици (класификација) и где (регресија координата). Модел дели слику на мрежу, за сваку ћелију предвиђа bounding box (x, y, width, height) и вероватноће класа. Non-Maximum Suppression (NMS) уклања дуплиране оквире за један објекат, остављајући најсигурније предвиђање. Савремене архитектуре се деле на two-stage (Faster R-CNN — прво region proposals, па класификација) и one-stage (YOLO, SSD — све одједном).
Метрике евалуације: mAP (mean Average Precision) — главна метрика квалитета Object Detection. mAP@0.5 — тачност при IoU прагу 0.5, mAP@0.5:0.95 — просек по праговима од 0.5 до 0.95. FPS — број кадрова у секунди (брзина инференце). За мобилне апликације баланс mAP/FPS је критичан: YOLOv8-Nano даје 42% mAP@0.5:0.95 при 50+ FPS, SSD MobileNet — 22% mAP при 60+ FPS. За real-time > 20 FPS, за интерактивно коришћење 5–15 FPS.
IoU (Intersection over Union) — метрика преклапања предвиђеног и ground truth bounding box-а. IoU = површина пресека / површина уније. Праг IoU за NMS је обично 0.5–0.7. За праћење објеката између кадрова (re-identification) користите Deep SORT или ByteTrack са IoU-подударањем. За бројање објеката на видеу — BoT-SORT обезбеђује 85% MOTA (Multiple Object Tracking Accuracy).
| Архитектура | mAP@0.5:0.95 | Latency | Параметри | Величина |
|---|---|---|---|---|
| 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 — унапред дефинисани облици bounding box-а које модел коригује. YOLOv8 користи детекцију без сидара (anchor-free), што поједностављује учење и убрзава инференцу. SSD и стари YOLO захтевају одабир anchor-а за скуп података. За мобилни развој архитектуре anchor-free (YOLOv8, FCOS) су пожељније — не зависе од величине објеката и једноставније су за прилагођавање.
ML Kit Object Detection and Tracking — Google библиотека за откривање и праћење објеката на уређају. Подржава две модификације: single-image detector (за фотографије) и streaming detector (за видео). Streaming режим аутоматски прати објекте између кадрова помоћу оптичког тока, смањујући latency између кадрова на 5–10 ms након почетне детекције. Категорије: fashion, food, home, places — по 10–20 класа свака.
ML Kit API: ObjectDetector (опције: detectorMode, enableClassification, enableMultipleObjects) → InputImage → DetectedObject (trackingId, boundingBox, classificationCategory, classificationConfidence). TrackingId омогућава праћење истог објекта између кадрова. MultipleObjects = true — детектује до 5 објеката по кадру. Classification — укључује препознавање категорије објекта (подразумевано false за брзину). Streaming режим се препоручује за real-time: 20–30 FPS на 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: након детекције објекта на првом кадру, ML Kit га прати кроз видео ток без поновне детекције (на основу optical flow + feature tracking). Ово смањује оптерећење CPU/GPU: прва детекција 30–60 ms, наредни кадрови праћења 2–5 ms. Ако објекат изађе из кадра или се окрене > 30°, трацкер се ресетује и захтева се поновна детекција. TrackingId остаје док је објекат у кадру. За бројање јединствених објеката користите trackingId као идентификатор.
YOLOv8-Nano — најмања верзија YOLOv8 (Ultralytics) за edge уређаје. 2.6M параметара, 5.9 MB (FP16), 42% mAP@0.5:0.95 на COCO. YOLOv8 користи anchor-free детекцију + C2f backbone + TaskAlignedAssigner за подударање предвиђања. За мобилни развој доступан је извоз у TFLite (INT8 — 2.0 MB, latency 8–20 ms) и Core ML (4.5 MB, latency 5–15 ms на iPhone 15 Pro). YOLOv8-Nano — најбољи избор за on-device real-time Object Detection.
Извоз YOLOv8 у TFLite: Ultralytics пружа CLI: yolo export model=yolov8n.pt format=tflite int8. Резултат — TFLite INT8 модел оптимизован за GPU Delegate путем NNAPI. За прилагођени скуп података (сопствене класе, не COCO) — обука кроз Ultralytics HUB на 50–500 слика по класи. RT-DETR (Real-Time Detection Transformer) — алтернатива на Transformer архитектури, 48% mAP при 60 FPS на NVIDIA Jetson, али за мобилне уређаје заостаје за YOLOv8-Nano по брзини.
# Извоз YOLOv8 у TFLite
from ultralytics import YOLO
model = YOLO("yolov8n.pt")
model.export(format="tflite", int8=True, imgsz=320)
# Инференца са TFLite на Android-у
val interpreter = Interpreter(loadFile("yolov8n_int8.tflite"))
val output = Array(1) { Array(8400) { FloatArray(6) } }
interpreter.run(inputBuffer, output)
YOLO vs ML Kit на мобилним уређајима: ML Kit Object Detection је једноставнији за интеграцију (10 линија кода), не захтева ML експертизу, али је ограничен на стандардне класе (fashion, food, home, places). YOLOv8-Nano захтева прилагођени извоз, али даје потпуну контролу: било које класе, величина улаза, архитектура. За брзо прототипирање — ML Kit. За продукцију са нестандардним објектима — YOLOv8-Nano. За iOS: YOLOv8-Core ML кроз извоз модела из Ultralytics + VNCoreMLRequest.
SSD (Single Shot Multibox Detector) — класична one-stage архитектура за мобилне уређаје. SSD MobileNetV2 — стандард де-факто у 2020–2023: 22% mAP@0.5:0.95 на COCO, 15–40 ms на Pixel 6. SSD користи feature pyramid (различити слојеви MobileNet за детекцију објеката различитих величина) и default boxes (anchor boxes) за сваку ћелију feature map-е. Плус: максимална брзина за своје време. Минус: ниска тачност на малим објектима (10–30 px).
EfficientDet-Lite — породица од Google-а (2020+), оптимизована за TFLite. EfficientDet-Lite0: 3.9M параметара, 35% mAP, 20–50 ms. EfficientDet-Lite2: 8.1M, 42% mAP, 40–80 ms. EfficientDet користи BiFPN (Bidirectional Feature Pyramid Network) за multi-scale feature fusion — ово даје прираст од 2–4% mAP без повећања latency. За мобилни развој Google препоручује EfficientDet-Lite као главни детектор за TFLite Task Vision.
MediaPipe Object Detector — готова имплементација базирана на EfficientDet-Lite у оквиру MediaPipe Tasks Vision. Пружа унификовани API за Android, iOS, Python, Web. MediaPipe Object Detector подржава COCO класе (80 класа), прилагођене моделе, streaming режим и CPU/GPU делегате. За брзу интеграцију Object Detection у међуплатформски пројекат MediaPipe — оптималан избор: један код за све платформе.
// 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()
}
Избор архитектуре за мобилну апликацију: за > 30 FPS на средњим уређајима — YOLOv8-Nano (INT8) или SSD MobileNetV2. За тачност > 40% mAP — YOLOv8-Small (11.2M) или EfficientDet-Lite2 (8.1M). За међуплатформскост — MediaPipe Object Detector. За једноставност — ML Kit. За iOS-first — Core ML + YOLOv8 .mlpackage. За Android-first — TFLite Task Vision (ObjectDetector API). Обука: Roboflow (скуп података) + Ultralytics YOLOv8 (тренинг) + извоз у TFLite/Core ML.
TFLite Task Vision ObjectDetector — унификовани API од Google-а за покретање Object Detection модела на Android и iOS. Task API аутоматски обрађује претпроцесирање слике (скалирање, нормализација, конверзија простор боја) и постпроцесирање (NMS, thresholding). Програмер треба да преда .tflite модел и добије листу Detections са bounding box + category + score. Task API подржава COCO-компатибилне моделе (80 класа).
Конверзија прилагођеног модела у Task API: TFLite модел мора имати улаз [1, height, width, 3] (float32/uint8) и излаз: detection_boxes[1,N,4], detection_classes[1,N], detection_scores[1,N], num_detections[1]. Извоз из TensorFlow Object Detection API са укљученим post-processing операцијама (SSD Postprocess). За YOLOv8 — извоз TFLite са NMS кроз ops-compat. Task API на iOS користи Core ML Delegate за убрзање на 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
)
}
Перформансе Task API: GPU Delegate на Android-у даје убрзање 3–5x у поређењу са CPU (XNNPACK). NNAPI Delegate — додатних 1.5–2x на уређајима са NPU (Pixel 8, Snapdragon 8 Gen 3, Dimensity 9300). Hexagon, DSP — до 10x на DSP акцелераторима. За iOS Core ML Delegate — 4–6x према CPU. Task API аутоматски бира доступни хардверски акцелератор, али се делегат може принудно поставити кроз DetectorOptions.
Бројање људи и објеката — retail аналитика: детекција посетилаца у продавници, бројање редова, одређивање попуњености полица робом. Object Detection бројач у кадру омогућава процену проходности и конверзије. ML Kit Object Detector даје до 30 FPS — довољно за real-time бројање. За прелазак линија (zone crossing) — комбинација Object Detection + ByteTrack праћење. Тачност бројања: 92–95% при добром осветљењу.
Детекција дефеката у производњи — Object Detection одређује грешке на траци: огреботине, крхотине, пукотине, неправилну монтажу. Прилагођени модел YOLOv8-Nano (INT8) ради на Android таблету повезаном са USB камером. Latency: 20–40 ms по кадру (25–50 FPS). За сложене дефекте (микропукотине) — повећајте резолуцију улаза на 640x640 (latency 40–80 ms). Обука: Roboflow — скуп података од 200–1000 слика дефеката + Ultralytics YOLOv8.
AR обележавање објеката у реалном времену — ARCore (Android) и ARKit (iOS) користе Object Detection за препознавање равних површина, вертикалних равни и 3D објеката. ML Kit Object Detection + ARCore Scene Semantics даје сегментацију објеката: зид, под, плафон, намештај. За прилагођено AR обележавање (нпр. препознавање одређеног модела софе и постављање AR информација) — YOLOv8-Nano + SceneKit/SceneForm. 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))
}
}
Медицинска визуализација — Object Detection за анализу рендгенских снимака, МРТ, ЦТ. Детекција тумора, прелома, патологија на мобилном уређају лекара. YOLOv8-Nano на Android таблету детектује нодуле у плућима за 15–30 ms са осетљивошћу од 89% и специфичношћу од 93% (подаци NIH ChestX-ray14). Захтеви: INT8 квантовање (приватност података), high recall (пропуштање патологије је опасније од лажног аларма), коришћење прага поузданости < 0.4. Обрада на уређају гарантује приватност медицинских података.
Често постављана питања
Object Detection враћа bounding box за сваки објекат — правоугаони оквир који обухвата објекат. Image Segmentation (семантичка или instance) враћа тачан контур објекта — пикселску маску. Сегментација је прецизнија, али спорија (50–300 ms vs 10–30 ms за детекцију). За задатке где је облик објекта важан (медицина, AR), користите сегментацију. За задатке где су положај и присуство важни (бројање, модерација), користите детекцију. MobileViT — архитектура која решава оба задатка.
YOLOv8-Nano је обучен на COCO (80 класа). ML Kit Object Detection — 40+ класа (fashion, food, home, places). Прилагођени модел може да детектује до 100 класа на мобилном уређају без губитка перформанси. Преко 100 класа — латенција расте и mAP опада. За апликације са 1000+ класа користите хијерархијску класификацију: прво груба категорија (10 класа), затим тачна (100 подкласа). EfficientNet + YOLO — хијерархијски приступ за 1000+ класа са латенцијом < 50 ms.
Да, ML Kit Object Detection укључује уграђено праћење: након детекције на првом кадру, објекат се прати кроз видео ток без поновне детекције. За сложеније праћење (укрштање објеката, излазак из кадра) користите ByteTrack или BoT-SORT. ByteTrack ради на основу IoU (intersection over union) између bounding box суседних кадрова — 85% MOTA на MOT17. BoT-SORT додатно користи re-identification (ReID) за обнављање изгубљених објеката — 90% MOTA.
Извезите YOLOv8 у Core ML: yolo export model=yolov8n.pt format=coreml int8. Добијени .mlpackage се интегрише кроз VNCoreMLRequest (Vision Framework). Алтернатива: YOLOv8 → TFLite → Core ML Delegate (iOS TFLite API). Ultralytics YOLOv8 Core ML извоз подржава iOS 16+, ANE убрзање, FP16 и INT8 квантовање. За streaming користите AVFoundation + Vision са понављајућим VNImageRequestHandler захтевима. Real-time: 20–30 FPS на iPhone 14 Pro.
Повећајте разноврсност скупа података (углови, осветљење, позадина) — 500+ слика по класи. Користите data augmentation: mosaic, mixup, random perspective (Ultralytics YOLOv8 аугментација — 2–5% пораста mAP). Повећајте величину улаза на 640x640 (уместо 320x320) — +4–8% mAP, али latency ×2. Користите FP16 или INT8 квантовање након обуке (post-training) — +0–1% губитка mAP, 4x компресија. За iOS користите ANE (Neural Engine) кроз Core ML Delegate — убрзање 3–5x у односу на CPU.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође