Daftar Isi:

Penghitungan Objek Raspberry Pi: 5 Langkah
Penghitungan Objek Raspberry Pi: 5 Langkah

Video: Penghitungan Objek Raspberry Pi: 5 Langkah

Video: Penghitungan Objek Raspberry Pi: 5 Langkah
Video: Object Identification & Animal Recognition With Raspberry Pi + OpenCV + Python 2024, Juli
Anonim
Penghitungan Objek Raspberry Pi
Penghitungan Objek Raspberry Pi

Visi komputer, tidak diragukan lagi, adalah hal yang fantastis! Dengan menggunakan ini, komputer memperoleh kemampuan untuk "melihat" dan merasakan lingkungan sekitar dengan lebih baik, yang memungkinkan pengembangan aplikasi yang kompleks, berguna, dan keren. Aplikasi seperti pendeteksi dan pengenalan wajah, pelacakan objek, dan deteksi objek semakin banyak hadir dalam aktivitas kita sehari-hari, berkat kemajuan visi komputer.

Mempertimbangkan seberapa canggih dan dapat diaksesnya kerangka kerja dan alat visi komputer, aplikasi yang dijelaskan dalam artikel ini sangat cocok: menggunakan Raspberry PI sederhana dan kerangka kerja visi komputer sumber terbuka dan bebas biaya yang disebut OpenCV untuk menghitung objek yang bergerak, lebih tepatnya berapa banyak objek masuk dan keluar dari zona dipantau tertentu.

Langkah 1: Semakin Dalam: Bagaimana Gerakan Objek Terdeteksi dalam Aliran Gambar?

Semakin Dalam: Bagaimana Gerakan Objek Dapat Terdeteksi dalam Aliran Gambar?
Semakin Dalam: Bagaimana Gerakan Objek Dapat Terdeteksi dalam Aliran Gambar?

Sekarang saatnya untuk lebih mendalami hal-hal pemrosesan gambar:

cara mendapatkan beberapa gambar aliran webcam dan mendeteksi bahwa ada sesuatu yang pindah ke sana

Ini terdiri dari lima langkah:

Langkah 1: Untuk menyorot objek yang sedang bergerak

Seperti yang didefinisikan dalam fisika klasik, referensi diperlukan untuk menyimpulkan bahwa ada sesuatu yang bergerak atau diam. Di sini, untuk menentukan apakah ada sesuatu yang telah dipindahkan, caranya hampir sama: setiap frame stream webcam yang diambil akan dibandingkan dengan frame referensi. Jika ada sesuatu yang berbeda, sesuatu telah dipindahkan. Ini sederhana seperti kedengarannya.

Kerangka acuan ini harus ditangkap dalam kondisi yang paling sempurna (tidak ada yang bergerak, misalnya). Dalam dunia pemrosesan gambar, perbandingan antara bingkai yang diambil dan bingkai referensi ini terdiri dari teknik yang disebut pengurangan latar belakang. Pengurangan latar belakang terdiri dari pengurangan informasi warna piksel-ke-piksel secara harfiah dari bingkai yang diambil dan bingkai referensi. Jadi, gambar yang dihasilkan dari proses ini akan disorot / ditampilkan dengan lebih detail hanya apa yang berbeda antara dua bingkai ini (atau, apa yang telah dipindahkan / mendapat gerakan) dan yang lainnya akan menjadi hitam dalam gambar (warna nilai nol pada abu-abu -skala piksel). Penting: kondisi pencahayaan dan kualitas gambar webcam yang diambil (karena kualitas sensor pengambilan) dapat sedikit berbeda dari bingkai ke bingkai. Ini menyiratkan bahwa "bagian yang sama" dari bingkai referensi dan bingkai lain tidak akan menjadi hitam total setelah pengurangan latar belakang. Terlepas dari perilaku ini, tidak ada konsekuensi serius dalam pemrosesan gambar langkah selanjutnya dalam proyek ini.

Untuk meminimalkan waktu pemrosesan gambar, sebelum melakukan subtrasi latar belakang, bingkai yang diambil dan bingkai referensi diubah menjadi gambar skala abu-abu. Tapi kenapa? Ini adalah masalah efisiensi komputasi: gambar yang menampilkan banyak warna (gambar berwarna) memiliki tiga informasi per piksel: komponen warna Merah, Biru dan Hijau (standar RGB lama tapi emas). Jadi, secara matematis, setiap piksel dapat didefinisikan sebagai larik tiga nilai, masing-masing mewakili komponen warna. Oleh karena itu, memperluasnya ke seluruh gambar, gambar akhir sebenarnya akan menjadi campuran dari tiga komponen gambar: komponen gambar Merah, Biru dan Hijau.

Untuk Memprosesnya, banyak pekerjaan yang diperlukan! Namun, dalam gambar skala abu-abu, setiap piksel hanya memiliki satu informasi warna. Jadi, pemrosesan gambar berwarna tiga kali lebih lambat daripada dalam kasus gambar skala abu-abu (setidaknya tiga kali, tergantung pada teknik apa yang terlibat). Dan masih ada lagi: untuk beberapa tujuan (seperti proyek ini), proses semua warna tidak perlu atau penting sama sekali. Oleh karena itu, kami sampai pada kesimpulan: penggunaan gambar skala abu-abu sangat dianjurkan untuk tujuan pemrosesan gambar. Setelah pengurangan latar belakang, perlu untuk menerapkan filter Gaussian Blur.

