
    5_j                     n   d dl Z d dlZd dlZd dlmZ d dlZd dlmZ ej                  j                  d  e ee      j                         j                  d                d dlmZmZ d dlmZmZmZ d dlmZ dej0                  d	eeeeef   dz  fd
Zdej0                  deeef   d	ej0                  fdZ	 d dej                  dej0                  dedededz  d	eeeeef   fdZ	 	 	 	 	 	 	 	 	 d!deez  deez  dedz  dededededededed	e fdZ!dededefdZ"d	efdZ#e$dk(  r e% e#             y)"    N)Path)Image   )list_imagesread_rgb)detections_to_recordsload_rfdetr_seg_modelpredict_records)center_fallback_bboxmaskreturnc                 <   t        j                  |       \  }}t        |      dk(  st        |      dk(  ry t        |j	                               t        |j	                               t        |j                               dz   t        |j                               dz   fS )Nr   r   )npwherelenintminmax)r   ysxss      e/var/www/ramen.bs-engineer-server.com/upstream_suite/03_soup-density-ai/src/crop/extract_soup_area.py	mask_bboxr      sl    XXd^FB
2w!|s2w!|rvvx=#bffh-RVVX):CMA<MMM    
image_sizec                 (   | j                   |d   |d   fk(  r| j                  t              S t        j                  | j                  d      dz        }t        j                  |j                  |t        j                  j                              dkD  S )Nr   r   uint8   )
shapeastypeboolr   	fromarrayr   asarrayresize
ResamplingNEAREST)r   r   
mask_images      r   resize_maskr'      st    zzjmZ]33{{4  W!5!;<J::j''
E4D4D4L4LMNQRRRr   imagemasked_path	crop_path
alpha_pathc                 L   t        || j                        }t        |      }|t        d      t	        j
                  |       }t	        j                  |      }||   ||<   |j                  j                  dd       t        j                  |      j                  |       t        j                  |      j                  |      j                  |       |rMt	        j                  ||j                  d      dz  g      }t        j                  |      j                  |       |S )Nzempty soup_valid_area maskTparentsexist_okr   r   )r'   sizer   RuntimeErrorr   r"   
zeros_likeparentmkdirr   r!   savecropdstackr   )	r(   r   r)   r*   r+   bboxrgbmaskedrgbas	            r   save_masked_outputsr<      s     tUZZ(DT?D|788
**U
C]]3Ft9F4LTD9	OOF  -	OOF  &++I6yy#t{{73c9:;"":.Kr   
image_path
output_dircheckpoint_path
model_size	thresholdlow_confidence_threshold
save_alphapreserve_filenameoutput_kindskip_fallback_outputc                    t        |       } t        |      }t        |       }|rY|| j                  z  }|	dv r|n|| j                   dz  }|	dk(  r|n|| j                   dz  }|	dk(  r|j	                  d      nd }n:|| j                   dz  }|| j                   dz  }|r|| j                   dz  nd }	 |r ||       nt        | |||      }|D cg c]  }|j                  d      | }}|st        d	      t        |d
       }t        |t        j                  |d         j                  t              |||      }|r |	dk(  rt        |      j                  d       t        |j                  dd            }||k\  rdnd}d}|\  }}}}| j                  t/        |       t/        |      t/        |      |rt/        |      nd|||||||dS c c}w # t         $ r}t#        |j$                        }|
sa|j&                  j)                  dd       |r|	dk(  r|n|}|r|	dk(  r|j+                  |       n |j-                  |      j+                  |       d}d}t/        |      }Y d }~d }~ww xY w)N>   r6   r:   z_soup_masked.jpgr6   z_soup_crop.jpgalphaz.pngz_soup_alpha.pngr   z!no soup_valid_area mask detectionc                 &    | j                  dd      S )N
confidence        )get)items    r   <lambda>z#extract_one_image.<locals>.<lambda>T   s    TXXlC-H r   )keyr:   T)
missing_okrJ   rK   r       r-   r   image_idsource_image_pathsoup_masked_pathsoup_crop_pathsoup_alpha_pathextract_statusextract_confidencex1y1x2y2error_message)r   r   namestemwith_suffixr
   rL   r1   r   r<   r   r"   r   r    unlinkfloat	Exceptionr   r0   r3   r4   r5   r6   str)r=   r>   r?   r@   rA   rB   	predictorrC   rD   rE   rF   r(   primary_pathr)   r*   r+   recordsrecbestr8   rJ   statusr_   excfallback_outputr[   r\   r]   r^   s                                r   extract_one_imagero   6   s    j!Jj!JZ E!JOO3&15G&GlZ]g]l]l\mm}Z~M~$/6$9LzzN__mLn?n	9D9O\--f5UY
 joo%66F#GGJOO#4N!CC	ISZZ__$5_"EEY]
