Bu yazımda bir yapay zeka sınıflandırma uygulaması olan KNN ve Python ile kısaca nesne algılamaya yönelik kodu paylaşacağım.
Kısaca KNN :
KNN aslında tembel bir yapay zeka sınıflandırma sistemidir.Verilen bir veri tabanı üzerinden en yakın komşu algoritmasını kullanarak sonuca ulaşmaya çalışır.
Diğer uygulamalara nazaran daha fazla alan, bellek ve sistem gereksinimi ister çünkü hali hazırda bulunan bir veri tabanı, resim vb. kendine örnek oluşturacak veriler üzerinden sınıflandırma yapar.
Biz yapacağımız uygulama üzerinde ekranımızda oynayan video üzerinde datasetimiz olan mordecai.png yi arayacağız.
mordecai.png bizim datasetimiz bu resim üzerinde bulunan nesneleri knn ekranımızda oynayan video üzerinde karşılaştırarak işaretleyecek. Mordecai’nin farklı varyasyonlardaki resimlerini ekleyerek bu karşılaştırmayı daha iyi hale getirebiliriz. Ben sadece 2 adet ekledim.
Şimdi kodumuza geçelim öncelikli olarak aşağıdaki kütüphaneleri eğer yok ise yüklememiz gerekiyor.
1 2 3 4 5 6 7 8 9 |
Numpy : pip install numpy OpenCV : pip install opencv-python pip install opencv-contrib-python Pillow : pip install pillow |
Bu kısımı tamamladıysak aşağıda örnek kodu ve kullanılan diğer dosyaları bulabilirsiniz.
Kodumuz :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
import cv2 import numpy as np from PIL import ImageGrab while(True): try: EkranGoruntusu = np.array(ImageGrab.grab(bbox=(80,80,1280,800))) # Anlik olarak ekran goruntumuzu aliyoruz. BulunacakResim = cv2.imread('mordecai.png') # Ekran grountumuz uzerinde bulunacak resimi tanimliyoruz. # Sift besbemizi olusturuyoruz. sift = cv2.xfeatures2d.SIFT_create() # Sift ile resimlerin uzerinde kilit noktalari buluyoruz. kp1, des1 = sift.detectAndCompute(EkranGoruntusu,None) kp2, des2 = sift.detectAndCompute(BulunacakResim,None) # FLANN parameters FLANN_INDEX_KDTREE = 1 index_params = dict(algorithm = 0, trees = 15) search_params = dict(checks=150) flann = cv2.FlannBasedMatcher(index_params,search_params) matches = flann.knnMatch(np.float32(des1),np.float32(des2),k=2) # Iyi eslesmeler icin bir maske olusturuyoruz. matchesMask = [[0,0] for i in range(len(matches))] Olasilik = 0; # En Iyı KNN eslesmelerini buluyoruz. for i,(m,n) in enumerate(matches): if m.distance < 0.5*n.distance: matchesMask[i]=[1,0] pt1 = kp1[m.queryIdx].pt # Bulunan noktalrimizin korodinatlari pt2 = kp2[n.trainIdx].pt # Bulunan noktalrimizin korodinatlari Ust_Sag = (int(pt1[0])-80,int(pt1[1])-80) Alt_Sol = (int(pt1[0])+80,int(pt1[1])+80) # Her eslesen nokta icin olasiligimizi 1 arttiriyoruz. Olasilik = Olasilik + 1 if(Olasilik > 5): # Eger olasiliklerimiz bir nesne icin 5 i gecerse nesnemizi isaretliyoruz. cv2.rectangle(EkranGoruntusu, Ust_Sag, Alt_Sol, (0,255,0),3) Olasilik = 0 draw_params = dict( singlePointColor = (255,0,0), matchesMask = matchesMask, flags = cv2.DrawMatchesFlags_DEFAULT) # KNN ile simulasyon goruntusunu ekranda gosteriyoruz. KNNCiz = cv2.drawMatchesKnn(EkranGoruntusu,kp1,BulunacakResim,kp2,matches,None,**draw_params) cv2.imshow('window',KNNCiz) if cv2.waitKey(27) & 0xFF == ord('q'): cv2.destroyAllWindows() break except Exception as e: print(e) pass |
mordecai.png :
Kodumuz bu kadar. Bir dahaki yazımda knn ve python kullanarak yapay zekaya ördek oyunu (Atari’de olan) oynatacağız.