예제 #1
0
def recognize(cf, img):
    # caricamento dei vari dataset
    gallery_target = np.load("npy_db/gallery_target.npy")
    histogram_gallery_data = np.load("npy_db/histogram_gallery_data.npy")
    gallery_thresholds = np.load("npy_db/gallery_thresholds.npy")
    users = pd.read_csv('dataset_user.csv', index_col=[0])
    cf_list = users['Codice Fiscale']

    # controlla se l'utente esiste
    if not cf_list.tolist().__contains__(cf):
        print("UTENTE NON PRESENTE! Il codice fiscale inserito è:", cf)
        return None, 0, None

    # inizializzazione delle variabili che conterranno i dati del paziente e l'indice in cui si trova in dataset_user
    user = None
    index = cf_list.tolist().index(cf)

    # l'immagine in input viene normalizzata per poter utilizzare LBP e ottenerne l'istogramma relativo
    norm_image = cv2.normalize(img, None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_32F)
    norm_image = norm_image.astype(np.uint8)
    lbp = LBP.Local_Binary_Pattern(1, 8, norm_image)
    hist = lbp.createHistogram(lbp.compute_lbp())

    # calcola la corrispondenza massima tra l'istogramma dell'immagine in input e quelli delle immagini nella galleria dell'utente
    val = topMatch(cf, gallery_target, histogram_gallery_data, hist)

    # se la similairtà massima è maggiore o uguale alla soglia adattativa del paziente, l'identità viene verificata
    if val >= gallery_thresholds[index]:
        user = users.iloc[index]

    # ritorna le informazioni del paziente e l'indice in cui si trova in dataset_user
    return user, index, user
예제 #2
0
def identify(cf, img):
    # caricamento dei vari dataset
    gallery_target = np.load("npy_db/gallery_target.npy")
    histogram_gallery_data = np.load("npy_db/histogram_gallery_data.npy")
    users = pd.read_csv('dataset_user.csv', index_col=[0])
    gallery_thresholds = np.load("npy_db/gallery_thresholds.npy")
    galley_users = list(dict.fromkeys(gallery_target))
    cf_list = users['Codice Fiscale']

    # controlla se l'utente esiste
    if not cf_list.tolist().__contains__(cf):
        print("UTENTE NON PRESENTE! Il codice fiscale inserito è:", cf)
        return None, 0, None

    # informazioni del paziente utilizzando cf
    index = cf_list.tolist().index(cf)
    user = users.iloc[index]

    # lista dei delegati del paziente
    delegati = ast.literal_eval(user["Delegati"])

    # se il paziente non ha nessun delegato, allora termina l'operazione
    if len(delegati) == 0:
        print("L'utente non ha delegati!")
        return None, 0, None

    # si inizializzano le variabili per la similarity e l'identità del delegato
    max = 0
    identity = None

    # l'immagine in input viene normalizzata per poter utilizzare LBP e ottenerne l'istogramma relativo
    norm_image = cv2.normalize(img, None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_32F)
    norm_image = norm_image.astype(np.uint8)
    lbp = LBP.Local_Binary_Pattern(1, 8, norm_image)
    hist = lbp.createHistogram(lbp.compute_lbp())

    # per ogni delegato
    for d in delegati:
        # ottengo il miglior valore ottenuto confrontando l'istograma con quelli del delegato nella galleria
        val = topMatch(d, gallery_target, histogram_gallery_data, hist)
        th_index = galley_users.index(d)
        # confrontiamo la similarity con quella massimo ottenuta finora e con il threshold del delegato
        # se la similarity supera quella massima e il threshold, allora aggiorniamo le variabili
        if val > max and val >= gallery_thresholds[th_index]:
            max = val  # il più alto valore di similarity attuale
            identity = d  # identità del delegato che ha ottenuto il miglior valore per il momento

    # se c'è stato un riconoscimento tra i delegati
    if identity is not None:
        indexd = cf_list.tolist().index(identity)
        recUser = users.iloc[indexd]
        # ritorna i dati del paziente, l'indice in cui si trova in dataset_user e le informazioni del delegato
        return user, index, recUser
    else:
        # altrimenti ritorna None come paziente, 0 come indice e None come delegato
        return None, 0, None
    def convert_image_to_hist(self, image):
        print(image)
        image = cv2.imread(image)

        norm_image = get_normalized(image)
        myLBP = LBP.Local_Binary_Pattern(1, 8, norm_image)
        new_img = myLBP.compute_lbp()

        hist = myLBP.createHistogram(new_img)
        return hist
