
    >|he                     .   d dl mZ d dlZd dlZd dlZd dlmZmZ d dl	m
Z
 d dlmZ d dlmZ  ed      Z ej                          Zed	k(  rd d
lmZmZ d dlmZmZmZmZmZmZ nd d
lmZmZ d dlmZmZmZmZmZmZ  G d de      ZdefdZ	 ddefdZ y)    )ListN)package_utilsfolder_utils)verification)FacialRecognition)Loggerzbasemodels.VGGFace)module   )Model
Sequential)Convolution2DZeroPadding2DMaxPooling2DFlattenDropout
Activationc                   @    e Zd ZdZd Zdej                  dee   fdZ	y)VggFaceClientz
    VGG-Face model class
    c                 L    t               | _        d| _        d| _        d| _        y )NzVGG-Face)   r      )
load_modelmodel
model_nameinput_shapeoutput_shape)selfs    Z/var/www/html/test/engine/venv/lib/python3.12/site-packages/deepface/basemodels/VGGFace.py__init__zVggFaceClient.__init__,   s"    \
$%     imgreturnc                     | j                  |d      j                         d   j                         }t        j                  |      }|j                         S )z
        find embeddings with VGG-Face model
        Args:
            img (np.ndarray): pre-loaded image in BGR
        Returns
            embeddings (list): multi-dimensional vector
        F)trainingr   )r   numpytolistr   l2_normalize)r   r!   	embeddings      r   find_embeddingszVggFaceClient.find_embeddings2   sL     JJsUJ399;A>EEG	 --i8	!!r    N)
__name__
__module____qualname____doc__r   npndarrayr   floatr)    r    r   r   r   '   s'    !"2:: "$u+ "r    r   r"   c                  D   t               } | j                  t        dd             | j                  t        ddd             | j                  t        d             | j                  t        ddd             | j                  t	        dd	             | j                  t        d             | j                  t        d
dd             | j                  t        d             | j                  t        d
dd             | j                  t	        dd	             | j                  t        d             | j                  t        ddd             | j                  t        d             | j                  t        ddd             | j                  t        d             | j                  t        ddd             | j                  t	        dd	             | j                  t        d             | j                  t        ddd             | j                  t        d             | j                  t        ddd             | j                  t        d             | j                  t        ddd             | j                  t	        dd	             | j                  t        d             | j                  t        ddd             | j                  t        d             | j                  t        ddd             | j                  t        d             | j                  t        ddd             | j                  t	        dd	             | j                  t        ddd             | j                  t        d             | j                  t        ddd             | j                  t        d             | j                  t        dd             | j                  t                      | j                  t        d             | S )z
    Base model of VGG-Face being used for classification - not to find embeddings
    Returns:
        model (Sequential): model was trained to classify 2622 identities
    )r
   r
   )r   r      )r   @   )r3   r3   relu)
activation)   r7   )strides      i   r   )   r;   g      ?i>
  softmax)r   addr   r   r   r   r   r   )r   s    r   
base_modelr>   C   s    LE	IImF>?	IImB6:;	IImF#$	IImB6:;	IIl6623	IImF#$	IImCF;<	IImF#$	IImCF;<	IIl6623	IImF#$	IImCF;<	IImF#$	IImCF;<	IImF#$	IImCF;<	IIl6623	IImF#$	IImCF;<	IImF#$	IImCF;<	IImF#$	IImCF;<	IIl6623	IImF#$	IImCF;<	IImF#$	IImCF;<	IImF#$	IImCF;<	IIl6623	IImD&V<=	IIgcl	IImD&V<=	IIgcl	IImD&)*	IIgi	IIj#$Lr    c                    t               }t        j                         }|dz   }t        j                  j                  |      dk7  r-t        j                  d       t        j                  | |d       |j                  |       t               } t               |j                  d   j                        }t        |j                   |      }|S )z
    Final VGG-Face model being used for finding embeddings
    Returns:
        model (Model): returning 4096 dimensional vectors
    z&/.deepface/weights/vgg_face_weights.h5Tz)vgg_face_weights.h5 will be downloaded...F)quiet)inputsoutputs)r>   r   get_deepface_homeospathisfileloggerinfogdowndownloadload_weightsr   r   layersoutputr   input)urlr   homerN   base_model_outputvgg_face_descriptors         r   r   r   y   s     LE))+D<<F	ww~~f%?@sF%0	v #!	%,,r"2"9"9:
  u{{<MNr    )zVhttps://github.com/serengil/deepface_models/releases/download/v1.0/vgg_face_weights.h5)!typingr   rE   rJ   r%   r.   deepface.commonsr   r   deepface.modulesr   !deepface.models.FacialRecognitionr   deepface.commons.loggerr   rH   get_tf_major_version
tf_versionkeras.modelsr   r   keras.layersr   r   r   r   r   r   tensorflow.keras.modelstensorflow.keras.layersr   r>   r   r1   r    r   <module>r_      s     	   8 ) ? *	+	, 0]//1
?.   : "% "83J 3n 	a#
#r    