File size: 1,539 Bytes
16eecd4
 
 
 
 
 
1717673
0cba43f
f16075a
 
16eecd4
c5dfc36
16eecd4
 
 
 
 
 
 
8345b1c
16eecd4
 
8345b1c
dd8073b
 
 
8345b1c
 
 
 
 
 
16eecd4
 
 
1
2
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
from utils.database import get_database
import os
import face_recognition
import cv2
import numpy as np
from PIL import Image
import streamlit as st

PKL_PATH = 'dataset/database.pkl'

def recognize(image,tolerance):
    database = get_database(PKL_PATH)
    known_encoding = [database[id]['encoding'] for id in database.keys()]
    name = 'Unknown'
    face_id = 'Unknown'
    face_locations = face_recognition.face_locations(image)
    face_encodings = face_recognition.face_encodings(image,face_locations)
    for (top,right,bottom,left), face_encoding in zip(face_locations,face_encodings):
        matches = face_recognition.compare_faces(known_encoding,face_encoding,tolerance=tolerance)
        distances = face_recognition.face_distance(known_encoding,face_encoding)
        name = 'Unknown'
        face_id = 'Unknown'
        distance = 100000
        for i in range(len(matches)):
            if matches[i].all():
                match_index = i
                temp_dist = round(np.sum(distances[match_index]),2)
                if temp_dist < distance:
                    distance = temp_dist
                    name = database[match_index]['name']
                    face_id = database[match_index]['face_id'].split("_")[1]
                    # cv2.putText(image,str(distance),(left,top-30),cv2.FONT_HERSHEY_SIMPLEX,0.75,(0,255,0),2)
        cv2.rectangle(image,(left,top),(right,bottom),(0,255,0),2)
        cv2.putText(image,name,(left,top-10),cv2.FONT_HERSHEY_SIMPLEX,0.75,(0,255,0),2)
    return image, name, face_id