Object Detection — bir vaqtning o'zida obyekt sinfini (mushuk, mashina, odam) va uning tasvirdagi to'rtburchak ramka (bounding box) ko'rinishidagi joylashuvini aniqlaydigan kompyuter ko'rish vazifasidir. Image Labeling dan farqli o'laroq, Object Detection bir kadrda turli sinflardagi bir nechta obyektlarni topadi va ularning koordinatalarini ko'rsatadi. Mobil ishlab chiqishda Object Detection video kuzatuv tizimlarida, AR ilovalarida, avtonom dronlarda, tibbiy tasvirlash va retail analitikada qo'llaniladi. Google ML Kit, 2025 ma'lumotlariga ko'ra, on-device Object Detection flagman qurilmalarda 87% mAP aniqligi bilan 30 FPS ga etadi.
Asosiy fikrlar
Object Detection bir vaqtning o'zida ikkita vazifani hal qiladi: tasvirda nima bor (klassifikatsiya) va qayerda (koordinata regressiyasi). Model tasvirni panjaraga bo'ladi, har bir katak uchun bounding box (x, y, width, height) va sinf ehtimolliklarini bashorat qiladi. Non-Maximum Suppression (NMS) bitta obyekt uchun takrorlanuvchi ramkalarni olib tashlaydi, eng ishonchli bashoratni qoldiradi. Zamonaviy arxitekturalar two-stage (Faster R-CNN — avval region proposals, keyin klassifikatsiya) va one-stage (YOLO, SSD — hammasi birdan) ga bo'linadi.
Baholash metrikalari: mAP (mean Average Precision) — Object Detection sifatining asosiy metrikasi. mAP@0.5 — IoU chegarasi 0.5 da aniqlik, mAP@0.5:0.95 — 0.5 dan 0.95 gacha chegaralar bo'yicha o'rtacha. FPS — sekundiga kadrlar soni (inferens tezligi). Mobil ilovalar uchun mAP/FPS muvozanati muhim: YOLOv8-Nano 50+ FPS da 42% mAP@0.5:0.95 beradi, SSD MobileNet — 60+ FPS da 22% mAP. Real-time uchun > 20 FPS, interaktiv foydalanish uchun 5–15 FPS.
IoU (Intersection over Union) — bashorat qilingan va ground truth bounding box o'rtasidagi qoplash metrikasi. IoU = kesishish maydoni / birlashish maydoni. NMS uchun IoU chegarasi odatda 0.5–0.7. Kadrlar orasida obyektlarni kuzatish (re-identification) uchun Deep SORT yoki ByteTrack dan IoU moslashuvi bilan foydalaning. Videoda obyektlarni sanash uchun — BoT-SORT 85% MOTA (Multiple Object Tracking Accuracy) ni ta'minlaydi.
| Arxitektura | mAP@0.5:0.95 | Latency | Parametrlar | Hajm |
|---|---|---|---|---|
| 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 — model tuzatadigan oldindan belgilangan bounding box shakllari. YOLOv8 ankorsiz deteksiyadan (anchor-free) foydalanadi, bu o'rganishni soddalashtiradi va inferensni tezlashtiradi. SSD va eski YOLO ma'lumotlar to'plami uchun anchor tanlashni talab qiladi. Mobil ishlab chiqish uchun anchor-free arxitekturalar (YOLOv8, FCOS) afzal — ular obyekt hajmiga bog'liq emas va moslashtirishda soddaroq.
ML Kit Object Detection and Tracking — qurilmada obyektlarni aniqlash va kuzatish uchun Google kutubxonasi. Ikki modifikatsiyani qo'llab-quvvatlaydi: single-image detector (fotosuratlar uchun) va streaming detector (video uchun). Streaming rejimi optik oqim orqali kadrlar orasida obyektlarni avtomatik kuzatadi, dastlabki deteksiyadan keyin kadrlar orasidagi latency ni 5–10 ms gacha kamaytiradi. Kategoriyalar: fashion, food, home, places — har biri 10–20 sinf.
ML Kit API: ObjectDetector (variantlar: detectorMode, enableClassification, enableMultipleObjects) → InputImage → DetectedObject (trackingId, boundingBox, classificationCategory, classificationConfidence). TrackingId bir xil obyektni kadrlar orasida kuzatish imkonini beradi. MultipleObjects = true — kadrda 5 tagacha obyektni aniqlaydi. Classification — obyekt kategoriyasini tanib olishni yoqadi (tezlik uchun standart false). Streaming rejimi real-time uchun tavsiya etiladi: Pixel 6 da 20–30 FPS.
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: birinchi kadrda obyekt deteksiyasidan so'ng, ML Kit uni video oqimi orqali qayta deteksiyasiz kuzatadi (optical flow + feature tracking asosida). Bu CPU/GPU yukini kamaytiradi: birinchi deteksiya 30–60 ms, keyingi kuzatuv kadrlari 2–5 ms. Agar obyekt kadrdan chiqsa yoki > 30° burilsa, tracker qayta o'rnatiladi va qayta deteksiya talab etiladi. TrackingId obyekt kadrda bo'lgan vaqt davomida saqlanadi. Noyob obyektlarni sanash uchun trackingId dan identifikator sifatida foydalaning.
YOLOv8-Nano — edge qurilmalar uchun YOLOv8 (Ultralytics) ning eng kichik versiyasi. 2.6M parametr, 5.9 MB (FP16), COCO da 42% mAP@0.5:0.95. YOLOv8 anchor-free deteksiya + C2f backbone + TaskAlignedAssigner dan bashoratlarni moslashtirish uchun foydalanadi. Mobil ishlab chiqish uchun TFLite (INT8 — 2.0 MB, latency 8–20 ms) va Core ML (4.5 MB, iPhone 15 Pro da latency 5–15 ms) ga eksport mavjud. YOLOv8-Nano — on-device real-time Object Detection uchun eng yaxshi tanlov.
YOLOv8 ni TFLite ga eksport qilish: Ultralytics CLI ni taqdim etadi: yolo export model=yolov8n.pt format=tflite int8. Natijada — NNAPI orqali GPU Delegate uchun optimallashtirilgan TFLite INT8 modeli. Shaxsiy ma'lumotlar to'plami (o'z sinflar, COCO emas) uchun — sinf uchun 50–500 tasvirda Ultralytics HUB orqali o'qitish. RT-DETR (Real-Time Detection Transformer) — Transformer arxitekturasidagi alternativ, NVIDIA Jetson da 60 FPS da 48% mAP, ammo mobil qurilmalar uchun tezlik bo'yicha hali YOLOv8-Nano dan orqada.
# YOLOv8 ni TFLite ga eksport qilish
from ultralytics import YOLO
model = YOLO("yolov8n.pt")
model.export(format="tflite", int8=True, imgsz=320)
# Android da TFLite bilan inferens
val interpreter = Interpreter(loadFile("yolov8n_int8.tflite"))
val output = Array(1) { Array(8400) { FloatArray(6) } }
interpreter.run(inputBuffer, output)
Mobil qurilmalarda YOLO vs ML Kit: ML Kit Object Detection integratsiyada soddaroq (10 qator kod), ML tajribasini talab qilmaydi, lekin standart sinflar bilan cheklangan (fashion, food, home, places). YOLOv8-Nano shaxsiy eksportni talab qiladi, lekin to'liq nazorat beradi: istalgan sinflar, kirish hajmi, arxitektura. Tez prototiplash uchun — ML Kit. Nostandart obyektlar bilan ishlab chiqarish uchun — YOLOv8-Nano. iOS uchun: Ultralytics + VNCoreMLRequest orqali YOLOv8-Core ML model eksporti.
SSD (Single Shot Multibox Detector) — mobil qurilmalar uchun klassik one-stage arxitektura. SSD MobileNetV2 — 2020–2023 yillarda de-fakto standart: COCO da 22% mAP@0.5:0.95, Pixel 6 da 15–40 ms. SSD feature pyramid (turli o'lchamdagi obyektlarni aniqlash uchun MobileNet ning turli qatlamlari) va har bir feature map katagi uchun default boxes (anchor boxes) dan foydalanadi. Afzallik: o'z davri uchun maksimal tezlik. Kamchilik: kichik obyektlarda (10–30 px) past aniqlik.
EfficientDet-Lite — Google dan (2020+) TFLite uchun optimallashtirilgan oila. EfficientDet-Lite0: 3.9M parametr, 35% mAP, 20–50 ms. EfficientDet-Lite2: 8.1M, 42% mAP, 40–80 ms. EfficientDet multi-scale feature fusion uchun BiFPN (Bidirectional Feature Pyramid Network) dan foydalanadi — bu latency ni oshirmasdan 2–4% mAP o'sishini beradi. Mobil ishlab chiqish uchun Google TFLite Task Vision uchun asosiy detektor sifatida EfficientDet-Lite ni tavsiya qiladi.
MediaPipe Object Detector — MediaPipe Tasks Vision tarkibida EfficientDet-Lite asosidagi tayyor implementatsiya. Android, iOS, Python, Web uchun yagona API ni taqdim etadi. MediaPipe Object Detector COCO sinflarini (80 sinf), shaxsiy modellarni, streaming rejimini va CPU/GPU delegatlarini qo'llab-quvvatlaydi. O'zaro platformali loyihada Object Detection ni tez integratsiyalash uchun MediaPipe — optimal tanlov: barcha platformalar uchun bir kod.
// 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()
}
Mobil ilova uchun arxitektura tanlovi: o'rta qurilmalarda > 30 FPS uchun — YOLOv8-Nano (INT8) yoki SSD MobileNetV2. > 40% mAP aniqlik uchun — YOLOv8-Small (11.2M) yoki EfficientDet-Lite2 (8.1M). O'zaro platformalik uchun — MediaPipe Object Detector. Soddalik uchun — ML Kit. iOS-first uchun — Core ML + YOLOv8 .mlpackage. Android-first uchun — TFLite Task Vision (ObjectDetector API). O'qitish: Roboflow (ma'lumotlar to'plami) + Ultralytics YOLOv8 (trening) + TFLite/Core ML ga eksport.
TFLite Task Vision ObjectDetector — Android va iOS da Object Detection modellarini ishga tushirish uchun Google dan yagona API. Task API tasvirni oldindan qayta ishlashni (masshtablash, normallashtirish, rang fazosini konvertatsiya qilish) va keyingi ishlov berishni (NMS, thresholding) avtomatik boshqaradi. Dasturchi .tflite modelini topshirishi va bounding box + category + score bilan Detections ro'yxatini olishi kerak. Task API COCO-ga mos modellarni qo'llab-quvvatlaydi (80 sinf).
Shaxsiy modelni Task API ga konvertatsiya qilish: TFLite modeli kirish [1, height, width, 3] (float32/uint8) va chiqish: detection_boxes[1,N,4], detection_classes[1,N], detection_scores[1,N], num_detections[1] bo'lishi kerak. TensorFlow Object Detection API dan post-processing ops qo'shilgan holda eksport (SSD Postprocess). YOLOv8 uchun — ops-compat orqali NMS bilan TFLite eksporti. iOS da Task API ANE da tezlashtirish uchun Core ML Delegate dan foydalanadi.
// 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 unumdorligi: Android da GPU Delegate CPU (XNNPACK) bilan solishtirganda 3–5x tezlashtirish beradi. NNAPI Delegate — NPU li qurilmalarda (Pixel 8, Snapdragon 8 Gen 3, Dimensity 9300) qo'shimcha 1.5–2x. Hexagon, DSP — DSP akseleratorlarida 10x gacha. iOS uchun Core ML Delegate — CPU ga nisbatan 4–6x. Task API mavjud apparat akseleratorini avtomatik tanlaydi, lekin DetectorOptions orqali delegatni majburiy belgilash mumkin.
Odamlar va obyektlarni sanash — retail analitika: do'konga tashrif buyuruvchilarni aniqlash, navbatlarni sanash, javonlarning tovarlar bilan to'ldirilganligini aniqlash. Kadrda Object Detection hisoblagichi o'tish qobiliyati va konversiyani baholash imkonini beradi. ML Kit Object Detector 30 FPS gacha beradi — real-time sanash uchun yetarli. Chiziqlarni kesib o'tish (zone crossing) uchun — Object Detection + ByteTrack kuzatuvi kombinatsiyasi. Sanash aniqligi: yaxshi yoritishda 92–95%.
Ishlab chiqarishda nuqsonlarni aniqlash — Object Detection konveyerda nuqsonlarni aniqlaydi: tirnalishlar, parchalanishlar, yoriqlar, noto'g'ri yig'ilish. Shaxsiy YOLOv8-Nano (INT8) modeli USB kameraga ulangan Android planshetida ishlaydi. Latency: kadr uchun 20–40 ms (25–50 FPS). Murakkab nuqsonlar (mikroyoriqlar) uchun — kirish o'lchamini 640x640 gacha oshiring (latency 40–80 ms). O'qitish: Roboflow — 200–1000 nuqson tasviridan ma'lumotlar to'plami + Ultralytics YOLOv8.
Real vaqtda AR obyektlarini belgilash — ARCore (Android) va ARKit (iOS) tekis sirtlar, vertikal tekisliklar va 3D obyektlarni tanib olish uchun Object Detection dan foydalanadi. ML Kit Object Detection + ARCore Scene Semantics obyekt segmentatsiyasini beradi: devor, pol, shift, mebel. Shaxsiy AR belgilash uchun (masalan, ma'lum bir divan modelini tanib olish va AR ma'lumotlarini joylashtirish) — YOLOv8-Nano + SceneKit/SceneForm. Real-time talabi: > 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))
}
}
Tibbiy tasvirlash — rentgen, MRT, KT tasvirlarini tahlil qilish uchun Object Detection. Shifokorning mobil qurilmasida o'smalar, sinishlar, patologiyalarni aniqlash. Android planshetida YOLOv8-Nano o'pka tugunlarini 15–30 ms da 89% sezgirlik va 93% o'ziga xoslik bilan aniqlaydi (NIH ChestX-ray14 ma'lumotlari). Talablar: INT8 kvantlash (ma'lumotlar maxfiyligi), yuqori recall (patologiyani o'tkazib yuborish soxta signaldan xavfliroq), confidence chegarasi < 0.4 dan foydalanish. Qurilmada qayta ishlash tibbiy ma'lumotlarning maxfiyligini kafolatlaydi.
Ko'p beriladigan savollar
Object Detection har bir obyekt uchun bounding box qaytaradi — obyektni o'rab turuvchi to'rtburchak ramka. Image Segmentation (semantik yoki instance) obyektning aniq konturini qaytaradi — piksel niqobi. Segmentatsiya aniqroq, lekin sekinroq (50–300 ms vs deteksiya uchun 10–30 ms). Obyekt shakli muhim bo'lgan vazifalar uchun (tibbiyot, AR) segmentatsiyadan foydalaning. Joylashuv va mavjudlik muhim bo'lgan vazifalar uchun (sanash, moderatsiya) deteksiyadan foydalaning. MobileViT — ikkala vazifani hal qiluvchi arxitektura.
YOLOv8-Nano COCO da o'qitilgan (80 sinf). ML Kit Object Detection — 40+ sinf (fashion, food, home, places). Shaxsiy model unumdorlikni yo'qotmasdan mobil qurilmada 100 sinfgacha aniqlay oladi. 100 sinfdan yuqori — latency oshadi va mAP pasayadi. 1000+ sinfli ilovalar uchun ierarxik klassifikatsiyadan foydalaning: avval umumiy kategoriya (10 sinf), keyin aniq (100 kichik sinf). EfficientNet + YOLO — latency < 50 ms bilan 1000+ sinf uchun ierarxik yondashuv.
Ha, ML Kit Object Detection o'rnatilgan kuzatuvni o'z ichiga oladi: birinchi kadrda deteksiyadan so'ng obyekt video oqimi orqali qayta deteksiyasiz kuzatiladi. Murakkabroq kuzatuv (obyektlarning kesishishi, kadrdan chiqish) uchun ByteTrack yoki BoT-SORT dan foydalaning. ByteTrack qo'shni kadrlarning bounding box lari orasidagi IoU (intersection over union) asosida ishlaydi — MOT17 da 85% MOTA. BoT-SORT yo'qolgan obyektlarni tiklash uchun qo'shimcha re-identification (ReID) dan foydalanadi — 90% MOTA.
YOLOv8 ni Core ML ga eksport qiling: yolo export model=yolov8n.pt format=coreml int8. Olingan .mlpackage VNCoreMLRequest (Vision Framework) orqali integratsiya qilinadi. Alternativ: YOLOv8 → TFLite → Core ML Delegate (iOS TFLite API). Ultralytics YOLOv8 Core ML eksporti iOS 16+, ANE tezlashtirish, FP16 va INT8 kvantlashni qo'llab-quvvatlaydi. Streaming uchun AVFoundation + Vision dan takrorlanuvchi VNImageRequestHandler so'rovlari bilan foydalaning. Real-time: iPhone 14 Pro da 20–30 FPS.
Ma'lumotlar to'plami xilma-xilligini oshiring (burchaklar, yoritish, fon) — sinf uchun 500+ tasvir. Data augmentation dan foydalaning: mosaic, mixup, random perspective (Ultralytics YOLOv8 augmentatsiyasi — 2–5% mAP o'sishi). Kirish hajmini 640x640 gacha oshiring (320x320 o'rniga) — +4–8% mAP, lekin latency ×2. Treningdan so'ng FP16 yoki INT8 kvantlashdan foydalaning (post-training) — +0–1% mAP yo'qotilishi, 4x siqilish. iOS uchun ANE (Neural Engine) orqali Core ML Delegate dan foydalaning — CPU ga nisbatan 3–5x tezlashtirish.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.