
    "cwh;j                        S SK JrJrJr  S SKJr  SSKJrJrJ	r	J
r
  S SKJr  S SKJr  S SKrS SKrS SKrS SKr\R(                  R+                  S5         \R,                  R/                  S 5        S S	KJr  S SKrS S
KJrJr  S SKrS SK r S SK!J"r"  S SK#J$r$  S SK%J&r&  S SK'J(r(  S SK)J*r*  S SK+J,r,  S SK-r-S SK.J/r/  S SK0J1r1  SSKJ2r2  S SK3J4r4  S SK5r5S SK6r6 S SK7r7Sr8\$" SS/S9r:\:Rw                  S SS9  \Rx                  " SSS9r=S r>S r?Sr@S qA\5R                  " 5       rCS  rD " S! S"\R                  5      rFS0S# jrGS$ rHS% rI\(S0S& j5       rJS' rKS( rLS) rMS* rNS+ rOS, rP\(S- 5       rQS. rRS/ rSg! \ a     GNf = f! \9 a    Sr8 Nf = f)1    )renderredirectget_object_or_404)messages   )User	UserImage
AttendanceEvent)forms)settingsNF)timezone)HttpResponseJsonResponse)ContentFile)FaceAnalysis)cosine_similarity)csrf_exempt)logout)IntegrityError)cache)cache_event_embeddings)	EventForm)ValidationErrorT	buffalo_sCPUExecutionProvider)name	providers)  r   )ctx_iddet_sizeg       @)   r"   )	clipLimittileGridSizec                 "   [         R                  " U [         R                  5      n[         R                  " U5      u  p#n[        R                  U5      n[         R                  " XSU45      n[         R                  " U[         R                  5      $ N)cv2cvtColorCOLOR_BGR2LABsplitclaheapplymergeCOLOR_LAB2BGR)imglablabcllimgs          DD:\c drive back up\facial_attendance_system-main\attendance\views.pyapply_claher7   -   s_    
,,sC--
.CiinGA!	QB99bQZ D<<c//00    c                 F    [        U 5      n [        R                  " U S5      $ )N)p   r:   )r7   r'   resize)r/   s    r6   preprocess_imager<   4   s    
c
C::c:&&r8   c           
         / nUR                  [        R                  " U S5      5        U R                  S S u  p#US-  US-  4nS HN  n[        R                  " XES5      nUR                  [        R
                  " XX24[        R                  S95        MP     UR                  [        R                  " U SSS95        UR                  [        R                  " U S	S
S95        UR                  [        R                  " U SS5      5        U$ )Nr      )i
   g      ?)
borderModeg?   )alphabetag?i)   rD   r   )	appendr'   flipshapegetRotationMatrix2D
warpAffineBORDER_REFLECTconvertScaleAbsGaussianBlur)r/   	augmentedhwcenterangleMs          r6   augment_imagerS   ?   s    ISXXc1%&YYr]FQ1fa1fF##F373CUCUVW  S((CbABS((CcBCS%%c6156r8   c                   <   ^  \ rS rSr " S S5      rU 4S jrSrU =r$ )UserRegistrationFormP   c                        \ rS rSr\r/ SQrSrg)UserRegistrationForm.MetaQ   )
first_name	last_namemobile_numbercompanyemail N)__name__
__module____qualname____firstlineno__r   modelfields__static_attributes__r_   r8   r6   MetarX   Q   s    Qr8   rg   c                    > [         TU ]  " U0 UD6  U R                   H7  nU R                  U   R                  R                  R                  SS05        M9     g )Nclasszform-control)super__init__re   widgetattrsupdate)selfargskwargsfield	__class__s       r6   rk   UserRegistrationForm.__init__U   sK    $)&)[[EKK%%++22G^3LM !r8   r_   )r`   ra   rb   rc   rg   rk   rf   __classcell__)rs   s   @r6   rU   rU   P   s    R RN Nr8   rU   c                 0   [         R                  " [        5      nU R                  R	                  SS5      R                  5       nSU;   a  SnOSU;   d  SU;   d  SU;   a  SnOSnS nUb  [        [        US9n[        S	U S
U SU 35        Ub  XR                  S'   Ub;  UR                  5       (       d&  [        R                  " U S5        [        U SSU05      $ U R                  S:X  Ga  [        U R                   U R"                  5      nU R"                  R%                  S5      n[&        R(                  " U R                   R	                  SS5      5      nS n	UR*                  R	                  SS5      R-                  5       (       a  UR*                  R	                  SS5      R-                  5       (       a^  UR*                  R	                  SS5      R-                  5       (       a/  UR*                  R	                  SS5      R-                  5       (       d  Sn	OlUR*                  R	                  SS5      R/                  5       (       a)  [1        UR*                  R	                  SS5      5      S:X  d  Sn	O[1        U5      S:w  a  Sn	U	(       a  [        SU	 35        [        U SXeU	S.5      $ UR3                  5       (       Ga  US    n
U
R5                  S!5      u  pUR5                  S"5      S#   nUR6                  S    S$UR6                  S    S%U 3n[8        R:                  R=                  [>        R@                  U5      n[C        US&5       nURE                  [F        RH                  " U5      5        S S S 5        [J        RL                  " U5      n[N        RN                  " 5       n[P        R	                  [S        U5      5      n[N        RN                  " 5       n[        S'U(       a  [1        U5      OS  S(UU-
  S) S*35        S nU(       Gao  US    RT                  RW                  S+S#5      n[X        RZ                  R]                  S,5      R_                  5        GH  nU(       aB  UR`                  Rb                  Re                  URf                  S9Ri                  5       (       d  MM  [N        RN                  " 5       n[j        Rl                  " [&        R(                  " URn                  5      5      RW                  S+S#5      n[q        UU5      S    S    n[N        RN                  " 5       n[        S-UU-
  S) S.35        US/:  d  M  UR`                  nUn[        S0URr                   S1URt                   S2U S335          O   [8        Rv                  " U5        U(       a5  [        U SUUW[y        [{        W5      S5      S4[>        R|                  S5.5      $ Ub  [~        RZ                  Re                  UR6                  S   US69R                  5       nU(       a&  [        R                  " U S75        [        U SXeS8.5      $ UR                  5       nURb                  R                  U5        OUR                  5       nS n[        U5       GH  u  n n
U
R5                  S!5      u  pUR5                  S"5      S#   nURr                   S$URt                   S$URf                   S9U S+-    S:U 3	n[8        R:                  R=                  [>        R@                  U5      n![C        U!S&5       nURE                  [F        RH                  " U5      5        S S S 5        [J        RL                  " U!5      nU/[        U5      -   n"[        U"5       GH  u  n#n$[N        RN                  " 5       n[P        R	                  [S        U$5      5      n[N        RN                  " 5       n[        S;U  S<U# S=U(       a  [1        U5      OS  S>UU-
  S) S*3	5        U(       d  M  US    RT                  n%U#S :X  a  [X        RZ                  R                  UU[&        R                  " U%R                  5       5      US?9  [        S@U SA[1        [&        R                  " U%R                  5       5      5       35        O[X        RZ                  R                  US [&        R                  " U%R                  5       5      US?9  [        SBURf                   SA[1        [&        R                  " U%R                  5       5      5       35        US+-  nGM     GM     U(       ay  [        R                  " U SCURr                   S1URt                   SDU SE35        U(       a2  URf                  U R                  S'   [        U S[        5       US4SF.5      $ [        SG5      $ UR                  5         [        U SUUSHS.5      $ [        R                  " U SI5        O
[        5       n[        U SXeS8.5      $ ! , (       d  f       GN= f! , (       d  f       GN= f)JNHTTP_USER_AGENT androidiphoneipadipoddesktopidz[register_user] event_id: 	, event: , device_type: last_event_idz&Registration for this event is closed.attendance/event_closed.htmleventPOSTimagescaptured_imagesz[]rZ   r[   r\   r^   zFAll fields (First Name, Last Name, Mobile Number, Email) are required.r?   z0Mobile Number must be exactly a 10-digit number.rD   z.Please capture exactly 3 photos as instructed.z[DEBUG] Registration error: zattendance/register.html)formr   registration_errorr   ;base64,/_z_temp_check.zwb+z+[DEBUG] Registration: face_app.get() found z faces in temp image. Took .3fs.r   userz?[PROFILE] Registration duplicate check: cosine_similarity took 	 seconds.皙?zDUPLICATE DETECTED:  z (sim=)T)r   duplicate_userduplicate_imageduplicate_similarityshow_duplicate	MEDIA_URL)r^   eventsz<A user with this email is already registered for this event.)r   r   _webcam_.z1[DEBUG] Registration: face_app.get() for aug_img -z found z faces. Took )r   
image_pathencodingr   z[DEBUG] Saved UserImage: z, encoding length: z.[DEBUG] Saved augmentation embedding for user zUser 'z' registered with z* valid photo(s) (including augmentations).)r   r   show_mark_attendanceregister_userz$Face not detected. Please try again.z-Please capture exactly 1 photo as instructed.)Klogging	getLoggerr`   METAgetlowerr   r   printsessionis_upcomingr   errorr   methodrU   r   FILESgetlistjsonloadsdatastripisdigitlenis_validr*   cleaned_dataospathjoinr   
MEDIA_ROOTopenwritebase64	b64decoder'   imreadtimeface_appr<   	embeddingreshaper	   objectsselect_relatedallr   r   filterr   existsnparrayr   r   rZ   r[   removeroundfloatr   r   firstsaveadd	enumeraterS   createdumpstolistsuccessr   delete)&requestevent_idlogger
user_agentreg_device_typer   r   filesr   r   data_urlformatimgstrextfilenametemp_img_pathdestinationr/   t0facest1r   new_embedding
user_imaget2existing_embeddingsimt3r   existing_userr   savediimg_pathall_imgsidxaug_imgr   s&                                         r6   r   r   [   sk	   x(F!!"3R8>>@JJ#	Z	6Z#76Z;O"#E!%H5	&xj	%P_O`
ab+3(  ""NN7$LM'#AGUCSTT~~#GLL'--@%%h/**W\\%5%56G%NO!yy}}\2.4466diimmKY[>\>b>b>d>dlplululyly  {J  LN  mO  mU  mU  mW  mW  _c  _h  _h  _l  _l  mt  vx  _y  _  _  _A  _A!i))--4<<>>3tyy}}UdfhGiCjnpCp!S!Q&!Q01C0DEF'#=  uG  @H  I  I==??&q)H%^^J7NF,,s#B'C++L9:!D<M<Mk<Z;[[ghkglmHGGLL)<)<hGMmU+{!!&"2"26":; ,**]+CBLL!1#!67EB?eE
YZ?[[vwyz|w|  ~A  wB  BD  E  F!N %a 2 2 : :1b A"+"3"3"B"B6"J"N"N"PJZ__%;%;%B%Behh%B%O%V%V%X%X B)+$**Z=P=P2Q)R)Z)Z[\^`)a&+M;MNqQRSTCB[\^_a\abe[ffopqSy)3*4 4^5N5N4OqQ_QiQiPjjpqtpuuvwx #Q IIm$g'A"&4'6,1%*a,@&*!)!3!3D     $ 3 3$:K:KG:T]b 3 c i i k NN7.jl!'+EPTGeffyy{&yy{E(98!)
!;ll3'+"oo.a/?q	RSTURUQVVWX[W\]77<<(;(;XF(E*k%%f&6&6v&>? +jj*5=#55$-h$7LCB$LL)9')BCEBMaSPQRUQVV]lq^abg^hwx]y  zG  HJ  KM  HM  NQ  GR  RT  U  Vu$)!H$6$6	!8%--44$8^b^h^hiriyiyi{^|  EJ4  K!$=hZGZ[^_c_i_ijsjzjzj|_}[~Z  #A  B%--44$4Z^ZdZdeneueuewZx  AF4  G!$RSWSZSZR[[norsws}s}  H  O  O  Q  tR  pS  oT  #U  V
 %8  :.   F4??2C1T^^DTTfglfm  nX  +Y  Z7<xxGOOO4!'+E 4 6!&04H   $O44g'A "*PD   NN7$ST#%'57UVVy ,+h +*s   	&g4&h4
h
h	c                     [         R                  R                  S5      R                  S5      S S n[	        U SSU05      $ )Nr   
-timestamp   attendance/mark_attendance.htmllogsr
   r   r   order_byr   r   r   s     r6   mark_attendancer      s>    ,,V4==lKCRPD'<vtnMMr8   c                    XR                   S'   [        [        US9nUR                  5       (       d  [	        U SSU05      $ [
        R                  R                  US9R                  S5      R                  S5      S S n[	        U S	X2US
.5      $ )Nr   r~   r   r   )r   r   r   r   r   )r   r   r   )
r   r   r   r   r   r
   r   r   r   r   )r   r   r   r   s       r6   mark_attendance_for_eventr      s    '/OOO$e1Eg=?OPP$$5$1@@HQQR^_`cacdD'<tiq>rssr8   c                 P   U R                   S:X  Ga   [           [        S-  q[        [        -  S:w  a  [	        SSS.5      sS S S 5        $  S S S 5        [
        R                  " U R                  5      nUR                  S5      nUR                  SS	5      nS nS nUb@  [        R                  R                  US
9R                  5       nU(       a  UR                  OS n[        SU SU SU 35        U(       d  [	        SSS.5      $ [        R                   " U SU 3R#                  5       5      R%                  5       nSU 3n[&        R                  " U5      (       a  [	        SSS.5      $ [&        R(                  " USS5        UR+                  S5      u  pU	R+                  S5      S   n[,        R.                  " U
5      n[0        R2                  " U[0        R4                  5      n[6        R6                  " 5       n[8        R:                  " U[8        R<                  5      n[6        R6                  " 5       n[        SUU-
  S S35        [8        R>                  " US5      n[A        U5      n[6        R6                  " 5       n[B        R                  [E        U5      5      n[6        R6                  " 5       n[        SUU-
  S S35        U(       d  [	        SSS.5      $ U Vs/ s H  nURF                  RI                  SS5      PM!     nnU(       au  [&        R                  " SURJ                   S3S / 45      u  nnUb  U(       d?  [M        URJ                  5        [&        R                  " SURJ                   S3S / 45      u  nnGO2[N        R                  RQ                  5       n/ n/ nU H  n[6        R6                  " 5       n[0        RR                  " [
        R                  " URT                  5      5      RI                  SS5      n[6        R6                  " 5       n[        SURV                  RJ                   SUU-
  S S 35        URY                  U5        URY                  URV                  5        M     [        S![[        U5       S"[[        U5       S#35        U(       a  [0        R\                  " U5      OS nUb  U(       d  [        S$5        [	        SS%S.5      $ US&:X  a  S'nOUS(:X  a  S)nOS*nU GH   n[^        (       d  M  UR`                  S   S:  d  M&  URc                  S+5      n U [0        Rd                  Rg                  U SSS,9-  n URc                  S+5      n!U![0        Rd                  Rg                  U!SSS,9-  n![h        Rj                  " U R`                  S   5      n"U"Rm                  U 5        U"Ro                  U!S5      u  n#n$[q        U$S   S   5      n%[s        U#S   S   5      n&[        S-U&S 35        [        S.U& 35        U&U:  d  GM  UU%   n'[t        Rv                  " [t        Rx                  " 5       5      n(U(R{                  5       n)[|        R                  R                  U'S/US09R                  S15      R                  5       n*U*(       a   [t        Rv                  " U*R                  5      OS n+U+(       a  U+R{                  5       OS n,Sn-U+(       a	  U,U):X  a  Sn-O.[|        R                  R                  U'U)S/US29R                  5       n-U-(       a[  [	        SU'R                  S3-   U'R                  -   SU(       a  URJ                  OS UU'R                   S3U'R                   S43S5.5      s  $  [}        U'S/U(US69n.U.R                  5         U.R                  5         [	        SU'R                  S3-   U'R                  -   SU(       a  URJ                  OS UU'R                   S3U'R                   S73S5.5      s  $    [        S85        [	        SS%S.5      $ [	        SS:S.5      $ ! , (       d  f       GN= fs  snf ! [         aT  n/[	        SU'R                  S3-   U'R                  -   SU(       a  URJ                  OS U[        U/5      S5.5      s S n/A/s  $ S n/A/f[         a^    [	        SU'R                  S3-   U'R                  -   SU(       a  URJ                  OS UU'R                   S3U'R                   S43S5.5      s s  $ f = f! [         a$  n0[	        SS9[        U05       3S.5      s S n0A0$ S n0A0ff = f);Nr   r   r   FzFrame skipped for performance.r   message
image_datadevice_typer}   r~   z![ajax_mark_attendance] event_id: r   r   No image data received.r   attendance_request_z1Duplicate request detected. Please wait a moment.Tr   r   r   z-[PROFILE] AJAX attendance: cv2.imdecode took r   r      r  z/[PROFILE] AJAX attendance: face_app.get() took rx   event__embeddingsz9[DEBUG] AJAX attendance: loading user embedding for user z took r   z [DEBUG] AJAX attendance: loaded z users and z embeddings.zZ[DEBUG] AJAX attendance: No embeddings or users found. Returning 'No known face detected.'No known face detected.ry   gp=
ף?rz   r   g333333?float32)axiskeepdimsz[FAISS] Best similarity: z-[PROFILE] AJAX attendance: best similarity = login)r   
event_typer   r   )r   timestamp__dater  r   r   z& (Attendance already marked for today))r   r   already_markedr   
event_namer   )r   r  	timestampr   z - Attendance marked!z3[ALERT] No known face detected in multi-face frame!Error: Invalid request method.)Jr   attendance_lockattendance_frame_counter
FRAME_SKIPr   r   r   bodyr   r   r   r   r   r   r   hashlibmd5encode	hexdigestr   setr*   r   r   r   
frombufferuint8r   r'   imdecodeIMREAD_COLORr;   r7   r   r<   r   r   r   r   r	   r   r   r   r   rE   r   vstackfaiss_availablerG   astypelinalgnormfaissIndexFlatIPr   searchintr   r   	localtimenowdater
   r   r  r   rZ   r[   
full_cleanr   r   strr   	Exception)1r   r   r   r  r  r   r  request_hash	cache_keyr   r   r   	img_bytesnparrr   r/   r   r   r   r   facenew_embeddingsembeddings_npusersuser_images
embeddingsuit4embt5	thresholdr   xbxqindexDIbest_idxbest_simr   r,  todaylast_attendancelast_attendance_locallast_attendance_dater  
attendancevees1                                                    r6   ajax_mark_attendancerN     s9	    ~~p	S (A-(+j8A='EFf(gh != ! ::gll+D,/J((=)<KEJ#,,,9??A+0UZZd
5hZy_j^klm#B[$\]]";;*Qxj'A'H'H'JKUUWL-l^<Iyy###Bu$vwwIIiq)'--j9NF,,s#B'C((0IMM)RXX6EB,,uc&6&67CBA"R%IVW**S*-Cc"CBLL!1#!67EBCBrE#;iXY#"$EFFHMNdnn44Q;NN',yy6%((;1ORVXZQ['\$u (*5884+099vehhZ{5SVZ\^U_+`(M5'//335
%BB((4::bkk#:;CCArJCBUVXV]V]V`V`Uaaghjkmhmnqgrrtuv%%c*LL) & 8UKPST^P_O``lmn9C		* 5$Ers#B[$\]]i' 	(		!/"?}':':1'='A&--i8BbiinnRa$nGGB&--i8BbiinnRa$nGGB!--bhhqk:EIIbM <<A.DAq"1Q47|H$QqT!W~H5hs^DEI(TU9,$X&00@ #
*4*<*<*C*CZain*C*o*x*x  zF  +G  +M  +M  +Oap0B0B?C\C\0]vz-Od/D/I/I/Kjn,).05IU5R-1N-7-?-?-F-FDbgt{  DI-F  .J  .Q  .Q  .SN)#/D$//\_J_bfbpbpJp  EI  ch  W\  W_  W_  nr  BL  \`  \k  \k  [l  lm  nr  n|  n|  m}  }c  Yd  1e  $f  fj-7Tgadlq-r
 * 5 5 7 * 1'3doo`cNcfjftftNt  IN  hm  \a  \d  \d  sw  GQ  ae  ap  ap  `q  qr  sw  sA  sA  rB  BW  ^X  5Y  (Z  !ZC "0N GHE>W XYY E6OPQQa !P O~ $3 f'3doo`cNcfjftftNt  IM  gl  [`  [c  [c  rv  FP  ]`  ac  ]d  5e  (f  !f#1 j'3doo`cNcfjftftNt  IM  gl  [`  [c  [c  rv  FP  `d  `o  `o  _p  pq  rv  r@  r@  qA  Ag  ]h  5i  (j  !jj
  	SEAx>P QRR	Ss   c7 (`	c7 B:c7 A$c7 ,E-c7 c7 &`+Gc7 #c7 >c7 C2c7 
Ec7 )B`0-c7 0c7 
`(#c7 0
c4:Ab	c4c7 	A&c4/c7 3c44c7 7
d%d d% d%c           	         [         R                  R                  S5      R                  S5      nU R                  R                  SS5      R                  5       nU R                  R                  SS5      R                  5       nU R                  R                  SS5      R                  5       nU(       a  UR                  US9nU(       a  UR                  US9nU(       a>   [        R                  R                  US	5      R                  5       nUR                  US
9n[        U SUUUUS.5      $ ! [         a     Nf = f)Nr   r   r   rx   employee_coder-  user__name__icontainsuser__employee_code__icontains%Y-%m-%dr  zattendance/view_logs.html)r   name_filtercode_filterdate_filter)r
   r   r   r   GETr   r   r   r   datetimestrptimer-  
ValueErrorr   )r   r   rW  rX  rY  date_objs         r6   view_attendance_logsr_  j  s   ,,V4==lKD++//&"-335K++///26<<>K++//&"-335K{{{={{+{F	((11+zJOOQH;;x;8D '6"""	9    		s   !=D0 0
D=<D=c           
         SSK Jn  UR                  R                  5       nU R                  R                  S5      n[        R                  R                  5       R                  S5      nS nU(       a)   UR                  R                  US9nUR                  US9n[        U SU[        R                  UU(       a  [        U5      S	.5      $ SS	.5      $ ! UR                   a    S n NLf = f)
Nr   )r   r   r   r~   )r   z attendance/registered_users.htmlrx   )r8  r   r   selected_event_id)modelsr   r   r   rZ  r   r   prefetch_relatedr   DoesNotExistr   r   r   r*  )r   r   r   ra  r8  selected_events         r6   list_registered_usersrf    s    ]] F0LL//9EN	""]]..2C.DNLLL7E '=''7HS!23	@   OQ	@   !! 	"!N	"s   3(C C('C(c                 l   [         R                  R                  S5      R                  S5      nU R                  R                  SS5      R                  5       nU R                  R                  SS5      R                  5       nU R                  R                  SS5      R                  5       nU(       a  UR                  US9nU(       a  UR                  US9nU(       a>   [        R                  R                  US	5      R                  5       nUR                  US
9n[        SS9nSUS'   [        R                  " U5      nUR!                  / SQ5        U HI  nUR!                  UR"                  R$                  UR"                  R&                  UR(                  /5        MK     U$ ! [         a     Nf = f)Nr   r   r   rx   rP  r-  rQ  rS  rU  rV  ztext/csv)content_typez*attachment; filename="attendance_logs.csv"zContent-Disposition)NamezEmployee Code	Timestamp)r
   r   r   r   rZ  r   r   r   r   r[  r\  r-  r]  r   csvwriterwriterowr   r   rP  r  )	r   r   rW  rX  rY  r^  responserl  logs	            r6   export_attendance_csvrp    sW   ,,V4==lKD++//&"-335K++///26<<>K++//&"-335K{{{={{+{F	((11+zJOOQH;;x;8D 4H&RH"#ZZ!F
OO:;(>(>NO O  		s   !=F& &
F32F3c                 |   [        [        US9nU R                  S:X  a  UR                  R	                  5        Hf  nUR
                  (       d  M  [        R                  R                  UR
                  5      (       d  MF  [        R                  " UR
                  5        Mh     UR                  5         [        S5      $ )Nr~   r   registered_users)r   r   r   r   r   r   r   r   r   r   r   r   )r   user_idr   r/   s       r6   delete_userrt    su    Tg.D~~;;??$C~~~"''.."@"@		#..) % 	&''r8   c                     U R                   nUR                  (       a  [        R                  R	                  USS9  [        U 5        [        U S5      $ )Nr   )r   r  zattendance/logout.html)r   is_authenticatedr
   r   r   r   r   )r   r   s     r6   logout_viewrw    sB    <<D!!t!A
7O'344r8   c                     [         R                  R                  S5      R                  S5      S S n[	        U SSU05      $ )Nr   r   r?   zattendance/mark_logout.htmlr   r   r   s     r6   mark_logoutry    s>    ,,V4==lKCRPD'864.IIr8   c                    U R                   S:X  Ga   [        R                  " U R                  5      nUR	                  S5      nU(       d  [        SSS.5      $ UR                  S5      u  p4UR                  S5      S   n[        R                  " U5      n[        R                  " U[        R                  5      n[        R                  " U[        R                  5      n[        R                  " US	5      n[         R	                  [#        U5      5      n	U	(       d  [        SS
S.5      $ U	S   R$                  R'                  SS5      n
[(        R                  " SS / 45      u  pUb  U(       d  [*        R,                  R/                  5       n/ n/ nU Hs  n[        R0                  " [        R                  " UR2                  5      5      R'                  SS5      nUR5                  U5        UR5                  UR6                  5        Mu     U(       a  [        R8                  " U5      nOS n[(        R:                  " SX4S S9  Ub  U(       d  [        SSS.5      $ [=        X5      S   nSn[        R>                  " U5      nUU   nUU:  Ga$  UU   n[@        RB                  " [@        RD                  " 5       5      nURG                  5       n[H        R,                  RK                  UUSS9RM                  5       nU(       d  [        SSS.5      $ [H        R,                  RK                  UUSS9RM                  5       nU(       dG  [H        R,                  RO                  USUS9  [        SURP                  S-   URR                  -   S.5      $ [        SURP                  S-   URR                  -   SS.5      $ [        SSS.5      $ [        SSS.5      $ ! [T         a2  n[W        SU 35        [        SS[Y        U5       3S.5      s S nA$ S nAff = f)Nr   r  Fr  r   r   r   r   r  zNo face detected.r   r   all_user_embeddings)timeoutr	  g?r  )r   r  r  z)You must log in today before logging out.r   )r   r  r  Tr   )r   r   )r   r   r  zLogout error: r  r  )-r   r   r   r  r   r   r*   r   r   r   r  r  r'   r   r!  r;   r   r<   r   r   r   r	   r   r   r   r   rE   r   r"  r  r   argmaxr   r+  r,  r-  r
   r   r   r   rZ   r[   r0  r   r/  )r   r   r  r   r   r   r3  r4  r/   r   r   r7  r8  r9  r:  r;  r=  simsr?  rE  rF  r   r,  rG  has_logged_inalready_logged_outrM  s                              r6   ajax_mark_logoutr    sm   ~~4	S::gll+D,/J#B[$\]]'--j9NF,,s#B'C((0IMM)RXX6E,,uc&6&67C**S*-CLL!1#!67E#BU$VWW!!H..66q"=M#(99-BT2J#O M$E'//335
%B((4::bkk#:;CCArJC%%c*LL) & $&IIj$9M$(M		/-1GQUV$E#B[$\]]$]B1EDIyyHH~H)#X((8
 * 2 2 9 9tUZgn 9 o v v x$'EFq(rss%/%7%7%>%>DZ_lt%>%u%|%|%~")&&--4HX[-\'D$//TWBWZ^ZhZhBh(ijj'D$//TWBWZ^ZhZhBh  }A  )B  C  CE>W XYY E6OPQQ  	SN1#&'EAx>P QRR	SsF   AO
 CO
 *D-O
 B1O
 
A:O
 (O
 .O
 

P'P;PPc                 t    U R                   S:X  a(  SU R                  ;   a  U R                  S	 [        S5      $ g )Nr   r   r   )r   r   r   )r   s    r6   clear_eventr    s6    ~~goo-0((  r8   c                     U R                   S:X  aS  SU R                  ;   aC  [        R                  R	                  U R                  S   S9R                  5         [        S5      $ U R                   S:X  aV  SU R                  ;  aF  [        U R                  5      nUR                  5       (       a  UR                  5         [        S5      $ O
[        5       n[        R                  R                  5       R                  S5      n[        U SXS.5      $ )Nr   delete_event_idr~   	add_eventz-event_datezattendance/add_event.html)r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   s      r6   r  r    s    ~~$5$E-> ?@GGI$$ ~~$5W\\$I&==??IIKK((  {]] ))-8F'68XYYr8   r&   )Tdjango.shortcutsr   r   r   django.contribr   rb  r   r	   r
   r   djangor   django.confr   r   r   numpyr   r'   oclsetUseOpenCLcuda	setDevicer0  django.utilsr   rk  django.httpr   r   r   r   django.core.files.baser   insightface.appr   sklearn.metrics.pairwiser   django.views.decorators.csrfr   django.contrib.authr   	django.dbr   r  django.core.cacher   attendance.utilsr   r   django.core.exceptionsr   	threadingr   r'  r#  ImportErrorr   preparecreateCLAHEr+   r7   r<   r  r  Lockr  rS   	ModelFormrU   r   r   r   rN  r_  rf  rp  rt  rw  ry  r  r  r  r_   r8   r6   <module>r     s   @ @ # 6 6    	   
   U 	HHq " 
 2   . ( 6 4 & $  # 3  2  O
 [5K4LM   J  / 	#F;1' 
 ..""N5?? NJWXNt tR tRl.&2(5J 7R 7Rr)Zk  		.  Os$   E+ E8 +E54E58FF