Spaces:
Sleeping
Sleeping
from PIL import Image | |
import numpy as np | |
def render(Session,input_name,output_name,FacesEmbedding,results,FaceImage,persons): | |
res = results.face_landmarks[0] | |
x_=int(res[145].x*FaceImage.shape[1]) | |
y_=int(res[145].y*FaceImage.shape[0]) | |
x2_=int(res[374].x*FaceImage.shape[1]) | |
y2_=int(res[374].y*FaceImage.shape[0]) | |
w=np.sqrt((x_-x2_)**2+(y_-y2_)**2) | |
W=6.3 | |
f = 840 | |
d = (W * f) / w | |
x=int(res[356].x*FaceImage.shape[1]) | |
y=int(res[152].y*FaceImage.shape[0]) | |
x2=int(res[162].x*FaceImage.shape[1]) | |
y2=int(res[338].y*FaceImage.shape[0]) | |
if x<FaceImage.shape[1]-10: | |
x+=10 | |
if y>FaceImage.shape[0]-10: | |
y+=10 | |
if x2>10: | |
x2-=10 | |
if y2>10: | |
y2-=10 | |
modelimg=FaceImage[np.abs(y2):np.abs(y),np.abs(x2):np.abs(x)] | |
if modelimg.size<9: | |
return x_,y_,x2_,y2,"Image Size is Zero ",d | |
modelimg=np.array(Image.fromarray(modelimg.astype("uint8")).resize((224,224))) | |
modelimg=modelimg/255 | |
distances=[] | |
for index,name in enumerate(persons): | |
output=np.squeeze(Session.run([output_name],{f"{input_name}":np.expand_dims(modelimg,axis=0).astype(np.float16)})[0]) | |
personimpeding=FacesEmbedding[name].values | |
distance=np.sum(np.power(output-personimpeding,2)) | |
distances.append(distance) | |
name=persons[np.argmin(distances)] | |
distance=distances[np.argmin(distances)] | |
if distance <0.3: | |
return x_,y_,x2_,y2,name,d | |
else: | |
return x_,y_,x2_,y2,"UnKnow",d | |