
    9i/                        S SK r S SKJrJr  S SKrS SKrS SKrS SKr	S SK
r
S SKJs  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7  S SKJr  S S	KJr  S S
KJrJ r   S SK!J"r"  S SK#J$r$  S SK%J&r&J'r'  S SK(J)r)J*r*  S SK+J,r,  \	RZ                  S:  a'  \	R\                  R^                  r	\	R`                  " 5         \," 5       r1\"Rd                  " \'Rf                  \Rf                  S9 " S S\ 5      5       r4g)    N)AnyDict)	Pipelines)DetectionUNet)RetouchingNet)UNet)*)
OutputKeys)pipeline)InputPipeline)	PIPELINES)	LoadImage)	ModelFileTasks)create_devicedevice_placement)
get_loggerz2.0)module_namec                      ^  \ rS rSrS\S\4U 4S jjrS\S\\\4   4S jr	S\\\4   S\\\4   4S jr
S	 r   SS
 jrS\\\4   S\\\4   4S jrSrU =r$ )SkinRetouchingPipeline$   modeldevicec                 	  > [         TU ]  XS9  [        U R                  5      n[        R
                  R                  U R                  [        R                  5      n[        R
                  R                  U R                  S5      n[        R
                  R                  U R                  [        R                  5      n[        SS5      R                  U5      U l        U R                  R                  [        R                   " USSS9S   5        U R                  R#                  5         Sn[%        [&        R(                  US	9U l        U R*                  R*                  R                  U5        X@l        [        R                   " U R,                  SSS9n[/        S
SS9R                  U5      U l        [3        SSS9R                  U5      U l        U R0                  R                  US   5        U R4                  R                  US   5        U R0                  R#                  5         U R4                  R#                  5         SU l        XPl        U R8                  GbF  [;        U R<                  U R                  5         [>        R@                  " SS9nSURB                  l"        SURB                  l#        [>        RH                  " US9U l%        [>        RL                  RO                  U R8                  S5       n	[>        RP                  " 5       n
U
RS                  U	RU                  5       5        U RJ                  RV                  RY                  5         [>        RZ                  " U
SS9  U RJ                  R]                  [>        R^                  " 5       5        SSS5        SSS5        [`        Rb                  " [`        Rd                  " 5       [`        Rf                  " SS5      /5      U l4        [k        5       U l6        [        Rn                  " U Rl                  5      R                  U5      Rq                  5       U l6        U Rl                  Rs                  SSS5      S   U l6        SU l:        X l;        g! , (       d  f       N= f! , (       d  f       N= f)zn
use `model` to create a skin retouching pipeline for prediction
Args:
    model: model id on modelscope hub.
)r   r   zjoint_20210926.pth   cpuT)map_locationweights_only	generatorz*damo/cv_resnet50_face-detection_retinaface)r      )in_channelsout_channels   )
n_channels	n_classesinpainting_netdetection_neti   N)allow_soft_placementg333333?)configrb )name)      ?r.   r.      r   )N.)<super__init__r   device_nameospathjoinr   r   TORCH_MODEL_FILETF_GRAPH_FILEr   tor    load_state_dicttorchloadevalr   r   face_detectiondetectorlocal_model_pathr   r'   r   r(   
patch_sizeskin_model_pathr   	frameworktfConfigProtogpu_optionsper_process_gpu_memory_fractionallow_growthSessionsessgfile	FastGFileGraphDefParseFromStringreadgraph
as_defaultimport_graph_defrunglobal_variables_initializer
transformsComposeToTensor	Normalizeimage_files_transformsgen_diffuse_maskdiffuse_mask
from_numpyfloatpermute
input_sizer   )selfr   r   
model_pathr?   rA   det_model_idckpt_dict_loadr*   f	graph_def	__class__s              p/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/pipelines/cv/skin_retouching_pipeline.pyr1   SkinRetouchingPipeline.__init__(   sV    	u4t//0WW\\$**i.H.HI
77<<

4HI'',,tzz93J3JKav.&&JJz$(**57	8 	C !5!5\J!!&) 0!!DJ+++-2f: 	*A'')r&z 	 	++N;K,LM**>/+JK  "!.+!$..$2B2BCTBEH""B26""/JJf5	XX''(<(<dCq "I--affh7IIOO..0''	;IIMM""A"A"CD D D '1&8&8!  /B:
 '#
 -.!,,!r&z%%' 	 --55aA>yI% DC DCs&   ;A:Q;5BQ*Q;*
Q8	4Q;;
R	inputreturnc                     [         R                  " U5      n[        UR                  5      S:X  a%  [        R
                  " U[        R                  5      nUR                  [        5      nSU0nU$ )Nr/   img)	r   convert_to_ndarraylenshapecv2cvtColorCOLOR_GRAY2BGRastyper\   )r_   rh   rk   results       rf   
preprocess!SkinRetouchingPipeline.preprocessj   sT    **51syy>Q,,sC$6$67Cjj    c           	         US   R                  [        R                  5      nSnSnSnSnSn[        R                  " 5          U(       a`  US:  aZ  U R
                  bM  [        US5      u  pU R                  R                  U R                  R                  R                  S5      S	U0S
9n
[        R                  " U5      R                  U R                  5      nU(       aC  [        R                  " UR                  S   UR                  S   S4[        R                   S9S-  nU R#                  U5      n/ n[%        ['        US   5      5       H  n0 n[        R(                  " US   U   5      R                  [        R*                  5      R-                  5       US'   US   U   US'   [        R(                  " US   U   5      R                  [        R*                  5      R/                  SS5      R-                  5       US'   UR1                  U5        M     [3        U5      n['        U5      nUS:X  a9  UR5                  5       R7                  5       S S 2S S 2S S S24   US.nUsS S S 5        $ SnU H  n[9        UU5      u  nnn[;        U5      nUR                  S   SUR                  S   -  :  a  SnUR                  U R                  5      n[=        U5      nU(       a  U R>                  b  U RA                  U5      nU RC                  UUSUS9nUS   nUUUS   US   2US   US   24'   U(       d  M  US   nUWUS   US   2US   US   24'   M     U(       a  US:  a  U R
                  b  [E        UW
UUS9n[G        U[        RH                  5      (       d  UR5                  5       R7                  5       nUS S 2S S 2S S S24   n[J        RL                  U0sS S S 5        $ ! , (       d  f       g = f)Nrk   T      ?g?Fr   i   zoutput_png:0zinput_image:0)	feed_dictr$   r   )dtyper.   scoresboxesbboxscore	keypoints   r/   	landmarks)predface_numg?)degreesmooth_border	return_mgr   pred_mg)flag_bigKernal)'rr   npuint8r:   no_gradrA   resize_on_long_siderI   rR   rO   get_tensor_by_namer[   r8   r   onesrn   float32r>   rangerm   arrayint32tolistreshapeappendget_crop_bboxr   numpyget_roi_without_paddingroi_to_tensorpreprocess_roir?   retouch_localpredict_roi
whiten_img
isinstancendarrayr
   
OUTPUT_IMG)r_   rh   	rgb_imager   	whiteningr   whitening_degreer   rgb_image_smallresize_scale	skin_maskoutput_pred	output_mgdet_resultsresultsi	info_dictcrop_bboxesr   outputr   r}   roiexpand	crop_tblr
roi_outputroi_predroi_mgs                               rf   forwardSkinRetouchingPipeline.forwardr   s   %L''1			]]_-1d6J6J6V0Cs1$- IIMMIIOO66~F.@ * B	  **9588EKGG__Q');Q?**&(+,	 --	2KG3{8456	$&HH[-A!-D$E$L$LHH%$fh &!%0%:1%=	'")+,Q/*1171A''1C$fh +& y) 7 (0K;'H1}'OO-335aDbDjA ( G _J #N#)@t*%&VY#C(99Q<#	(:"::%)NffT[[)$S) T%:%:%F,,S1C!--!"&'	 . )
 &f-9A IaL15%aL156 7 9'	2F;A il9Q<7'l9Q<78 97 $< -1d6J6J6V($#1	3 k2::66)oo/557%aDbDj1K));7a __s   HO!+CO!4B#O!!
O/c                    [         R                  " 5          UR                  SS u  p#[        R                  " USSSS9n[         R
                  " U R                  U5      5      n[        R                  " XRU4SS9nUS	:  R                  5       nUS
:  R                  5       nUSU-
  -  U-   nXV-  nSU-
  nX R                  -  S:X  a  UOX R                  -  S-   U R                  -  nX0R                  -  S:X  a  UOX0R                  -  S-   U R                  -  n	[        R                  " USX-
  SX-
  SS4SSS9n
[        R                  " USX-
  SX-
  SS4SSS9n[        XR                  U R                  S9n
[        XR                  U R                  S9nU
R                  5       u  p  n/ n[        U5       HF  nU
UUS-    nUUUS-    nUU-  nU R                  UU5      nUSU-
  U-  -   nUR                  U5        MH     [         R                  " USS9n[!        U[#        [%        XR                  -  5      5      [#        [%        U	U R                  -  5      5      S9SS2SS2SU2SU24   nUsSSS5        $ ! , (       d  f       g= f)z
image: rgb
r/   N)   r   bilinearT)sizemodealign_cornersnearest)r   r   gffffff?r.   r$   r   constant)padr   value)p1p2)dim)hw)r:   r   rn   Finterpolatesigmoidr(   r\   r@   r   patch_partition_overlapr   r   r'   r   catpatch_aggregation_overlapintround)r_   imagesub_Hsub_Wsub_image_standardsub_mask_predsub_mask_pred_hard_lowsub_mask_pred_hard_highsub_H_standardsub_W_standardsub_image_paddingsub_mask_pred_padding	B_padding	C_padding_sub_comp_padding_listwindow_itemsub_image_padding_windowsub_mask_pred_padding_windowsub_input_image_padding_windowsub_output_padding_windowsub_comp_padding_windowsub_comp_paddingsub_comps                           rf   r   $SkinRetouchingPipeline.retouch_local   s    ]]_ ;;qr?LE!"JZt"M!MM""#568MMMENDM '4t&;%B%B%D"'4';&B&B&D#)++-/FGM)BM-M&+oo&=&BU(1,I@N&+oo&=&BU(1,I@N !".>3I1! %&EE.>3I1%! !8!oo$//!K$;%//doo%O!):)?)?)A&I!Q$&!$Y/+<a,1(/Da01, 2JLh1h.,0,?,?20-2) +I236OLP +P' &,,-DE  0"  %yy)>AF0 eN__<=>eN"oo. / 01 23Avvvv1E	GH E __s   II99
Jc                    [         R                  " 5          [        R                  " XR                  U R                  4SS9nU R                  U5      nUS-
  U-  S-   nUR                  SS5      n[        R                  " XaR                  SS  SS9nUS   R                  SSS5      n[        UR                  5      S:X  a  US	   nU(       a  [        U R                  U5      nUS   R                  SSS5      S-   S-  nSSU-  -
  U-  U-  SU-  U-  -   nUS
-  R                  5       nSU0nU(       a!  UR                  5       R                  5       US'   UsS S S 5        $ ! , (       d  f       g = f)Nr   )r   r.   g        rx   r/   r   r$   ).Ng     o@r   r   )r:   r   r   r   r^   r    clamprn   r]   rm   smooth_border_mgrZ   byter   r   )	r_   r   r   r   r   r   r   r   r   s	            rf   r   "SkinRetouchingPipeline.predict_roi  sZ   
 ]]_MMoot7jJE nnU+G}.4GmmC-GmmGYYqr]LGaj((1aG7==!Q&!),*4+<+<gFV^^Aq!,s2a7EGO %&()Ge(;<D 5L&&(Dd^F$+KKM$7$7$9y!5 __s   E E  
E.inputsc                     U$ )N )r_   r   s     rf   postprocess"SkinRetouchingPipeline.postprocess6  s    rv   )r(   r>   r   rZ   r    rX   r'   r^   r?   r@   rI   rA   )rx   FF)__name__
__module____qualname____firstlineno__strr1   r   r   r   rt   r   r   r   r   __static_attributes____classcell__)re   s   @rf   r   r   $   s    @c @3 @D $sCx. Y8T#s(^ Y8S#X Y8vFT "'#	B$sCx. T#s(^  rv   r   )5r3   typingr   r   ro   r   r   PIL
tensorflowrC   r:   torch.nn.functionalnn
functionalr   torchvision.transformsrT   modelscope.metainfor   Fmodelscope.models.cv.skin_retouching.detection_model.detection_unet_inr   Emodelscope.models.cv.skin_retouching.inpainting_model.inpainting_unetr   0modelscope.models.cv.skin_retouching.unet_deployr   *modelscope.models.cv.skin_retouching.utilsmodelscope.outputsr
   modelscope.pipelinesr   modelscope.pipelines.baser   r   modelscope.pipelines.builderr   modelscope.preprocessorsr   modelscope.utils.constantr   r   modelscope.utils.devicer   r   modelscope.utils.loggerr   __version__compatv1disable_eager_executionloggerregister_moduleskin_retouchingr   r   rv   rf   <module>r     s    	  
  
     + ) A 8 ) ) 5 2 . 6 C .>>U	B 	 	y'@'@BQX QBQrv   