Merhaba,
OpenCV tutoriallarında ve https://github.com/thecodacus/object-recognition-sift-surf/blob/master/Detector.py örneğinde bulunan kodu denemeye çalıştım fakat SIFT algoritması çalışmadı. Bunun nedenini SIFT algoritmasının artık patentli olmasıymış. Dolayısıyla algoritmamı ORB’a çevirdim. Fakat bu sefer de ORB’un Binary-string descriptors yapısından dolayı FLANN ile bir uyumsuzluk oldu. FLANN’ı da Brute-Force Matcher’a çevirip aşağıdaki kodu oluşturdum.
import cv2
import numpy as np
MIN_MATCH_COUNT = 30
#SIFT SUFT patentli olduğu için orb kullandım.
detector = cv2.ORB_create()
#flann ile yapınca type = 0 hatası veriyor. bu yüzden bf matcher kullandım.
bf = cv2.BFMatcher(cv2.NORM_L1,crossCheck=False)
trainImg = cv2.imread('deneme.jpeg', 0)
trainKP, trainDesc= detector.detectAndCompute(trainImg, None)
cam=cv2.VideoCapture(0)
while True:
ret, QueryImgBGR=cam.read()
QueryImg=cv2.cvtColor(QueryImgBGR,cv2.COLOR_BGR2GRAY)
queryKP,queryDesc=detector.detectAndCompute(QueryImg,None)
matches = bf.knnMatch(trainDesc,queryDesc,k=2) #queryDesc'de hata?queryDesc,
goodMatch=[]
for m,n in matches:
if(m.distance<0.75*n.distance):
goodMatch.append(m)
if(len(goodMatch)>MIN_MATCH_COUNT):
tp=[]
qp=[]
for m in goodMatch:
tp.append(trainKP[m.trainIdx].pt)
qp.append(queryKP[m.queryIdx].pt)
tp,qp=np.float32((tp,qp))
H,status=cv2.findHomography(tp,qp,cv2.RANSAC,3.0)
h,w=trainImg.shape
trainBorder=np.float32([[[0,0],[0,h-1],[w-1,h-1],[w-1,0]]])
queryBorder=cv2.perspectiveTransform(trainBorder,H)
cv2.polylines(QueryImgBGR,[np.int32(queryBorder)],True,(0,255,0),5)
else:
print ("Not Enough match found-")
cv2.imshow('result',QueryImgBGR)
if cv2.waitKey(10)==ord('q'):
break
cam.release()
cv2.destroyAllWindows()
Fakat bu kod başarılı bir şekilde nesneyi tanıyamıyor. Örnek bir fotoğrafı yaklaştırdığımda sınırlarından değil fakat fotoğrafın içinde rastgele yerlerde yeşil işaretler çıkıyor. Bir süre sonra ise şu hatayı alıyorum
Traceback (most recent call last):
File "C:\123.py", line 30, in <module>
qp.append(queryKP[m.queryIdx].pt)
IndexError: list index out of range
Objeyi bulamamanın ve hatanın nedenini anlayamadım. Yardımcı olabilirseniz çok sevinirim.