import cv2
import os
from matplotlib import pyplot as plt

def FLANN():

    targetPath = 'AI.jpg'
    trainingImage = cv2.imread(targetPath, flags=0)

    templatePath = 'image/'
    icons = os.listdir(templatePath)
    iconMatch= dict({'name': '未识别', 'value': 0})
    for icon in icons:
        queryImage = cv2.imread(templatePath + icon, 0)

        sift = cv2.SIFT_create()
        kp1, des1 = sift.detectAndCompute(queryImage, None)
        kp2, des2 = sift.detectAndCompute(trainingImage, None)

        indexParams = dict(algorithm=0, trees=5)
        searchParams = dict(checks=50)
        flann = cv2.FlannBasedMatcher(indexParams,searchParams)
        matches = flann.knnMatch(des1,des2,k=2)

        matchesMask = [[0,0] for i in range(len(matches))]
        matchNumber = 0

        for i,(m,n) in enumerate(matches):
            if m.distance < 0.7 * n.distance:
                matchesMask[i] = [1,0]
                matchNumber = matchNumber+1

        drawParams = dict(matchColor = (0,255,0), matchesMask = matchesMask[:50], flags = 0)
        resultImage = cv2.drawMatchesKnn(queryImage,kp1,trainingImage,kp2,matches[:50],None,**drawParams)

        if matchNumber > iconMatch['value']:
            iconMatch['name'] = icon.split('_')[0]
            iconMatch['value'] = matchNumber

    return resultImage, iconMatch

if __name__ == '__main__':
    resultImage, res = FLANN()
    # plt.imshow(resultImage)
    # plt.show()
    print(resultImage, res)