!+4)J'/*V`bqs|:}")I3SWWV_-H3IIBCC7 HI"5"**T&\*B*I*I$*OQ\^gist!8O""d"3488L#67
 $<<! NBBOO _,i..83z?b (& / J  !#EJJ/#$$TD$A+<PVAVi\gO [H%<

?+

4 %%o6
C!s2   8G G+G/BG G 	I3"BI..I3c                 f    t        | |      dt        t        z  dt        t           ffd}|S )N)r@   r?   r=   r   c                 R    j                  t        |             }t        |      S )N)rA   )predictrf   r   )r=   
detectionsmodelrA   s     r   rg   z"build_predictor.<locals>.predictor{   s$    ]]3z?i]H
$Z00r   )r	   rf   r   listdict)r@   r?   rA   rg   rt   s     ` @r   build_predictorrw   x   s2    !ZYE1cDj 1T$Z 1 r   c                     t        j                  d      } | j                  dd       | j                  dd       | j                  d	d
       | j                  dd       | j                  ddddg       | j                  dt        d       | j                  dt        d       | j                  dd       | j                  dd       | j                  ddg d       | j                  dd       | j	                         }t        |j                  |j                  |j                        }t        |j                        D cg c]s  }t        ||j                  |j                  |j                  |j                  |j                  ||j                   |j                  |j                   |j"                        u }}g d}t%        |j&                        }|j(                  j+                  dd       |j-                  d d!d"#      5 }t/        j0                  ||$      }|j3                          |j5                  |       d d d        t7        d%|        y&c c}w # 1 sw Y   xY w)'Nz>Extract soup valid area images with an RF-DETR-Seg mask model.)descriptionz--inputT)requiredz--output-dirz%data/processed_images/soup_valid_area)defaultz--reportz/reports/crop/soup_valid_area/extract_result.csvz--checkpoint-pathz--model-sizesmallmedium)r{   choicesz--threshold      ?)typer{   z--low-confidence-thresholdffffff?z
--no-alpha
store_true)actionz--preserve-filenamesz--output-kindall)r   r6   r:   rH   z--skip-fallback-output)rg   rC   rD   rE   rF   rS   r-   wrR   zutf-8)newlineencoding)
fieldnameszwrote soup extraction report: r   )argparseArgumentParseradd_argumentrd   
parse_argsrw   r@   r?   rA   r   inputro   r>   rB   no_alphapreserve_filenamesrE   rF   r   reportr3   r4   opencsv
DictWriterwriteheader	writerowsprint)	parserargsrg   r=   rowsr   r   fwriters	            r   mainr      s@   $$1qrF
	D1
0WX

,]^
+d;
'8ATU
E3?
45$O
\:
.|D
@bc
0FD1E1Et~~VI &djj1  	OO  OONN))==("55((!%!:!:	
D  J $++F
MMt4	S"w	7 1j9 
*6(
34K@ s   
A8I9I##I,__main__)N)	Nr|   r   r   NTFr   F)&r   r   syspathlibr   numpyr   PILr   pathinsertrf   __file__resolver.   common.image_ior   r   crop.rfdetr_adapterr   r	   r
   
crop.utilsr   ndarraytupler   r   r'   r<   rd   r    rv   ro   rw   r   __name__
SystemExit r   r   <module>r      s    
 
    3tH~--/77:; < 1 ] ] +NBJJ N5c3);#<t#C NSbjj SeCHo S"** S #;;
**  	
 t 3S#6 #'&*#!&?d
?d
? 4Z? 	?
 ? $? ? ? ? ? 
?D c e 5c 5p z
TV
 r   