
    Qiw1              
          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KrS rS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 S.rS rS rS r0 r\R1                  5        H  u  rr \R4                  R7                  \5      (       d  \" S\ 35      e\\;  a  \" S\ S35      e\\   " 5       r\" \5      r\" \5      u  r r!\ b2  \RE                  \ SS9  \RG                  5         \\\'   \$" S\ 35        M  \!b,  \%" \!S\!5      r&\&RG                  5         \&\\'   \$" S\ 35        M  \'" S5      e   \
RT                  " \
RV                  " S#5      \
RX                  " 5       \
RZ                  " / S$Q/ S%Q5      /5      r.S& r/S+S' jr0\1S(:X  a  S)r2S*r3\0" \2\35      r4gg! \( a  r)\$" S \ S!\ S"\) 35        e Sr)C)ff = f),    N)OrderedDict)Image)
transforms)ThreadPoolExecutoras_completedc                     [         R                  " 5       nU R                  USSS9  UR                  S5        [        R
                  " U5      R                  S5      n U R                  S5      n U $ )NJPEGK   )formatqualityr   RGB   r   )ioBytesIOsaveseekr   openconvertresize)imagebuffers     */var/www/html/ai-image-ml/filter_images.pypreprocess_imager      sX    ZZ\F	JJvfbJ1
KKNJJv&&u-E LL$EL    z0/var/www/html/ai-image-ml/obstacle_classifier.ptz0/var/www/html/ai-image-ml/moisture_classifier.ptz-/var/www/html/ai-image-ml/ruler_classifier.ptz//var/www/html/ai-image-ml/clarity_classifier.ptz,/var/www/html/ai-image-ml/pipe_classifier.pt)obstaclemoisturerulerclaritypipe)resnetc                  .    [         R                  " SSSS9$ Nefficientnet_b0F   )
pretrainednum_classestimmcreate_model r   r   <lambda>r,   1       ))*;[\]r   c                  .    [         R                  " SSSS9$ r#   r(   r+   r   r   r,   r,   2   r-   r   c                  .    [         R                  " SSSS9$ r#   r(   r+   r   r   r,   r,   3   r-   r   c                  .    [         R                  " SSSS9$ r#   r(   r+   r   r   r,   r,   4   s    **+<\]^r   c                  .    [         R                  " SSSS9$ r#   r(   r+   r   r   r,   r,   5   r-   r   )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;   8   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).0r8   s     r   	<genexpr>)try_extract_state_dict.<locals>.<genexpr>C   s     =+<az!S!!+<s   )r6   model_state_dictmodeleval)NN)
r>   r   dictallkeysr;   hasattrrE   types
MethodType)
checkpointkey	candidates      r   try_extract_state_dictrO   ?   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_loadra   U   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 : r   )g
ףp=
?gv/?gCl?)gZd;O?gy&1?g?c                    [        SU5         [        R                  " U 5      R                  S5      n[	        U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
   (       d  U	R                  S5        US   (       a  U	R                  S5        US   (       d  U	R                  S5        [        R                   " SU[        R"                  5      (       a  US   (       a  U	R                  S5        [%        U	5      S:H  U	S.$ ! , (       d  f       N= f! [&         a  n
SS[)        U
5       3/S.s S n
A
$ S n
A
ff = f)Nz
activity ,r   r   2   r%   FzImage too small.)acceptedreasonsg      ?r   zImage is unclear.r   zPipe is obstructed.r    zNo pipe in the Image.selectr   zSoil has moisture.Error: )printr   r   r   r   size	transform	unsqueezerU   no_gradmodels_dictr3   sigmoiditemappendresearch
IGNORECASEr5   rX   r?   )
image_pathactivityr   input_tensorresultsrM   rD   outputprobfailedr^   s              r   predict_allr      s   	,!*D

:&..u5 '::a=2A!3 %3E2FGG '11!4]]_)//1
|,}}V,113#cz 2   y!MM-.:MM/0vMM1299Xx77*%-- 45 Fq(
 	
9 _B  D!Q/A.BCCDs>   AF/ *1F/ AF,B1F/ 
F,(F/ /
G9G
GGc                 f  ^ ^ [         R                  " TSS9  / nS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  ohR                  XV5      U_M     n	n[        U	5       Hs  n
 U
R                  5       nUR                  U5        US   (       a  SnUS   (       a  SOS	n[        U S
US    SUS   (       a  SR                  US   5      OS 35        Mu     S S S 5        U(       a  U H  nSUS'   / US'   M     U$ 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       N= f)NT)exist_okFc                    > [         R                  R                  TU 5      n[        U5      nXS'   US   (       a5  [         R                  " U[         R                  R                  TU 5      5        U$ )Nfilenamerh   )osr]   joinr   rename)r   r]   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_workersrh   u   ✅ Acceptedu   ❌ Rejectedre   r   u    → ri   z, z	No issuesu   ❌ Error processing rk   )r   rh   ri   )r   makedirslistdirlowerendswithr   submitr   r   rt   rl   r   rX   r?   )r   r   r   r{   any_acceptedr   fimage_filesexecutorfuture_to_filefuturer   statusr^   r   rs   ``              r   batch_filter_images_parallelr     s   KKt,GL ::j))a77978 	
)  
 
	4HST1//-;Q>T">2Fv&*%#'L+1*+=>6*#5"6e\bcl\mDIIfYFW<Xs~;  A  B 3 
50 A AjMAiL  NE U  )1-hZr#a&BC ( %")#a& 23    
5	4sU   (E 'E 8F"=EF")A/E
F"F"

FA FF"FF""
F0__main__
raw_imagesaccepted_images)   )5rU   r)   collectionsr   rJ   PILr   r   ru   torchvisionr   concurrent.futuresr   r   r   r   MODEL_PATHStorchvision.modelsr!   
MODEL_ARCHr;   rO   ra   rq   r3   rM   r]   existsFileNotFoundErrorKeyError
arch_modelrL   r6   loaded_modelload_state_dictrE   rl   getattr
real_modelr\   rX   r^   ComposeResizeToTensor	Normalizern   r   r   __name__
SOURCE_DIRACCEPTED_DIRr{   r+   r   r   <module>r      s7     #   	 	 " ? 	 CB=A: 
  #   %
 ^]]^]
,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j/h zJ$L*:|DG a  *3%wtfBqcBCs%   	BF7-F7F77G=GG