OpenCV'nin temellerini öğrenmekle başladık ve ardından görüntüler üzerinde bazı temel görüntü işleme ve manipülasyonlar yaptık, ardından Görüntü segmentasyonları ve OpenCV ve python dilini kullanarak diğer birçok işlem yaptık. Burada, bu bölümde, şablon eşleştirmeyi kullanarak bazı basit nesne algılama tekniklerini gerçekleştireceğiz. Bir görüntüde bir nesne bulacağız ve ardından özelliklerini tanımlayacağız. Özellikler, görüntünün köşeler, kenarlar vb. Gibi ortak özellikleridir. Ayrıca SIFT, SURF, FAST, BREIF ve ORB gibi bazı yaygın ve popüler nesne algılama algoritmalarına da bir göz atacağız.
Önceki eğitimlerde anlatıldığı gibi OpenCV, C ++, Python ve Java arayüzlerine sahip ve Windows, Linux, Mac OS, iOS ve Android'i destekleyen Açık Kaynak Banliyö Vizyon Kitaplığıdır. Böylece Python ve Linux ortamı ile Raspberry Pi'ye kolaylıkla kurulabilir. Ve OpenCV ve ekli kameralı Raspberry Pi, Yüz algılama, yüz kilidi, nesne izleme, araç plaka algılama, Ev güvenlik sistemi vb. Gibi birçok gerçek zamanlı görüntü işleme uygulaması oluşturmak için kullanılabilir.
Nesne algılama ve tanıma, bilgisayar görüşü için en önemli kullanım durumudur, bunlar gibi güçlü şeyler yapmak için kullanılırlar.
- Sahneleri etiketleme
- Robot Navigasyonu
- Kendi kendine giden arabalar
- Vücut tanıma (Microsoft Kinect)
- Hastalık ve kanser tespiti
- Yüz tanıma
- Elyazısı tanıma
- Uydu görüntülerinde nesneleri tanımlama
Nesne Algılama VS Tanıma
Nesne tanıma, bilgisayarın bir görüntüdeki birden çok nesneden bir nesneyi tanıyabildiği ve onu tanımlayabildiği ikinci düzey nesne algılamadır.
Şimdi, bir görüntüden bir nesne bulmak için bazı görüntü işleme işlevlerini gerçekleştireceğiz.
Bir Görüntüden Bir Nesneyi Bulmak
Burada bir görüntüdeki karakteri / nesneyi bulmak için şablon eşlemeyi kullanacağız, bu nesneyi bulmak için OpenCV'nin cv2.matchTemplate () işlevini kullanacağız.
cv2'yi np olarak içe aktar numpy
Giriş görüntüsünü yükleyin ve griye dönüştürün
image = cv2.imread ('WaldoBeach.jpg') cv2.imshow ('insanlar', image) cv2.waitKey (0) gray = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Şablon görüntüsünü yükleyin
template = cv2.imread ('waldo.jpg', 0) # Bir görüntü sonucu üzerinde nesnenin şablon eşleşmesinin sonucu = cv2.matchTemplate (gray, template, cv2.TM_CCOEFF) sin_val, max_val, min_loc, max_loc = cv2.minMaxLoc (sonuç)
Sınırlayıcı kutu oluştur
top_left = max_loc # sınırlayıcı dikdörtgenin boyutunu 50 piksel artırma bottom_right = (top_left + 50, top_left + 50) cv2.rectangle (image, top_left, bottom_right, (0,255,0), 5) cv2.imshow ('nesne bulundu', resim) cv2.waitKey (0) cv2.destroyAllWindows ()
Gelen cv2.matchTemplate (gri, şablon, cv2.TM_CCOEFF) , gri ölçekli bir görüntü girdi nesnesi ve bir şablon bulmak. Ardından görüntüden nesneleri bulmak için şablon eşleştirme yöntemini uygulayın, burada cv2.TM_CCOEFF kullanılır.
Tüm işlev, sonuçta girilen bir dizi döndürür, bu da şablon eşleştirme prosedürünün sonucudur.
Ve sonra nesnenin bir görüntüde bulunduğu koordinatları veya sınırlayıcı kutuyu veren cv2.minMaxLoc (sonuç) 'u kullanırız ve bu koordinatları aldığımızda bunun üzerine bir dikdörtgen çizeriz ve kutunun boyutlarını biraz uzatarak nesne dikdörtgenin içine kolayca sığabilir.
Şablon eşleştirme gerçekleştirmek için çeşitli yöntemler vardır ve bu durumda korelasyon katsayısı anlamına gelen cv2.TM_CCOEFF kullanıyoruz.
Burada temel noktalar, eleme detektörü kullanılarak çıkarılan (X, Y) koordinatlardır ve cv2 çizim anahtar noktası işlevi kullanılarak görüntünün üzerine çizilir.
SÖRF
cv2 içe aktar numpy np image = cv2.imread ('paris.jpg') gray = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
SURF Feature Detector nesnesi oluşturun, burada kendir eşiğini 500 olarak ayarladık
surf = cv2.xfeatures2d.SURF_create (500) keypoints, descriptors = surf.detectAndCompute (gray, None) print ("Algılanan Keypoint Sayısı:", len (keypoints))
Giriş görüntüsüne zengin anahtar noktalar çizin
image = cv2.drawKeypoints (image, keypoints, None, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - SURF', image) cv2.waitKey () cv2.destroyAllWindows ()
Konsol Çıkışı:
HIZLI
cv2 içe aktar numpy np image = cv2.imread ('paris.jpg') gray = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
FAST Detector nesnesi oluştur
Hızlı = cv2.FastFeatureDetector_create () # varsayılan olmayan maksimum bastırılmasıyla, Anahtar noktaları elde Açık seti fast.setBool ('nonmaxSuppression', False) kapatmak için # keypoints = fast.detect (gri, Yok) print ("keypoints sayısı Algılandı: ", len (anahtar noktalar))
Giriş görüntüsüne zengin anahtar noktalar çizin
image = cv2.drawKeypoints (image, keypoints, None, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - FAST', image) cv2.waitKey () cv2.destroyAllWindows ()
Konsol Çıkışı:
KISA
cv2 içe aktar numpy np image = cv2.imread ('paris.jpg') gray = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
FAST dedektör nesnesi oluşturun
brief = cv2.xfeatures2d.BriefDescriptorExtractor_create ()
BRIEF çıkarıcı nesnesi oluşturun
#brief = cv2.DescriptorExtractor_create ("KISA") # Anahtar noktaları belirle anahtar noktaları = fast.detect (gri, Yok)
BRIEF kullanarak tanımlayıcıları ve yeni son kilit noktaları edinin
keypoints, descriptors = brief.compute (gray, keypoints) print ("Algılanan Keypoint Sayısı:", len (keypoints))
Giriş görüntüsüne zengin anahtar noktalar çizin
image = cv2.drawKeypoints (image, keypoints, None, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - BRIEF', image) cv2.waitKey () cv2.destroyAllWindows ()
Konsol Çıkışı:
ORB
cv2 içe aktar numpy np image = cv2.imread ('paris.jpg') gray = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
ORB nesnesi oluşturun, istediğimiz anahtar noktaların sayısını belirleyebiliriz
orb = cv2.ORB_create () # Anahtar noktaları belirle anahtar noktaları = orb.detect (gri, Yok)
Tanımlayıcıları edinin
keypoints, descriptors = orb.compute (gray, keypoints) print ("Algılanan Keypoint Sayısı:", len (keypoints))
Giriş görüntüsüne zengin anahtar noktalar çizin
image = cv2.drawKeypoints (image, keypoints, None, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - ORB', image) cv2.waitKey () cv2.destroyAllWindows ()
Konsol Çıkışı:
Maksimum sınırı 5000 olan anahtar nokta sayısını belirleyebiliriz, ancak varsayılan değer 500'dür, yani ORB, anahtar noktaların herhangi bir değeri için belirtilmezse otomatik olarak en iyi 500 anahtar noktasını tespit eder.
Dolayısıyla OpenCV'de nesne algılama bu şekilde gerçekleşir, aynı programlar OpenCV yüklü Raspberry Pi'de de çalıştırılabilir ve Google Lensli Akıllı Telefonlar gibi taşınabilir bir cihaz olarak kullanılabilir.
Bu makale, Rajeev Ratan tarafından oluşturulan Udemy'deki Derin Öğrenme ile Python'da Master Computer Vision ™ OpenCV4 kursundan alınmıştır, Computer Vision ve Python hakkında daha fazla bilgi edinmek için bu makaleye abone olun.