Filter Gaussian Blur yang diterapkan pada gambar yang dikurangi latar belakang menghaluskan semua kontur objek yang terdeteksi bergerak. Pastinya, ini akan membantu dalam langkah pemrosesan gambar selanjutnya.

Langkah 2: Binarisasi

Binarisasi
Binarisasi

Dalam kebanyakan kasus pemrosesan gambar, binarisasi hampir merupakan langkah wajib setelah menyorot objek/karakteristik dalam suatu gambar. Alasan: dalam gambar biner, setiap warna piksel hanya dapat mengasumsikan dua nilai: 0x00 (hitam) atau 0xFF (putih). Ini sangat membantu pemrosesan gambar untuk membutuhkan lebih sedikit "daya komputasi" untuk menerapkan teknik pemrosesan gambar pada langkah selanjutnya. Binarisasi dapat dilakukan dengan membandingkan setiap warna piksel dari citra skala keabuan dengan ambang batas tertentu. Jika nilai warna piksel lebih besar dari ambang batas, warna piksel ini akan dianggap nilai putih (0xFF), dan jika nilai warna piksel lebih rendah dari ambang batas, warna piksel ini akan dianggap nilai hitam (0x00). Sayangnya, pilihan nilai ambang tidak begitu mudah dibuat. Itu tergantung pada faktor lingkungan, seperti kondisi pencahayaan. Pilihan nilai ambang batas yang salah dapat merusak semua langkah lebih lanjut. Jadi, saya sangat menyarankan Anda menyesuaikan secara manual ambang batas dalam proyek untuk kasus Anda sebelum tindakan lebih lanjut. Nilai ambang batas ini harus memastikan bahwa objek bergerak ditampilkan dalam citra biner. Dalam kasus saya, setelah pilihan ambang batas yang memadai, menghasilkan apa yang Anda lihat pada gambar 5.

Gambar 5 - gambar biner

Langkah 3: Melebarkan

Hingga saat ini, dimungkinkan untuk mendeteksi objek bergerak, menyorotnya, dan menerapkan binarisasi, yang menghasilkan gambar objek bergerak yang cukup jelas (= gambar objek yang cukup jelas untuk keperluan pemrosesan gambar). Persiapan untuk menghitung objek hampir selesai. "Hampir" di sini berarti ada beberapa penyesuaian yang harus dilakukan sebelum melanjutkan. Pada titik ini, ada kemungkinan nyata adanya "lubang" di objek (massa piksel hitam ke objek yang disorot putih). Lubang ini bisa apa saja, dari kondisi pencahayaan tertentu hingga beberapa bagian dari bentuk objek. Setelah lubang dapat "menghasilkan" objek palsu di dalam objek nyata (tergantung pada seberapa besar dan di mana mereka berada), konsekuensi dari keberadaan lubang pada gambar dapat menjadi bencana bagi penghitungan objek. Salah satu cara untuk menghilangkan lubang tersebut adalah dengan menggunakan Teknik pengolahan citra yang disebut Dilate. Gunakan ini dan lubang hilang.

Langkah 4: Pencarian Kontur (dan Centroidnya)

Pencarian Kontur (dan Centroidnya)
Pencarian Kontur (dan Centroidnya)

Pada titik ini, kami memiliki objek yang disorot, tidak ada lubang di dalamnya dan siap untuk apa selanjutnya: pencarian kontur (dan pusatnya). Ada sumber daya di OpenCV untuk mendeteksi kontur secara otomatis, tetapi jumlah yang terdeteksi harus dipilih dengan bijak (untuk memilih objek atau objek nyata saja). Jadi, kriteria untuk mendeteksi kontur adalah luas objek, diukur dalam piksel². Jika suatu kontur memiliki luas yang lebih tinggi dari batas (dikonfigurasi dalam perangkat lunak), maka kontur tersebut harus dianggap sebagai objek nyata yang akan dihitung. Pemilihan batas/kriteria area ini sangat penting, dan pilihan yang buruk disini berarti salah penghitungan. Anda harus mencoba beberapa nilai batas nilai area dan memeriksa apa yang lebih cocok untuk penggunaan Anda. Jangan khawatir, batasan ini tidak terlalu sulit untuk ditemukan/disesuaikan. Setelah semua objek dalam gambar diambil, langkah selanjutnya adalah menggambar retangle di atasnya (retangle ini harus berisi seluruh objek yang terdeteksi di dalamnya). Dan pusat persegi panjang tersebut adalah …. pusat objek! Anda mungkin berpikir "Apa masalahnya dengan centroid ini?", kan? Inilah jawaban Anda: tidak peduli seberapa besar atau bagaimana bentuk objek, gerakannya sama dengan centroid. Dengan kata lain: titik sederhana yang disebut centroid ini mewakili semua pergerakan objek. Itu membuat penghitungan menjadi sangat sederhana sekarang, bukan? Lihat gambar di bawah (gambar 6), di mana centroid objek direpresentasikan sebagai titik hitam.

Langkah 5: Gerakan Centorid dan Penghitungan Objek

Final akhir: bandingkan koordinat centroid objek dengan koordinat garis masuk dan keluar dan terapkan algoritma penghitungan yang dijelaskan sebelumnya. Dan akan ada penghitungan benda bergerak!

Hasil akhirSeperti yang ditunjukkan di awal posting ini, inilah proyek yang sedang beraksi:

Direkomendasikan: