Semua Tentang Belajar Teknologi Digital Dalam Kehidupan Sehari - Hari

Jumat, 27 Juni 2025

Pengenalan ARUCO - APRIL TAG sebagai deteksi marker yang cepat

 


Menepati janji saya beberapa bulan yang lalu dimana saya akan membagi hasil proyek bersama profesor atletik di unesa, maka beberapa episode tulisan saya akan membahas mengenai pemanfaatan pendeteksi marker yang bernama Aruco-AprilTag. Gambar animasi diatas terlihat mahasiswa yang berlari menggunakan topi lucu dengan code kotak disamping. Apakah itu ?

Dalam dunia computer vision, kemampuan untuk mendeteksi dan melokalisasi objek secara akurat merupakan hal yang sangat penting, terutama dalam aplikasi robotika, augmented reality, drone, dan sistem navigasi otomatis. Salah satu teknologi yang populer digunakan untuk kebutuhan ini adalah ArUco dan AprilTag — dua jenis penanda (fiducial marker) yang memungkinkan mesin mengenali posisi dan orientasi suatu objek dengan presisi tinggi dan latensi rendah.

Meskipun memiliki tujuan serupa, kedua teknologi ini memiliki perbedaan mendasar dalam pendekatan algoritma, struktur marker, serta performa deteksi. Dalam artikel ini, kita akan menjelajahi bagaimana kedua sistem bekerja, lalu fokus pada implementasi penggunaannya menggunakan Python dan OpenCV, lengkap dengan contoh kode sederhana yang bisa langsung Anda coba sendiri.

Apakah Anda seorang penggemar robotika, developer AR/VR, atau sekadar tertarik dengan teknologi visi komputer? Artikel ini akan memberikan dasar yang kuat untuk memahami dan mulai memanfaatkan ArUco dan AprilTag dalam proyek-proyek Anda berikutnya.



Perhatikan gambar diatas yang saya generate melalui website ( https://chev.me/arucogen/) untuk mencetak gambar aruco DICT 5x5. Kita ubah menjadi kotak hitam dan putih dan binarynya seperti berikut:


[0, 1, 1, 1, 0]

[1, 0, 0, 0, 1]

[1, 0, 1, 0, 1]

[1, 0, 0, 0, 1]

[0, 1, 1, 1, 0]


Langkah konversi:

1. Flattening matriks : semua baris disusun menjadi satu dimensi.

misal: [1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1]

2. Menghitung nilai hash/biner unik : ini dilakukan oleh library OpenCV secara internal menggunakan algoritma tertentu (tergantung dictionary).

3. Pencarian ID : Hash tersebut dibandingkan dengan semua marker yang ada di dictionary untuk menemukan ID uniknya.

Misalnya, jika cocok dengan marker ID 23 dalam dictionary, maka sistem akan mengembalikan nilai id = 23. 


🔄 Visualisasi Proses (secara logis):


Gambar Asli → Thresholding → Crop & Warp → Matriks Biner → Flattening → Hash/ID → Cocokkan dengan Dictionary → Dapatkan ID Marker

💡 Catatan Penting:

  • Tidak semua pola biner bisa jadi ID valid — hanya pola-pola yang sudah ditentukan dalam dictionary ArUco yang dikenali.
  • Jika pola tidak cocok, sistem akan mengabaikannya atau menandainya sebagai marker tidak dikenal.
  • AprilTag bekerja dengan prinsip serupa, tapi menggunakan pendekatan deteksi dan encoding yang sedikit berbeda (lebih toleran terhadap noise dan rotasi).

Kita langsung aja daripada mumet bertele-tele di teori dengan contoh coding sederhana menggunakan web kamera PC/laptop, dan kita gunakan bahasa python serta opencv untuk pengolahan gambarnya. Jangan lupa kode aruco yang saya gunakan adalah april tag jadi sesuaikan dengan  yang kamu pergunakan.




  1. import cv2
  2. import numpy as np
  3. import winsound
  4. import time
  5.  
  6.  
  7.  
  8. # Initialize the AprilTag detector with the 36h11 dictionary
  9. aruco_dict = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_APRILTAG_36H11)
  10. parameters = cv2.aruco.DetectorParameters()
  11.  
  12. # Create the detector
  13. detector = cv2.aruco.ArucoDetector(aruco_dict, parameters)
  14.  
  15.  
  16. # Beep function (runs in a separate thread)
  17. def beep():
  18.     winsound.Beep(1000, 200)  # Frequency: 1000 Hz, Duration: 200 ms
  19.     #winsound.PlaySound('beep.wav', winsound.SND_FILENAME)
  20.  
  21.  
  22. # Open webcam
  23.  
  24. cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
  25. cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
  26. cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
  27.  
  28. if not cap.isOpened():
  29.     print("Failed to open webcam.")
  30.     exit()
  31.  
  32. frame_count = 0
  33. try:
  34.     while True:
  35.         ret, frame = cap.read()
  36.         if not ret:
  37.             print("Failed to grab frame. Reconnecting...")
  38.             cap.release()
  39.             e
  40.  
  41.         # Only process every 15th frame to save computational effort
  42.         frame_count += 1
  43.         if frame_count % 5 != 0:
  44.             continue
  45.  
  46.         # Convert the frame to grayscale (required for detection)
  47.         gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
  48.  
  49.         # Detect AprilTags
  50.         corners, ids, _ = detector.detectMarkers(gray)
  51.        
  52.         # If any tags are detected
  53.         if ids is not None:
  54.             for corner, tag_id in zip(corners, ids.flatten()):
  55.                 # Draw the bounding box
  56.                 int_corners = corner.astype(np.intp)
  57.                 cv2.polylines(frame, [int_corners], isClosed=True, color=(0, 255, 0), thickness=2)
  58.  
  59.                 # Display the tag ID
  60.                 tag_id_str = f"ID: {tag_id}"
  61.                 cv2.putText(frame, tag_id_str, (int_corners[0][0][0], int_corners[0][0][1] - 10),
  62.                             cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)
  63.  
  64.             #beep sound
  65.             beep()
  66.             print(f"Detected IDs: {ids.flatten()}")
  67.         frame_resized = cv2.resize(frame, (800,600))
  68.         # Show the resized video feed
  69.         cv2.imshow("IP Camera apriltag Code Detection - press q to quit", frame_resized)
  70.         # Quit if 'q' is pressed
  71.         if cv2.waitKey(1) & 0xFF == ord('q'):
  72.             break
  73.  
  74. except KeyboardInterrupt:
  75.     print("Program interrupted.")
  76.  
  77. finally:
  78.     # Release the resources
  79.     cap.release()
  80.     cv2.destroyAllWindows()



