Shafeek Saleem
ssf
8345b1c
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