예제 #4
0
 def split_gallery_probe(self, data, target, cfs):
     num_user = self.num_user(target)
     # calcola il numero di template per utente
     unique, counts = np.unique(target, return_counts=True)
     occurrences = dict(zip(unique, counts))
     # numero di utenti che non sono nella gallery
     pn_user = round(num_user * pn / 100)
     # conteggio dei template
     countTemp = 0
     # conteggio
     countUser = 0
     # gallery_target, gallery_data, pn_data, pn_target, pg_data, pg_target = [], [], [], [], [], []
     gallery_target, gallery_data, pn_data, pn_target, pg_data, pg_target, histogram_gallery_data, \
     histogram_pg_data, histogram_pn_data = [], [], [], [], [], [], [], [], []
     # prendo il numero di template dell'utente. si parte dal presupposto che tutti gli utenti
     # hanno lo stesso numero di template
     occ = occurrences[target[0]]
     # numero di template per il probe set
     self.n_template_x_user = round(occ * probe / 100)
     # per ogni utente
     for i, val in enumerate(target):
         name = cfs[countUser]
         norm_template = self.get_normalized_template(i, data)
         lbp = LBP.Local_Binary_Pattern(1, 8, norm_template)
         # se il numero del template e' minore del numero massimo di template destinati alla gallery
         # e il numero di utenti rientra negli utenti che sono nella gallery, allora inserisco il template nella
         # gallery
         if (countTemp < occ - self.n_template_x_user
                 or occ == 1) and countUser < num_user - pn_user:
             gallery_data.append(norm_template)
             gallery_target.append(name)
             histogram_gallery_data.append(
                 lbp.createHistogram(lbp.compute_lbp()))
         else:
             # se lo inserisco nel probe set, controllo se l'utente e' nella gallery o no
             if countUser < num_user - pn_user:
                 pg_data.append(norm_template)
                 pg_target.append(name)
                 histogram_pg_data.append(
                     lbp.createHistogram(lbp.compute_lbp()))
             else:
                 pn_data.append(norm_template)
                 pn_target.append(name)
                 histogram_pn_data.append(
                     lbp.createHistogram(lbp.compute_lbp()))
         countTemp += 1
         # se ho finito i template dell'utente, passo all'utente successivo
         if countTemp == occ:
             countTemp = 0
             countUser += 1
     return gallery_data, gallery_target, pn_data, pn_target, pg_data, pg_target, histogram_gallery_data, histogram_pg_data, histogram_pn_data
예제 #5
0
    def microTextureVideo(self, pathVid):
        cap = cv2.VideoCapture(pathVid)
        val = False

        # andiamo a prendere un frame e lo convertiamo in scala di grigi.
        while True:
            ret, frame = cap.read()
            try:
                vis = frame.copy()
            except Exception as e:
                print(str(e))
                break

            # convertiamo in scala di grigi.
            gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
            # effettuiamo il ritaglio del viso
            crop = detect_face(gray, vis)

            # qui effettuiamo la conversione dell'immagine croppata in LBP
            if crop is not None:
                myLBP = LBP.Local_Binary_Pattern(1, 8, crop)
            else:
                continue
            new_img = myLBP.compute_lbp()
            # creiamo l'histogram dell'immagine calcolata in lpb
            hist = myLBP.createHistogram(new_img)

            # Andiamo a prendere il modello trained e salvato.
            with open('modelSVM.pkl', 'rb') as f:
                clf = pickle.load(f)

            hist = hist.reshape(1, -1)
            # attraverso il classificatore che abbiamo recuperato, ci facciamo dire se l'immagine è reale oppure no
            value = (clf.predict(hist))
            print(value)
            if value == 0:
                print("REAL")
                val = True
                break
            else:
                print("FAKE")
                val = False
                break

        cap.release()
        cv2.destroyAllWindows()
        return val