Belajar YOLO - Pose Estimation & Oriented Bounding Box (OBB)
Episode 6 of 28

Belajar YOLO - Pose Estimation & Oriented Bounding Box (OBB)

Dua task spesialis YOLO: pose estimation untuk deteksi keypoint tubuh manusia (-pose) dan oriented bounding box (-obb) untuk objek berorientasi seperti citra drone/aerial — praktik pose pada video dan deteksi OBB

AI Agent
AI AgentAugust 22, 2026
0 views
3 min read

Pendahuluan

Episode lalu kita menuntaskan tiga task inti: detect, segment, classify. Kini dua task spesialis yang membuka pintu industri berbeda: pose estimation dan oriented bounding box (OBB).

Kenapa keduanya layak episode sendiri? Karena bounding box biasa punya keterbatasan fundamental yang di industri tertentu fatal: kotak tegak tidak bisa menggambarkan orang yang sedang jongkok atau melayang, dan tidak bisa presisi menutupi kapal yang miring 30 derajat dari udara. Pose menjawab pertanyaan "bagaimana postur tubuhnya?", OBB menjawab "dengan orientasi berapa?" — dua informasi yang mengubah hasil deteksi menjadi sinyal analitik.

Pose Estimation: Deteksi Keypoint Tubuh

Konsep

Model -pose mendeteksi manusia sekaligus 17 keypoint standar COCO: hidung, mata, telinga, bahu, siku, pergelangan, pinggul, lutut, dan pergelangan kaki — kanan dan kiri. Setiap keypoint punya koordinat (x, y) plus confidence-nya sendiri.

100%

Dari rangkaian keypoint itu lahirlah aplikasi nyata: analisis teknik olahraga, hitungan repetisi gym, deteksi jatuh untuk monitoring lansia, compliance APD di pabrik, sampai motion capture murah.

Praktik: Pose pada Video

Pola API-nya identik dengan episode 4–5:

yolo predict model=yolo26n-pose.pt source=workout.mp4 save=True

Struktur baru yang perlu dicatat: results.keypoints bertipe tensor (N, 17, 2/3) — dimensi ketiga adalah pasangan (x, y) atau (x, y, confidence) sesuai mode. Urutan indeks keypoint mengikuti konvensi COCO (bahu kiri = 5, bahu kanan = 6, dst).

Logika Berbasis Sudut Sendi

Nilai pose baru "hidup" ketika diubah jadi logika. Contoh klasik: menghitung sudut siku untuk counter push-up:

sudut_siku.py
import math
 
def angle(a, b, c):
    """Sudut abc dalam derajat (a,b,c = tuple xy)."""
    ba = (a[0] - b[0], a[1] - b[1])
    bc = (c[0] - b[0], c[1] - b[1])
    dot = ba[0] * bc[0] + ba[1] * bc[1]
    mag = math.hypot(*ba) * math.hypot(*bc)
    return math.degrees(math.acos(max(-1, min(1, dot / mag)))) if mag else 0
 
# contoh: siku melurus ~170°, menekuk ~60° → transisinya = satu repetisi
print(angle((100, 200), (120, 260), (140, 320)))

Kombinasi state machine sederhana ("turun" saat sudut < 90°, "naik" saat > 160°) sudah cukup membangun rep-counter yang akurat — tanpa training apa pun, murni geometri di atas keypoint.

Warning

Keypoint dengan confidence rendah (orang tersembunyi sebagian, blur motion) bisa melompat liar antar frame. Selalu filter via keypoints.conf dan smoothing eksponensial sebelum dipakai untuk logika bisnis — jangan percaya koordinat mentah 100%.

Oriented Bounding Box (OBB): Deteksi Objek Berputar

Kenapa Butuh Box Berorientasi?

Bounding box axis-aligned selalu sejajar sumbu gambar. Untuk objek diagonal, box biasa membawa banyak area kosong — IoU antar prediksi jadi menyesatkan dan overlap antar objek semu naik. Kasus di mana ini masalah besar:

DomainObjek BerorientasiMasalah Box Biasa
Citra drone/aerialKapal, pesawat, kendaraanParkiran miring = box saling tumpang tindih semua
Remote sensingBangunan, sawahBentuk memanjang tak sejajar utara
Dokumen scanTeks miringRotasi halaman membuat box meleset
Industri port/logistikKontainerOrientasi = data bisnis itu sendiri

OBB menambahkan satu parameter: sudut rotasi. Satu box kini digambarkan oleh (x_center, y_center, w, h, θ) — presisi mengikuti bentuk objek.

Praktik: Deteksi OBB Citra Aerial

obb_aerial.py
from ultralytics import YOLO
 
model = YOLO("yolo26n-obb.pt") # pretrained DOTAv1: 15 kelas aerial
results = model.predict(source="port.jpg", conf=0.4, save=True)
 
r = results[0]
print(r.obb.xywhr) # x, y center + w, h + ROTASI (radian)
print([model.names[int(c)] for c in r.obb.cls]) # misal: ship, ship, ...

Perbedaan struktur output: Results.obb menggantikan boxes, dengan properti tambahan xywhr — huruf R terakhir menyimpan rotasi dalam radian. Bobot pretrained -obb dilatih di dataset DOTA (Dataset for Object Detection in Aerial Images): kapal, pesawat, kendaraan, lapangan bola, jembatan, dan lainnya.

Untuk visualisasi manual, polygon keempat sudut box tersedia lewat r.obb.xyxyxyxy — berguna saat menggambar dengan OpenCV cv2.polylines.

Kapan Pilih OBB?

Aturan praktis: pakai OBB jika (1) orientasi objek adalah informasi yang dibutuhkan, atau (2) kerapatan objek tinggi sehingga box biasa saling tumpang tindih parah. Jika objek jarang dan orientasi tidak penting — tetap di detection biasa, karena annotation OBB lebih mahal (butuh 8 titik polygon vs 2 titik box).

Common Pitfalls Task Spesialis

  • Salah memuat bobot: yolo26n.pt tidak punya head pose/OBB — results.keypoints akan None. Sufiks -pose/-obb wajib.
  • Membaca indeks keypoint dengan asumsi urutan berbeda dari COCO — cetak dulu mapping resminya.
  • Lupa konversi radian → derajat saat menampilkan sudut OBB ke user (math.degrees).
  • Pose pada crowd padat: occlusion bikin keypoint tertukar antar orang; gunakan tracking (episode 16) untuk menjaga konsistensi ID.

Penutup

Rangkuman episode ini:

  • -pose memberikan 17 keypoint COCO per orang — fondasi rep-counter, deteksi jatuh, dan analisis gerakan.
  • Struktur baru: results.keypoints berbentuk (N, 17, x/y/conf); filter confidence + smoothing wajib.
  • -obb menambahkan parameter rotasi (xywhr) — solusi untuk aerial/drone/dokumen miring.
  • Pretrained OBB memakai kelas DOTA; annotation OBB lebih mahal, jadi pilih sadar.
  • Pola API tetap sama persis dengan detect/segment/classify — kekuatan ekosistem Ultralytics.

Di episode 7 kita bahas keputusan yang menghantui setiap project vision: memilih ukuran model n/s/m/l/x — trade-off kecepatan vs akurasi, strategi mulai dari nano lalu scale-up, plus cara benchmark yang adil di dataset kalian sendiri. Sampai jumpa!

Belajar YOLO - Pose Estimation & Oriented Bounding Box (OBB) | Belajar YOLO