Potongan kode ini menggunakan OpenCV untuk mendeteksi posisi penanda di setiap frame yang ditangkap oleh perangkat video. Berdasarkan dimensi fisik penanda, hal ini juga menimbulkan estimasi. Untuk setiap penanda yang ditentukan, data tersedia melalui UDP, dalam bentuk teks biasa. Ini mengembalikan terjemahan rotasi objek terhadap kamera, dan koordinat XY dari pusat massa 2D objek yang muncul pada gambar kamera. Jika penanda tidak terlihat, angka yang dikembalikan akan menjadi NaN.
Harap dicatat bahwa kode ini TIDAK menggunakan informasi sementara untuk pelacakan.
Sebaliknya, ia mencoba mendeteksi penanda dan memperkirakan posenya di setiap frame yang diambil.
.ini
standar. Anda memerlukan lingkungan Python standar dengan cv2
, dan modul numpy
tersedia. Meskipun kode ini dikembangkan menggunakan Python 2.7 dan OpenCV 3.4.1 di Mac, kode tersebut juga dapat berfungsi dengan Python 3 dan platform lainnya. Berikut beberapa langkah untuk membuat penanda: 1. Ambil foto objek Anda, lalu potong. Idealnya resolusinya harus kompatibel dengan kamera Anda. 2., Edit file konfigurasi, dan pastikan baris berikut telah disetel:
[General]
Anda dapat membiarkan semuanya tetap sama di bagian umum, tetapi Anda perlu mengkalibrasi kamera Anda! Baca cara kalibrasi di sini. Saat menambahkan penanda baru, Anda perlu menyempurnakan pengaturannya, jadi pastikan gambar kamera terlihat.
camera_show_picture = 1
Jika tidak, penanda baru akan ditambahkan sebagai bagian baru di file konfigurasi.
Header adalah nama penanda yang mudah digunakan
[My custom marker]
Tentukan nama file dan dimensi fisik penanda:
marker_file_name = <File name in the same directory or full path>
marker_width = <Units are in mm.>
marker_height = <Units are in mm.>
Saat menyiapkan penanda baru, Anda perlu mengubah pengaturan berikut:
marker_minimum_matching_distance = <Decrease it from 50>
marker_minimum_number_of_matches = <Set this to at least 4>
pose_estimation_running_average = <more than 1>
marker_minimum_matching_distance
berbanding terbalik dengan kualitas kecocokan fitur antara gambar penanda dan kamera. Jika disetel terlalu tinggi, fitur di luar penanda akan dicocokkan, dan jika disetel terlalu rendah, tidak ada kecocokan sama sekali.
marker_minimum_number_of_matches
diperlukan untuk estimasi pose. Setidaknya diperlukan 4 titik yang cocok untuk menghitung koordinat translation
dan sudut rotation
. Namun, semakin banyak kecocokan yang diperlukan untuk transformasi tersebut, estimasinya akan semakin tepat. Jika disetel terlalu tinggi, estimasi pose hanya akan berfungsi pada beberapa frame.
Terakhir, pose_estimation_running_average
menetapkan berapa banyak data posisi frame yang harus dirata-ratakan. Tingkatkan jumlah ini jika posisi yang dikembalikan terlalu 'dendeng'. Namun, semakin banyak frame yang dirata-ratakan, semakin besar lag yang terjadi.
Selain itu, setiap saluran colour
dapat berupa bilangan asli antara 0
dan 255
. Item marker_feature_colour_*
adalah untuk menunjukkan lokasi kecocokan kualitas baik antara gambar marker dan gambar kamera. Pengaturan marker_indicator_colour_*
menentukan warna suatu indikator, yang menunjukkan koordinat yang dihitung berdasarkan nilai rata-rata kecocokan yang ditampilkan. Idealnya, indikator ini harus selalu berada di dalam marker, dan dikembalikan dalam paket UDP sebagai centroid
.
marker_feature_colour_R = <0...255>
marker_feature_colour_G = <0...255>
marker_feature_colour_B = <0...255>
marker_indicator_colour_R = <0...255>
marker_indicator_colour_G = <0...255>
marker_indicator_colour_B = <0...255>
python tracker_main.py
Semoga beruntung!