| 12
 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
 49
 50
 51
 
 | def keypointsMatcher(queryImage, testFolder = "./test", modelFolder= "./model", distancePercentage=0.75):
 
    sift = cv2.xfeatures2d.SIFT_create()
    img1 = cv2.imread(os.path.join(testFolder, queryImage), 0)  # queryImage
 
    # find the keypoints and descriptors with SIFT
    kp1, des1 = sift.detectAndCompute(img1, None)
 
    # read through the model folder
    listOfModel = os.listdir(modelFolder)
    print("Number of models "+str(len(listOfModel)))
    print(len(des1))
    print(len(kp1))
 
    numberKpToSelect = len(kp1)//3
    lilstOfSelectedModel = []
 
    for model in listOfModel:
        keyAndDescriptor = readDescriptorFileAndDrawKp(model)
        kp2 = keyAndDescriptor[0]
        print('kp2', len(kp2))
        print('borne', len(kp1) - numberKpToSelect, 'borne', len(kp1) + numberKpToSelect)
 
        if (len(kp2) >= len(kp1) - numberKpToSelect) and (len(kp2) <= len(kp1) + numberKpToSelect):
            des2 = keyAndDescriptor[1]
            print('first')
            # BFMatcher with default params
            bf = cv2.BFMatcher()
            matches = bf.knnMatch(des2, des1, k=2)
 
            # Apply ratio testold
            good = []
 
            if len(np.array(matches).shape) == 2 and np.array(matches).shape[1] == 2:
                for m, n in matches:
                    if (m.distance < distancePercentage*n.distance):
                        good.append([m])
                #rapport = len(good)/ len(kp1)
                #if rapport >= 0.6:
                lilstOfSelectedModel.append(model)
                print(model, " ", "selected  rapprot")
 
    #print(lilstOfSelectedModel)
    seen = []
    for ob in lilstOfSelectedModel:
        filename = ob.split("__")[0]
        seen.append(filename)
    listSeen = Counter(seen)
    for element in listSeen:
        print(element,' ', listSeen[element], "  ",countCategoryElement(element), listSeen[element]/countCategoryElement(element))
    print(len(lilstOfSelectedModel)) | 
Partager