Kami mulai dengan mempelajari dasar-dasar OpenCV dan kemudian melakukan beberapa pemrosesan dan manipulasi gambar dasar pada gambar diikuti oleh segmentasi Gambar dan banyak operasi lainnya menggunakan OpenCV dan bahasa python. Di sini, di bagian ini, kami akan melakukan beberapa teknik deteksi objek sederhana menggunakan pencocokan template. Kami akan menemukan sebuah objek dalam sebuah gambar dan kemudian kami akan menjelaskan fitur-fiturnya. Fitur adalah atribut umum dari gambar seperti sudut, tepi, dll. Kita juga akan melihat beberapa algoritma deteksi objek yang umum dan populer seperti SIFT, SURF, FAST, BREIF & ORB.
Seperti yang diceritakan di tutorial sebelumnya, OpenCV adalah Open Source Commuter Vision Library yang memiliki antarmuka C ++, Python, dan Java serta mendukung Windows, Linux, Mac OS, iOS, dan Android. Sehingga bisa dengan mudah di install di Raspberry Pi dengan lingkungan Python dan Linux. Dan Raspberry Pi dengan OpenCV dan kamera terpasang dapat digunakan untuk membuat banyak aplikasi pemrosesan gambar real-time seperti Deteksi wajah, kunci wajah, pelacakan objek, deteksi pelat nomor mobil, sistem keamanan rumah, dll.
Deteksi dan pengenalan objek merupakan kasus penggunaan yang paling penting untuk computer vision, mereka digunakan untuk melakukan hal-hal hebat seperti
- Memberi label pada adegan
- Navigasi Robot
- Mobil self-driving
- Pengenalan tubuh (Microsoft Kinect)
- Deteksi penyakit dan kanker
- Pengenalan wajah
- Pengenalan tulisan tangan
- Mengidentifikasi objek dalam citra satelit
Deteksi Objek VS Pengakuan
Pengenalan objek adalah pendeteksian objek tingkat kedua di mana komputer dapat mengenali objek dari berbagai objek dalam sebuah gambar dan mungkin dapat mengidentifikasinya.
Sekarang, kita akan melakukan beberapa fungsi pengolahan citra untuk mencari objek dari sebuah citra.
Menemukan Objek dari Gambar
Di sini kita akan menggunakan pencocokan template untuk menemukan karakter / objek dalam gambar, gunakan fungsi cv2.matchTemplate () OpenCV untuk menemukan objek itu.
impor cv2 impor numpy sebagai np
Muat gambar masukan dan ubah menjadi abu-abu
image = cv2.imread ('WaldoBeach.jpg') cv2.imshow ('people', image) cv2.waitKey (0) grey = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Muat gambar template
template = cv2.imread ('waldo.jpg', 0) #hasil pencocokan template objek di atas gambar result = cv2.matchTemplate (abu-abu, template, cv2.TM_CCOEFF) sin_val, max_val, min_loc, max_loc = cv2.minMaxLoc (hasil)
Buat kotak pembatas
top_left = max_loc #meningkatkan ukuran persegi panjang pembatas sebesar 50 piksel bottom_right = (top_left + 50, top_left + 50) cv2.rectangle (image, top_left, bottom_right, (0,255,0), 5) cv2.imshow ('object found', gambar) cv2.waitKey (0) cv2.destroyAllWindows ()
Di cv2.matchTemplate (abu-abu, template, cv2.TM_CCOEFF) , masukkan gambar skala abu-abu untuk menemukan objek dan template. Kemudian terapkan metode pencocokan template untuk menemukan objek dari gambar, di sini cv2.TM_CCOEFF digunakan.
Seluruh fungsi mengembalikan larik yang dimasukkan sebagai hasil, yang merupakan hasil dari prosedur pencocokan templat.
Dan kemudian kita menggunakan cv2.minMaxLoc (result) , yang memberikan koordinat atau kotak pembatas tempat objek ditemukan dalam sebuah gambar, dan ketika kita mendapatkan koordinat tersebut gambarlah persegi panjang di atasnya, dan rentangkan sedikit dimensi kotak sehingga objek dapat dengan mudah masuk ke dalam persegi panjang.
Ada berbagai metode untuk melakukan pencocokan template dan dalam hal ini kami menggunakan cv2.TM_CCOEFF yang merupakan singkatan dari koefisien korelasi.
Berikut keypoints adalah koordinat (X, Y) yang diekstraksi menggunakan sift detector dan digambar di atas citra menggunakan fungsi keypoint draw cv2.
BERSELANCAR
impor cv2 import numpy sebagai np image = cv2.imread ('paris.jpg') grey = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Buat objek SURF Feature Detector, disini kita atur hessian threshold menjadi 500
surf = cv2.xfeatures2d.SURF_create (500) keypoints, descriptors = surf.detectAndCompute (abu-abu, Tidak ada) print ("Jumlah titik kunci yang Terdeteksi:", len (keypoints))
Gambarlah poin-poin penting pada gambar masukan
image = cv2.drawKeypoints (image, keypoints, None, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Metode Fitur - SURF', image) cv2.waitKey () cv2.destroyAllWindows ()
Keluaran Konsol:
CEPAT
impor cv2 import numpy sebagai np image = cv2.imread ('paris.jpg') grey = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Buat objek FAST Detector
fast = cv2.FastFeatureDetector_create () # Dapatkan poin-poin penting, secara default penekanan non max adalah On # untuk mematikan set fast.setBool ('nonmaxSuppression', False) keypoints = fast.detect (grey, None) print ("Number of keypoints Terdeteksi: ", len (keypoints))
Gambar titik tombol yang kaya pada gambar masukan
image = cv2.drawKeypoints (image, keypoints, None, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Metode Fitur - FAST', image) cv2.waitKey () cv2.destroyAllWindows ()
Keluaran Konsol:
SINGKAT
impor cv2 import numpy sebagai np image = cv2.imread ('paris.jpg') grey = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Buat objek detektor CEPAT
brief = cv2.xfeatures2d.BriefDescriptorExtractor_create ()
Buat objek ekstraktor SINGKAT
#brief = cv2.DescriptorExtractor_create ("BRIEF") # Tentukan poin kunci keypoints = fast.detect (abu-abu, Tidak ada)
Dapatkan deskriptor dan titik kunci akhir baru menggunakan BRIEF
keypoints, descriptors = brief.compute (abu-abu, keypoints) print ("Jumlah keypoint yang Terdeteksi:", len (keypoints))
Gambar titik tombol yang kaya pada gambar masukan
image = cv2.drawKeypoints (image, keypoints, None, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Metode Fitur - BRIEF', image) cv2.waitKey () cv2.destroyAllWindows ()
Keluaran Konsol:
BOLA
impor cv2 import numpy sebagai np image = cv2.imread ('paris.jpg') grey = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Buat objek ORB, kita dapat menentukan jumlah poin kunci yang kita inginkan
orb = cv2.ORB_create () # Tentukan poin kunci keypoints = orb.detect (abu-abu, Tidak ada)
Dapatkan deskriptornya
keypoints, descriptors = orb.compute (abu-abu, keypoints) print ("Jumlah titik kunci yang Terdeteksi:", len (keypoints))
Gambar titik tombol yang kaya pada gambar masukan
image = cv2.drawKeypoints (image, keypoints, None, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Metode Fitur - ORB', image) cv2.waitKey () cv2.destroyAllWindows ()
Keluaran Konsol:
Kita dapat menentukan jumlah keypoint yang memiliki batas maksimum 5000, namun nilai defaultnya adalah 500, artinya ORB secara otomatis akan mendeteksi 500 keypoint terbaik jika tidak ditentukan untuk nilai keypoints apa pun.
Jadi begini cara deteksi objek berlangsung di OpenCV, program yang sama juga dapat dijalankan di OpenCV yang diinstal Raspberry Pi dan dapat digunakan sebagai perangkat portabel seperti Ponsel cerdas yang memiliki Google Lens.
Artikel ini dirujuk dari Master Computer Vision ™ OpenCV4 dengan kursus Deep Learning di Udemy, dibuat oleh Rajeev Ratan, berlanggananlah untuk mempelajari lebih lanjut tentang Computer Vision dan Python.