
    i              
          S SK r S SKrS SKJr  S SKrS SKJr  S SKrS SKrS SK	J
r
  S SKJrJr  SSSS	S
.rS SKrS SK r S SKJr  S SKrS SKrS SKJr  S S S S S.rS rS rS r0 r\R-                  5        H  u  rr \R0                  R3                  \5      (       d  \" S\ 35      e\\;  a  \" S\ S35      e\\   " 5       r\" \5      r\" \5      u  rr\b2  \RA                  \SS9  \RC                  5         \\\'   \"" S\ 35        M  \b,  \#" \S\5      r$\$RC                  5         \$\\'   \"" S\ 35        M  \%" S5      e   \
RP                  " \
RR                  " S 5      \
RT                  " 5       \
RV                  " / S!Q/ S"Q5      /5      r,S# r-S(S$ jr.\/S%:X  a  S&r0S'r1\." \0\15      r2gg! \& a  r'\"" S\ S\ S\' 35        e Sr'C'ff = f))    N)OrderedDict)Image)
transforms)ThreadPoolExecutoras_completedz0/var/www/html/ai-image-ml/obstacle_classifier.ptz0/var/www/html/ai-image-ml/moisture_classifier.ptz//var/www/html/ai-image-ml/clarity_classifier.ptz,/var/www/html/ai-image-ml/pipe_classifier.pt)obstaclemoistureclaritypipe)resnetc                  .    [         R                  " SSSS9$ Nefficientnet_b0F   )
pretrainednum_classestimmcreate_model     */var/www/html/ai-image-ml/filter_images.py<lambda>r   #       ))*;[\]r   c                  .    [         R                  " SSSS9$ r   r   r   r   r   r   r   $   r   r   c                  .    [         R                  " SSSS9$ r   r   r   r   r   r   r   %   r   r   c                  .    [         R                  " SSSS9$ r   r   r   r   r   r   r   &   s    **+<\]^r   )r   r
   r   r	   c                     [        5       nU R                  5        H/  u  p#UR                  S5      (       a  U[        S5      S  OUnX1U'   M1     U$ )Nzmodule.)r   items
startswithlen)
state_dict	new_statekvnew_keys        r   strip_module_prefixr'   )   sN    I  "()Y(?(?!C	NO$Q' # r   c                    [        U [        5      (       d  [        U [        5      (       a2  [        S U R	                  5        5       5      (       a  [        U 5      S 4$ [        U [        5      (       aU  S HO  nX;   d  M
  X   n[        U[        [        45      (       a  [        U5      S 4s  $ [        US5      (       d  MK  S U4s  $    [        U S5      (       a-  [        U R                  [        R                  5      (       a  S U 4$ g)Nc              3   B   #    U  H  n[        U[        5      v   M     g 7f)N)
isinstancestr).0r$   s     r   	<genexpr>)try_extract_state_dict.<locals>.<genexpr>4   s     =+<az!S!!+<s   )r"   model_state_dictmodeleval)NN)
r*   r   dictallkeysr'   hasattrr1   types
MethodType)
checkpointkey	candidates      r   try_extract_state_dictr;   0   s    *k**jT.J.J=:??+<===&z2D88*d##>C &O	i+t)<==.y94??9f--?* ? z6""z*//5CSCS'T'TZr   c                     [         R                  " U [         R                  " S5      SS9$ ! [         a  n[	        U5      nSU;   d  SU;   d  SU;   a   [         R
                  R                  [        R                  /5         [         R                  " U [         R                  " S5      SS9sSSS5        s SnA$ ! , (       d  f       e = f! [         a  n[        S	U 35      UeSnAff = fe SnAff = f)
z
Attempt to load checkpoint safely:
  1) try weights_only=True (safe)
  2) on specific failure, retry inside safe_globals for known classes with weights_only=False
Returns whatever torch.load returns (OrderedDict, dict, or nn.Module)
cpuT)map_locationweights_onlyzWeights only load failedzUnsupported globalUnsupportedGlobalFNz4Failed loading checkpoint even inside safe_globals: )
torchloaddevice	Exceptionr+   serializationsafe_globalsr   ResNetRuntimeError)pathemsge2s       r   robust_torch_loadrM   F   s    zz$U\\%-@tTT !f%,0D0KObfiOih((55v}}oF ::de9L[`a GFFF 		  h"%YZ\Y]#^_eggh 	s\   ), 
C3C..C*B;,	C5C3;
C		CC.	C
C*C%%C**C..C3zpath not found: z!No architecture defined for key ''F)strictu*   ✅ Loaded weights into architecture for: moduleu!   ✅ Loaded full saved model for: zEUnrecognized checkpoint format (neither state_dict nor model object).u   ❌ Failed to load model 'z' from : )   rR   )g
ףp=
?gv/?gCl?)gZd;O?gy&1?g?c                    [        SU5         [        R                  " U 5      R                  S5      nUR                  S   S:  d  UR                  S   S:  a  SS/S.$ [        U5      R                  S5      n0 n[        R                  " 5          [        R                  5        H8  u  pVU" U5      n[        R                  " U5      R                  5       nUS	:  XE'   M:     S S S 5        / n	US
   (       a  U	R                  S5        US   (       d  U	R                  S5        US   (       d  U	R                  S5        [        U	5      S:H  U	S.$ ! , (       d  f       Nr= f! [         a  n
SS[!        U
5       3/S.s S n
A
$ S n
A
ff = f)Nz
activity ,RGBr   2   r   FzImage too small.)acceptedreasonsg      ?r   zPipe is obstructed.r
   zImage is unclear.r   zNo pipe in the Image.Error: )printr   openconvertsize	transform	unsqueezerA   no_gradmodels_dictr   sigmoiditemappendr!   rD   r+   )
image_pathactivityimageinput_tensorresultsr9   r0   outputprobfailedrJ   s              r   predict_allrl      sZ   	,!$D

:&..u5::a=2A!3 %3E2FGG '11!4]]_)//1
|,}}V,113#cz 2   :MM/0 y!MM-.vMM12 Fq(
 	
/ _8  D!Q/A.BCCDs>   AE 1E AE!A+E 
EE 
F(E?9F?Fc                   ^ ^ [         R                  " TSS9  / nUU 4S jn[         R                  " T 5       Vs/ s H+  nUR                  5       R	                  S5      (       d  M)  UPM-     nn[        US9 nU Vs0 s H  oWR                  XE5      U_M     nn[        U5       Hg  n	 U	R                  5       n
UR                  U
5        U
S   (       a  SOSn[        U S	U
S
    SU
S   (       a  SR                  U
S   5      OS 35        Mi     UsS S S 5        $ s  snf s  snf ! [         aK  nX   n[        SU S	[        U5       35        UR                  USS[        U5       3/S.5         S nAM  S nAff = f! , (       d  f       g = f)NT)exist_okc                    > [         R                  R                  TU 5      n[        U5      nXS'   US   (       a5  [         R                  " U[         R                  R                  TU 5      5        U$ )NfilenamerV   )osrI   joinrl   rename)rp   rI   resultaccepted_dir
source_dirs      r   process_image3batch_filter_images_parallel.<locals>.process_image   sS    ww||J1T"%z*IIdBGGLLx@Ar   )z.jpgz.jpegz.png)max_workersrV   u   ✅ Acceptedu   ❌ RejectedrQ   rp   u    → rW   z, z	No issuesu   ❌ Error processing FrX   )rp   rV   rW   )rq   makedirslistdirlowerendswithr   submitr   rt   rc   rY   rr   rD   r+   )rv   ru   ry   rh   rw   fimage_filesexecutorfuture_to_filefuturert   statusrJ   rp   s   ``            r   batch_filter_images_parallelr      s   KKt,G ::j))a77978 	
)  
 
	4HST1//-;Q>T">2Fv&+1*+=>6*#5"6e\bcl\mDIIfYFW<Xs~;  A  B 3 # 
5	4 U  )1-hZr#a&BC ( %")#a& 23    
5	4sU   (D%D6E;;DE;'A#D#
E;E;#
E8-A E3-E;3E88E;;
F	__main__
raw_imagesaccepted_images)   )3rA   r   collectionsr   r6   PILr   rq   retorchvisionr   concurrent.futuresr   r   MODEL_PATHStorchvision.modelsr   
MODEL_ARCHr'   r;   rM   r`   r   r9   rI   existsFileNotFoundErrorKeyError
arch_modelr8   r"   loaded_modelload_state_dictr1   rY   getattr
real_modelrH   rD   rJ   ComposeResizeToTensor	Normalizer]   rl   r   __name__
SOURCE_DIRACCEPTED_DIRrh   r   r   r   <module>r      s,     #   	 	 " ? CB B: 
  #   %
 ^]]^	
,4 ""$IC"ww~~d###&6tf$=>>j >se1EFF  _&
 't,
#9*#E 
L!&&z%&@OO)K>seDE% xFJOO)K5cU;< fgg? %B j!.0EF  	&DR"J zJ$L*:|DG k  *3%wtfBqcBCs%   ?BF--F-=F--G
3GG