Dan ini salah satu dokumentasi pemanfaatannya dalam project pendeteksi lari :







Share:

0 komentar:

Posting Komentar

Kontak Penulis



12179018.png (60×60)
+6281331339072

Mail : ahocool@gmail.com

Site View

Categories

555 (8) 7 segmen (3) adc (4) amplifier (2) analog (19) android (14) antares (11) arduino (29) artikel (11) attiny (3) attiny2313 (19) audio (5) baterai (5) blog (1) bluetooth (1) chatgpt (2) cmos (2) crypto (2) dasar (46) digital (11) dimmer (5) display (3) esp8266 (27) euro2020 (13) gcc (1) gis (3) gsm (1) iklan (1) infrared (2) Input Output (3) iot (78) jam (7) jualan (12) kereta api (1) keyboard (1) keypad (3) kios pulsa (2) kit (6) komponen (17) komputer (3) komunikasi (1) kontrol (8) lain-lain (8) lcd (2) led (14) led matrix (6) line tracer (1) lm35 (1) lora (11) lorawan (2) MATV (1) memory (1) metal detector (4) microcontroller (70) micropython (6) mikrokontroler (2) mikrokontroller (14) mikrotik (5) modbus (9) mqtt (3) ninmedia (5) ntp (1) paket belajar (19) palang pintu otomatis (1) parabola (88) pcb (2) power (1) praktek (2) project (37) proyek (1) python (11) radio (31) raspberry pi (9) remote (1) revisi (1) rfid (1) robot (1) rpm (2) rs232 (1) script break down (3) sdcard (3) SDR (3) sensor (2) sharing (3) signage (1) sinyal (1) sms (6) software (18) solar (1) solusi (1) statistik (5) tachometer (2) technology (1) teknologi (2) telegram (2) telepon (9) televisi (167) television (28) telkomiot (5) transistor (2) troubleshoot (3) tulisan (96) tutorial (108) tv digital (6) tvri (2) unesa (8) vu meter (2) vumeter (2) wav player (3) wayang (1) wifi (3) yolo (9)

Arsip Blog

Diskusi


kaskus
Forum Hobby Elektronika