Cara Membuat Visualisasi Data Sederhana dari Hasil Model Computer
Model computer vision biasanya mengeluarkan daftar angka: koordinat kotak, skor keyakinan, dan label kelas. Angka-angka itu susah dipahami tanpa digambar. Visualisasi mengubahnya jadi kotak di atas foto dan grafik distribusi, sehingga kamu bisa melihat langsung apakah model bekerja benar atau justru salah mendeteksi.
Kenapa hasil model perlu divisualisasikan
Membaca log JSON berisi ratusan deteksi itu melelahkan. Mata manusia jauh lebih cepat menangkap pola lewat gambar. Satu foto dengan bounding box sudah cukup untuk menunjukkan model salah menandai bayangan sebagai objek, atau melewatkan objek di pojok frame.
Visualisasi juga berguna saat menjelaskan hasil ke orang lain. Kamu bisa menunjukkan tangkapan layar ke rekan kerja tanpa perlu menjelaskan format output modelnya. Saat melatih model sendiri, grafik distribusi membantu melihat kelas mana yang paling sering gagal dikenali.
Menyiapkan output model dalam bentuk tabel
Sebelum menggambar apa pun, rapikan dulu hasil deteksi ke struktur tabel. Format paling praktis adalah DataFrame berisi kolom frame, label, confidence, x1, y1, x2, y2. Kalau kamu memakai model yang sudah jadi, cara kerja keluarannya dijelaskan di panduan deteksi objek YOLO.
Contoh sederhana menyusun hasil deteksi ke DataFrame:
import pandas as pd
deteksi = [
{"frame": 1, "label": "mobil", "confidence": 0.91,
"x1": 120, "y1": 80, "x2": 260, "y2": 190},
{"frame": 1, "label": "orang", "confidence": 0.77,
"x1": 300, "y1": 90, "x2": 350, "y2": 200},
]
df = pd.DataFrame(deteksi)
print(df.groupby("label")["confidence"].mean())
Dari tabel ini kamu sudah bisa menghitung jumlah deteksi per kelas, rata-rata keyakinan, atau jumlah objek per frame. Semua perhitungan itu nanti jadi bahan grafik.
Menggambar bounding box di atas gambar
Pustaka OpenCV dan Pillow sama-sama bisa dipakai. OpenCV lebih cepat untuk memproses banyak frame, Pillow lebih nyaman kalau kamu mau menambahkan teks dengan font kustom.
import cv2
img = cv2.imread("frame1.jpg")
for _, row in df.iterrows():
cv2.rectangle(img,
(int(row.x1), int(row.y1)),
(int(row.x2), int(row.y2)),
(0, 255, 0), 2)
cv2.putText(img, f"{row.label} {row.confidence:.2f}",
(int(row.x1), int(row.y1) - 8),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1)
cv2.imwrite("hasil_visual.jpg", img)
Perhatikan koordinat yang dipakai. Kebanyakan model mengembalikan koordinat dalam skala relatif 0 sampai 1, bukan piksel. Kalikan dengan lebar dan tinggi gambar asli sebelum menggambar, kalau tidak kotaknya akan menumpuk di pojok kiri atas.
Beri warna berbeda per kelas supaya mudah dibedakan. Threshold keyakinan juga perlu diterapkan, misalnya hanya gambar deteksi dengan skor di atas 0,5. Tanpa filter itu, gambar bisa penuh kotak kecil yang membingungkan.
Membuat grafik distribusi deteksi
Setelah bounding box terlihat benar, naikkan level analisisnya ke grafik. Tiga jenis grafik yang paling sering berguna:
- Jumlah deteksi per kelas: diagram batang sederhana. Kalau kelas tertentu jumlahnya jauh lebih sedikit, modelmu mungkin kekurangan data latih untuk kelas itu.
- Histogram confidence: menunjukkan sebaran keyakinan model. Banyak deteksi dengan skor 0,3 sampai 0,4 menandakan model ragu-ragu.
- Jumlah objek per frame: grafik garis sepanjang urutan frame. Lonjakan mendadak biasanya berarti false positive di frame tertentu.
Dengan pandas dan matplotlib, ketiganya bisa dibuat dalam hitungan menit:
import matplotlib.pyplot as plt
df["label"].value_counts().plot(kind="bar")
plt.title("Jumlah deteksi per kelas")
plt.ylabel("Jumlah objek")
plt.tight_layout()
plt.savefig("distribusi_kelas.png")
Kalau datanya berasal dari banyak frame, simpan grafik per frame ke satu folder lalu gabungkan jadi GIF. Animasi pendek seperti itu sangat membantu ketika kamu ingin menunjukkan perubahan deteksi dari detik ke detik.
Memilih alat visualisasi sesuai kebutuhan
Untuk eksplorasi cepat, matplotlib sudah cukup. Ketika datanya mulai besar dan kamu butuh grafik interaktif, pindah ke Plotly atau Altair. Keduanya bisa menampilkan tooltip berisi label dan skor saat kursor diarahkan ke titik data.
Kalau hasil visualisasi akan ditampilkan ke tim nonteknis, dashboard ringan lebih cocok. Streamlit atau Gradio memungkinkan kamu menaruh slider threshold dan dropdown pilihan kelas di atas gambar hasil deteksi. Pengguna bisa mengubah ambang keyakinan tanpa menyentuh kode.
Visualisasi untuk data gambar berbeda dari grafik bisnis biasa. Ukuran gambar dan posisi kotak harus proporsional. Jangan mengecilkan resolusi terlalu jauh karena label jadi tidak terbaca.
Merapikan gambar hasil untuk dipresentasikan
Visualisasi yang baik punya keterangan. Tambahkan judul berisi nama model dan tanggal pengujian, lalu tulis ambang keyakinan yang dipakai di bawah gambar. Tanpa keterangan itu, orang lain tidak tahu apakah kotak yang muncul sudah difilter atau belum.
Simpan juga versi gambar asli tanpa kotak sebagai pembanding. Saat presentasi, tampilkan keduanya berdampingan. Cara ini memudahkan audiens menilai sendiri kualitas deteksi.
Untuk keperluan dokumentasi, atur penamaan file dengan pola yang konsisten, misalnya modelA_frame012_conf050.jpg. Nama file yang jelas menghemat waktu saat kamu harus menelusuri ulang hasil di kemudian hari.
Kalau kamu memotret sendiri objek untuk diuji, pastikan kameranya stabil. Panduan memasang kamera USB untuk computer vision membahas posisi dan pencahayaan yang mengurangi noise pada hasil deteksi.
Jika kamu memakai perangkat tambahan seperti mikrokontroler untuk memicu pengambilan gambar otomatis, spesifikasi Arduino Nano bisa jadi acuan untuk merakit pemicu sederhana. Untuk memindahkan file hasil rekaman ke komputer, ada perbandingan metode transfer file dari HP ke laptop yang berguna kalau kamu merekam dengan ponsel.
Kesalahan umum saat memvisualisasikan hasil deteksi
Koordinat yang tidak diskalakan adalah masalah paling sering muncul. Kotak terlihat menempel di pojok karena model mengembalikan nilai 0 sampai 1 sementara kode menganggapnya piksel.
Kesalahan kedua, menggambar semua deteksi tanpa filter. Hasilnya gambar penuh kotak bertumpuk yang justru menyembunyikan deteksi utama. Terapkan threshold dan urutkan berdasarkan skor keyakinan.
Kesalahan ketiga, menyimpan gambar hasil sebagai JPEG berkualitas rendah berkali-kali. Setiap penyimpanan ulang menambah artefak kompresi. Simpan sekali dari data asli, atau gunakan PNG untuk gambar yang akan dianalisis lebih lanjut.
Terakhir, periksa konsistensi label. Model yang dilatih dengan label tidak seragam, misalnya "Mobil" dan "mobil" dianggap dua kelas berbeda, akan menghasilkan grafik yang menyesatkan. Data latih yang rapi sejak awal mencegah masalah ini, seperti dibahas di panduan memberi label data gambar.
Ringkasan
Visualisasi hasil computer vision terdiri dari dua lapis: gambar dengan bounding box untuk melihat deteksi secara langsung, dan grafik distribusi untuk menilai performa model secara agregat. Mulai dari DataFrame yang rapi, gambar kotak dengan OpenCV, lalu buat grafik batang dan histogram memakai matplotlib. Setelah alur itu lancar, pertimbangkan alat interaktif seperti Plotly atau dashboard Streamlit.
Pertanyaan yang Sering Diajukan
Apakah harus pakai Python untuk membuat visualisasi ini?
Tidak harus, tapi Python punya pustaka paling lengkap untuk membaca hasil model sekaligus menggambar. Bahasa lain seperti JavaScript cocok kalau visualisasinya akan ditampilkan di browser.
Bagaimana kalau koordinat dari model berbentuk desimal kecil?
Itu berarti model memakai skala relatif. Kalikan nilai x dengan lebar gambar dan nilai y dengan tinggi gambar sebelum menggambar kotak.
Berapa threshold keyakinan yang sebaiknya dipakai?
Belum ada angka tunggal yang berlaku untuk semua kasus. Mulai dari 0,5, lalu naikkan kalau masih banyak false positive, atau turunkan kalau objek penting justru terlewat.
