Kami bermula dengan asas pembelajaran OpenCV dan kemudian melakukan beberapa pemprosesan dan manipulasi gambar asas pada gambar diikuti dengan segmentasi Imej dan banyak operasi lain menggunakan bahasa OpenCV dan python. Di sini, di bahagian ini, kami akan melakukan beberapa teknik pengesanan objek mudah menggunakan pencocokan templat. Kami akan menemui objek dalam gambar dan kemudian kami akan menerangkan ciri-cirinya. Ciri-ciri adalah sifat umum gambar seperti sudut, tepi dll. Kami juga akan melihat beberapa algoritma pengesanan objek yang biasa dan popular seperti SIFT, SURF, FAST, BREIF & ORB.
Seperti yang diberitahu dalam tutorial sebelumnya, OpenCV adalah Open Source Commuter Vision Library yang mempunyai antara muka C ++, Python dan Java dan menyokong Windows, Linux, Mac OS, iOS dan Android. Oleh itu, ia dapat dipasang dengan mudah di Raspberry Pi dengan persekitaran Python dan Linux. Dan Raspberry Pi dengan OpenCV dan kamera terpasang dapat digunakan untuk membuat banyak aplikasi pemprosesan gambar masa nyata seperti Pengesanan wajah, kunci muka, penjejakan objek, pengesanan plat nombor kereta, sistem keselamatan Rumah dll.
Pengesanan dan pengecaman objek membentuk kes penggunaan yang paling penting untuk penglihatan komputer, mereka digunakan untuk melakukan perkara-perkara yang kuat seperti
- Adegan pelabelan
- Navigasi Robot
- Kereta memandu sendiri
- Pengecaman badan (Microsoft Kinect)
- Penyakit dan pengesanan barah
- Pengecaman wajah
- Pengenalan tulisan tangan
- Mengenal pasti objek dalam gambar satelit
Pengesanan Objek Pengenalan VS
Pengecaman objek adalah tahap kedua pengesanan objek di mana komputer dapat mengenali objek dari beberapa objek dalam gambar dan mungkin dapat mengenalinya.
Sekarang, kami akan melakukan beberapa fungsi pemprosesan gambar untuk mencari objek dari gambar.
Mencari Objek dari Gambar
Di sini kita akan menggunakan pencocokan templat untuk mencari watak / objek dalam gambar, menggunakan fungsi cv2.matchTemplate () OpenCV untuk mencari objek itu
import cv2 import numpy sebagai np
Muatkan gambar input dan ubah menjadi kelabu
gambar = cv2.imread ('WaldoBeach.jpg') cv2.imshow ('orang', gambar) cv2.waitKey (0) kelabu = cv2.cvtColor (gambar, cv2.COLOR_BGR2GRAY)
Muatkan gambar templat
template = cv2.imread ('waldo.jpg', 0) # hasil pencocokan templat objek di atas hasil gambar = cv2.matchTemplate (kelabu, templat, cv2.TM_CCOEFF) sin_val, max_val, min_loc, max_loc = cv2.minMaxLoc (hasil)
Buat kotak pengikat
top_left = max_loc #meningkatkan ukuran segi empat sama batas dengan 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 ()
Dalam cv2.matchTemplate (kelabu, templat, cv2.TM_CCOEFF) , masukkan gambar skala kelabu untuk mencari objek dan templat. Kemudian gunakan kaedah pencocokan templat untuk mencari objek dari gambar, di sini digunakan cv2.TM_CCOEFF .
Seluruh fungsi mengembalikan array yang dimasukkan dalam hasil, yang merupakan hasil dari prosedur pencocokan templat.
Dan kemudian kita menggunakan cv2.minMaxLoc (hasil) , yang memberikan koordinat atau kotak pengikat di mana objek itu dijumpai dalam gambar, dan ketika kita mendapatkan koordinat tersebut, lukiskan sebuah segi empat tepat di atasnya, dan rentangkan sedikit dimensi kotak sehingga objek boleh masuk dengan mudah di dalam segi empat tepat.
Terdapat pelbagai kaedah untuk melakukan pencocokan templat dan dalam hal ini kita menggunakan cv2.TM_CCOEFF yang bermaksud pekali korelasi.
Di sini titik-titik adalah koordinat (X, Y) yang diekstrak menggunakan sift detector dan dilukis di atas gambar menggunakan fungsi keypoint draw cv2.
SURF
import cv2 import numpy sebagai np image = cv2.imread ('paris.jpg') kelabu = cv2.cvtColor (gambar, cv2.COLOR_BGR2GRAY)
Buat objek SURF Feature Detector, di sini kita menetapkan ambang hessian menjadi 500
surf = cv2.xfeatures2d.SURF_create (500) titik kekunci , deskriptor = surf.detectAndCompute (grey, None) print ("Number of keypoint Detected:", len (keypoints))
Lukiskan titik utama yang kaya pada gambar input
image = cv2.drawKeypoints (gambar, titik kekunci, Tiada, bendera = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - SURF', image) cv2.waitKey () cv2.destroyAll
Keluaran Konsol:
CEPAT
import cv2 import numpy sebagai np image = cv2.imread ('paris.jpg') kelabu = cv2.cvtColor (gambar, cv2.COLOR_BGR2GRAY)
Buat objek FAST Detector
fast = cv2.FastFeatureDetector_create () # Dapatkan poin utama, secara lalai penekanan bukan maksimum adalah Hidup # untuk mematikan set cepat.setBool ('nonmaxSuppression', False) papan kekunci = fast.detect (kelabu, Tiada) ("Bilangan titik kekunci) Dikesan: ", len (titik kekunci))
Lukiskan papan kekunci yang kaya pada gambar input
image = cv2.drawKeypoints (gambar, titik kekunci, Tiada, bendera = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - CEPAT', gambar) cv2.waitKey () cv2.destroyAll
Keluaran Konsol:
RINGKAS
import cv2 import numpy sebagai np image = cv2.imread ('paris.jpg') kelabu = cv2.cvtColor (gambar, cv2.COLOR_BGR2GRAY)
Buat objek pengesan CEPAT
ringkas = cv2.xfeatures2d.BriefDescriptorExtractor_create ()
Buat objek pengekstrak RINGKAS
#brief = cv2.DescriptorExtractor_create ("RINGKAS") # Tentukan titik kunci titik utama = fast.detect (kelabu, Tiada)
Dapatkan deskriptor dan titik kekunci akhir baru menggunakan SINGKAT
keypoints, deskriptor = ringkas.compute (kelabu, titik kekunci) mencetak ("Bilangan titik kekunci yang Dikesan:", len (titik kekunci))
Lukiskan papan kekunci yang kaya pada gambar input
image = cv2.drawKeypoints (gambar, titik kekunci, Tiada, bendera = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - BRIEF', image) cv2.waitKey () cv2.destroyAll
Keluaran Konsol:
ORB
import cv2 import numpy sebagai np image = cv2.imread ('paris.jpg') kelabu = cv2.cvtColor (gambar, cv2.COLOR_BGR2GRAY)
Buat objek ORB, kita dapat menentukan jumlah perkara utama yang kita mahukan
orb = cv2.ORB_create () # Tentukan titik kunci titik utama = orb.detect (kelabu, Tiada)
Dapatkan penerangan
titik kekunci, deskriptor = orb.compute (kelabu, titik kekunci) mencetak ("Bilangan titik kekunci yang Dikesan:", len (titik kekunci))
Lukiskan papan kekunci yang kaya pada gambar input
image = cv2.drawKeypoints (gambar, titik kekunci, Tiada, bendera = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - ORB', image) cv2.waitKey () cv2.destroyAll
Keluaran Konsol:
Kita dapat menentukan bilangan titik kunci yang mempunyai had maksimum 5000, namun nilai lalai adalah 500, iaitu ORB secara automatik akan mengesan 500 titik kekunci terbaik jika tidak ditentukan untuk nilai mana-mana titik.
Jadi ini adalah bagaimana pengesanan objek berlaku di OpenCV, program yang sama juga dapat dijalankan di Raspberry Pi yang dipasang di OpenCV dan dapat digunakan sebagai peranti mudah alih seperti Telefon Pintar yang mempunyai Google Lens.
Artikel ini dirujuk dari Master Computer Vision ™ OpenCV4 di Python dengan kursus Deep Learning on Udemy, yang dibuat oleh Rajeev Ratan, berlangganan untuk mengetahui lebih lanjut mengenai Computer Vision dan Python.