Partage
  • Partager sur Facebook
  • Partager sur Twitter

[OpenCV] Problème nombre de points clés

    15 décembre 2016 à 15:38:54

    Bonjour tout le monde,

    Je suis actuellement entrain de me lancer dans un petit projet Python - OpenCV permettant à partir de la reconnaissance de logo sur une facture de pouvoir envoyer celle-ci dans un dossier ayant son propre nom.
    Ainsi, nous avons admettons les factures suivantes dans le dossier factures : facture A, facture B, facture C

    Nous avons les logos suivants dans le dossier logos : logo A, logo B, logo C

    Et notre petit script est capable pour chaque logo de regarder dans le dossier facture les factures ayant le même logo que celui de référence et d'envoyer la facture dans un nouveau dossier réservé à toutes les factures d'une même société.

    ==> Or le problème actuel c'est que je n'arrive pas à mettre en place la condition permettant de vérifier si le logo "match" ou non avec chaque facture.

    Voici mon script :

    #-*- coding: utf-8 -*-
    
    import os, shutil
    import numpy as np
    import cv2
    
    #########################
    # SIFT descriptors part #
    #########################
    
    # 1 invoice in invoice directory
    img2 = cv2.imread('/Users/valentinjungbluth/Desktop/SIFT_SURF_Algo/Factures/facture_CSA.jpg',0)
    
    print img2.dtype
    
    # Loop over all logo in logo directory
    for element in os.listdir('/Users/valentinjungbluth/Desktop/SIFT_SURF_Algo/Logos') :
    
        img = cv2.imread('/Users/valentinjungbluth/Desktop/SIFT_SURF_Algo/Logos/'+ element,0)
        print img.dtype
    
        # Initiate SIFT detector
        sift = cv2.xfeatures2d.SIFT_create()
    
        kp1, des1 = sift.detectAndCompute(img,None)
        kp2, des2 = sift.detectAndCompute(img2,None)
    
        bf = cv2.BFMatcher()
        matches = bf.knnMatch(des1,des2,k=2)
    
        good = []
        for m,n in matches :
            if m.distance < 0.5*n.distance :
                good.append([m])
    
        img3 = cv2.drawMatchesKnn(img,kp1,img2,kp2,good,None,flags=2)
    
    # Condition which create directory and copy file only if matches between logo and invoice
    
        cv2.imwrite(element,img3)
        
        try :
            os.mkdir("/Users/valentinjungbluth/Desktop/Datasystems_facture")
            shutil.copy("/Users/valentinjungbluth/Desktop/SIFT_SURF_Algo/Factures/facture_CSA.jpg" ,"/Users/valentinjungbluth/Desktop/Datasystems_facture")
        except OSError :
            pass
        
        print ("Déplacement de la facture dans le dossier de son entreprise")

    Voici un exemple de match et no-match :



    Et no-match :


    Auriez-vous une idée sur quelle façon procéder ?

    Cordialement,


    EDIT : J'ai trouvé la solution permettant de redistribuer dans les dossiers adéquats et cela semble fonctionner sans problèmes ;) !

    -
    Edité par Andromedae93 15 décembre 2016 à 18:22:29

    • Partager sur Facebook
    • Partager sur Twitter
    Rien ne se crée, rien ne se perd, tout se transforme ...

    [OpenCV] Problème nombre de points clés

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown