
    >|hE                     v   d dl mZ d dl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  ed      Z e	j                          Zedk(  r/d d	lmZ d d
lmZmZmZmZ d dlmZmZmZmZmZ d dlmZmZ d dl m!Z" n.d d	l#mZ d d
l$mZmZmZmZ d dl$mZmZmZmZmZ d dl$mZmZ d dl%m!Z"  G d de      Z&	 ddefdZ'y)    )ListN)package_utilsfolder_utils)Logger)FacialRecognitionzbasemodels.OpenFace)module   )Model)Conv2DZeroPadding2DInputconcatenate)Dense
ActivationLambdaFlattenBatchNormalization)MaxPooling2DAveragePooling2D)backendc                   @    e Zd ZdZd Zdej                  dee   fdZ	y)OpenFaceClientz
    OpenFace model class
    c                 L    t               | _        d| _        d| _        d| _        y )NOpenFace)`   r      )
load_modelmodel
model_nameinput_shapeoutput_shape)selfs    [/var/www/html/test/engine/venv/lib/python3.12/site-packages/deepface/basemodels/OpenFace.py__init__zOpenFaceClient.__init__$   s"    \
$#    imgreturnc                 f    | j                  |d      j                         d   j                         S )z
        find embeddings with OpenFace model
        Args:
            img (np.ndarray): pre-loaded image in BGR
        Returns
            embeddings (list): multi-dimensional vector
        F)trainingr   )r   numpytolist)r"   r&   s     r#   find_embeddingszOpenFaceClient.find_embeddings*   s.     zz#z.446q9@@BBr%   N)
__name__
__module____qualname____doc__r$   npndarrayr   floatr,    r%   r#   r   r      s*     
C2:: 
C$u+ 
Cr%   r   r'   c                    t        d      } t        dd      |      } t        dddd	      |      } t        d
dd      |      } t	        d      |      } t        d      |      } t        d
d      |      } t        d d      |      } t        ddd      |      } t        d
dd      |      } t	        d      |      } t        d      |      } t        ddd      |      } t        d
dd      |      } t	        d      |      } t        d d      |      } t        d      |      } t        d
d      |      } t        ddd      |      } t        d
dd      |      } t	        d      |      } t        d      |      } t        d dd!      |      } t        d
dd"      |      } t	        d      |      } t        d#dd$      |      } t        d
dd%      |      } t	        d      |      } t        d      |      } t        d&d'd(      |      } t        d
dd)      |      } t	        d      |      } t        d
d      |      } t        d&dd*      |      } t        d
dd+      |      } t	        d      |      } t        d,      |      } t        ddd-      |      } t        d
dd.      |      } t	        d      |      }t        ||||gd
/      } t        ddd0      |      } t        d
dd1      |      } t	        d      |      } t        d      |      } t        d dd2      |      } t        d
dd3      |      } t	        d      |      } t        d&dd4      |      }	 t        d
dd5      |	      }	 t	        d      |	      }	 t        d      |	      }	 t        dd'd6      |	      }	 t        d
dd7      |	      }	 t	        d      |	      }	 t        d8 d9      |      }
 t        dd      |
      }
 t        d: d;      |
      }
 t        d< d=      |
      }
 t        ddd>      |
      }
 t        d
dd?      |
      }
 t	        d      |
      }
 t        d@      |
      }
 t        dddA      |      } t        d
ddB      |      } t	        d      |      }t        ||	|
|gd
/      } t        d dddC	      |      } t        d
ddD      |      } t	        d      |      } t        d      |      } t        dEdddF	      |      } t        d
ddG      |      } t	        d      |      } t        d&dddH	      |      } t        d
ddI      |      } t	        d      |      } t        d      |      } t        dd'ddJ	      |      } t        d
ddK      |      } t	        d      |      } t        d
d      |      } t        dL      |      }t        |||gd
/      } t        ddddM	      |      } t        d
ddN      |      } t	        d      |      } t        d      |      } t        ddddO	      |      } t        d
ddP      |      } t	        d      |      } t        d&dddQ	      |      } t        d
ddR      |      } t	        d      |      } t        d      |      } t        dd'ddS	      |      } t        d
ddT      |      } t	        d      |      } t        dU dV      |      } t        dd      |      } t        dW dX      |      } t        dY dZ      |      } t        d ddd[	      |      } t        d
dd\      |      } t	        d      |      } t        d      |      } t        dEddd]	      |      } t        d
dd^      |      } t	        d      |      }t        ||||gd
/      } t        d_ddd`	      |      } t        d
dda      |      } t	        d      |      } t        d      |      } t        dEdddb	      |      } t        d
ddc      |      } t	        d      |      } t        ddddd	      |      } t        d
dde      |      } t	        d      |      } t        d      |      } t        d d'ddf	      |      } t        d
ddg      |      } t	        d      |      } t        d
d      |      } t        dL      |      }t        |||gd
/      } t        ddddh	      |      } t        d
ddi      |      } t	        d      |      } t        d      |      } t        djdddk	      |      } t        d
ddl      |      } t	        d      |      } t        dm dn      |      } t        dd      |      } t        do dp      |      } t        dq dr      |      } t        dddds	      |      } t        d
ddt      |      } t	        d      |      } t        d      |      } t        dEdddu	      |      } t        d
ddv      |      } t	        d      |      }t        |||gd
/      } t        ddddw	      |      } t        d
ddx      |      } t	        d      |      } t        d      |      } t        djdddy	      |      } t        d
ddz      |      } t	        d      |      } t        d
d      |      } t        dddd{	      |      } t        d
dd|      |      } t	        d      |      } t        d      |      } t        dEddd}	      |      }  t        d
dd~      |       }  t	        d      |       } t        ||| gd
/      }! t        dd      |!      }" t               |"      }# t        d d      |#      }$ t        d d      |$      }%t        |g|%      }&t        j                         }'t        j                  j!                  |'dz         dk7  r2t"        j%                  d       |'dz   }(t'        j(                  | |(d       |&j+                  |'dz          |&S )zd
    Consturct OpenFace model, download its weights and load
    Returns:
        model (Model)
    )r   r      )shape)r6   r6   )paddingr    @   )   r:   )   r;   conv1)stridesnamer6   gh㈵>bn1)axisepsilonr>   relu)r	   r	   )r8   r;   )	pool_sizer=   c                 F    t         j                  j                  | dd      S Ng-C6?g      ?)alphabetatfnnlrnxs    r#   <lambda>zload_model.<locals>.<lambda>G       1Dt< r%   lrn_1)r>   conv2bn2   conv3bn3c                 F    t         j                  j                  | dd      S rE   rH   rL   s    r#   rN   zload_model.<locals>.<lambda>O   rO   r%   lrn_2r   inception_3a_3x3_conv1inception_3a_3x3_bn1r   inception_3a_3x3_conv2inception_3a_3x3_bn2   inception_3a_5x5_conv1inception_3a_5x5_bn1    )   r`   inception_3a_5x5_conv2inception_3a_5x5_bn2inception_3a_pool_convinception_3a_pool_bn)r6      re   inception_3a_1x1_convinception_3a_1x1_bnr@   inception_3b_3x3_conv1inception_3b_3x3_bn1inception_3b_3x3_conv2inception_3b_3x3_bn2inception_3b_5x5_conv1inception_3b_5x5_bn1inception_3b_5x5_conv2inception_3b_5x5_bn2c                     | dz  S Nr;   r4   rL   s    r#   rN   zload_model.<locals>.<lambda>   
    A r%   	power2_3bc                     | dz  S N	   r4   rL   s    r#   rN   zload_model.<locals>.<lambda>   
    Q r%   mult9_3bc                 ,    t        j                  |       S NKsqrtrL   s    r#   rN   zload_model.<locals>.<lambda>        r%   sqrt_3binception_3b_pool_convinception_3b_pool_bn)rf   rf   inception_3b_1x1_convinception_3b_1x1_bninception_3c_3x3_conv1inception_3c_3x3_bn1   inception_3c_3x3_conv2inception_3c_3x3_bn2inception_3c_5x5_conv1inception_3c_5x5_bn1inception_3c_5x5_conv2inception_3c_5x5_bn2)r   r	   r   inception_4a_3x3_conv1inception_4a_3x3_bn1inception_4a_3x3_conv2inception_4a_3x3_bn2inception_4a_5x5_conv1inception_4a_5x5_bn1inception_4a_5x5_conv2inception_4a_5x5_bn2c                     | dz  S rs   r4   rL   s    r#   rN   zload_model.<locals>.<lambda>   rt   r%   	power2_4ac                     | dz  S rw   r4   rL   s    r#   rN   zload_model.<locals>.<lambda>   ry   r%   mult9_4ac                 ,    t        j                  |       S r|   r}   rL   s    r#   rN   zload_model.<locals>.<lambda>   r   r%   sqrt_4ainception_4a_pool_convinception_4a_pool_bninception_4a_1x1_convinception_4a_1x1_bn   inception_4e_3x3_conv1inception_4e_3x3_bn1inception_4e_3x3_conv2inception_4e_3x3_bn2inception_4e_5x5_conv1inception_4e_5x5_bn1inception_4e_5x5_conv2inception_4e_5x5_bn2inception_5a_3x3_conv1inception_5a_3x3_bn1i  inception_5a_3x3_conv2inception_5a_3x3_bn2c                     | dz  S rs   r4   rL   s    r#   rN   zload_model.<locals>.<lambda>D  rt   r%   	power2_5ac                     | dz  S rw   r4   rL   s    r#   rN   zload_model.<locals>.<lambda>F  ry   r%   mult9_5ac                 ,    t        j                  |       S r|   r}   rL   s    r#   rN   zload_model.<locals>.<lambda>G  r   r%   sqrt_5ainception_5a_pool_convinception_5a_pool_bninception_5a_1x1_convinception_5a_1x1_bninception_5b_3x3_conv1inception_5b_3x3_bn1inception_5b_3x3_conv2inception_5b_3x3_bn2inception_5b_pool_convinception_5b_pool_bninception_5b_1x1_convinception_5b_1x1_bndense_layerc                 0    t        j                  | d      S )Nr	   ri   )r~   l2_normalizerL   s    r#   rN   zload_model.<locals>.<lambda>  s    !.."; r%   
norm_layer)inputsoutputsz&/.deepface/weights/openface_weights.h5Tz)openface_weights.h5 will be downloaded...F)quiet)r   r   r   r   r   r   r   r   r   r   r   r
   r   get_deepface_homeospathisfileloggerinfogdowndownloadload_weights))urlmyInputrM   inception_3a_3x3inception_3a_5x5inception_3a_poolinception_3a_1x1inception_3ainception_3b_3x3inception_3b_5x5inception_3b_poolinception_3b_1x1inception_3binception_3c_3x3inception_3c_5x5inception_3c_poolinception_3cinception_4a_3x3inception_4a_5x5inception_4a_poolinception_4a_1x1inception_4ainception_4e_3x3inception_4e_5x5inception_4e_poolinception_4einception_5a_3x3inception_5a_poolinception_5a_1x1inception_5ainception_5b_3x3inception_5b_poolinception_5b_1x1inception_5bav_poolreshape_layerr   r   r   homeoutputs)                                            r#   r   r   7   s    +&G>f+>wGA8r668;A?7?BA
61A%f%a(A,q!,Q/AK<7KANA(r6(+A?7?BA
61A%f%a(A)sF)!,A?7?BA
61AK<7KANA%f%a(A,q!,Q/A Ivb&/GHK_)q'H^_ *z&)*:;4}V45EFIvc60HIJZ[_)q'H^_ *z&)*:;Hvb&/GHK_)q'H^_ *z&)*:;4}V45EFHvb&/GHIYZ_)q'H^_ *z&)*:;<q!<Q?Ir60HIJ[\`*7I_` +
6*+<=?.>?@QRGvb&/FGJ^)q'H]^ *z&)*:;	+->@PQXYL
 Ivb&/GHV_)q'H^_ *z&)*:;4}V45EFIvc60HIJZ[_)q'H^_ *z&)*:;Hvb&/GHV_)q'H^_ *z&)*:;4}V45EFHvb&/GHIYZ_)q'H^_ *z&)*:;@~K@NJ(66JK\]@Z@ARSC2CDUVIr60HIJ[\`*7I_` +
6*+<=5f56GHGvb&/FGU^)q'H]^ *z&)*:;	+->@PQXYL
 Zvc66@XY `)q'H^_ *z&)*:;4}V45EF^vc66@]^)&A *z&)*:;Xvb&&?WX `)q'H^_ *z&)*:;4}V45EF]vb&&?\])&A *z&)*:;<q!<\J?.>?@QR 02BDUV]^_L ^vb&&?\])&A *z&)*:;4}V45EF^vc66@]^)&A *z&)*:;Xvb&&?WX `)q'H^_ *z&)*:;4}V45EF]vb&&?\])&A *z&)*:;@~K@NJ(66JK\]@Z@ARSC2CDUV_sFFA^_*&A +
6*+<=5f56GH]vc66@\] d)q'Hbc *z&)*:;	+->@PQXYL
 _vc66@]^)&A *z&)*:;4}V45EF^vc66@]^)&A *z&)*:;]vb&&?\])&A *z&)*:;4}V45EF^vc66@]^)&A *z&)*:;<q!<\J?.>?@QR 02BDUV]^_L ^vb&&?\])&A *z&)*:;4}V45EF^vc66@]^)&A *z&)*:;@~K@NJ(66JK\]@Z@ARSC2CDUV^r66@]^*&A +
6*+<=5f56GH]vc66@\] d)q'Hbc *z&)*:; 02CEUV]^_L ^vb&&?\])&A *z&)*:;4}V45EF^vc66@]^)&A *z&)*:;<q!<\J^r66@]^*&A +
6*+<=5f56GH]vc66@\] d)q'Hbc *z&)*:; 02CEUV]^_L@@NGGIg&M0%-0?KO;,OP[\J 'J7E ))+D	ww~~dEEF$N?@@@sF%0 
tFFG Lr%   )zVhttps://github.com/serengil/deepface_models/releases/download/v1.0/openface_weights.h5)(typingr   r   r   
tensorflowrI   r*   r1   deepface.commonsr   r   deepface.commons.loggerr   !deepface.models.FacialRecognitionr   r   get_tf_major_version
tf_versionkeras.modelsr
   keras.layersr   r   r   r   r   r   r   r   r   r   r   kerasr   r~   tensorflow.keras.modelstensorflow.keras.layerstensorflow.kerasr   r   r4   r%   r#   <module>r     s     	    8 * ?	,	-/]//1
?"FFSS;"-QQ^^F-C& C2 	ad
dr%   