
    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	J
r
  S SKJrJrJrJrJr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  S S
KJr  SSKJ r   \RB                  S:  a'  \RD                  RF                  r\RH                  " 5         \" 5       r%\RL                  " \RN                  \
RP                  S9 " S S\5      5       r)g)    N)AnyDict)	Pipelines)FaceAnaget_f5pget_reference_facial_pointspadTo16xresize_sizewarp_and_crop_face)
OutputKeys)InputPipeline)	PIPELINES)	LoadImage)Tasks)
get_logger   )device_placementz2.0)module_namec                      ^  \ rS rSrS\4U 4S jjrS rS\S\\\	4   4S jr
S rS\\\	4   S\\\	4   4S	 jrS
\\\	4   S\\\	4   4S jrSrU =r$ )ImageCartoonPipeline   modelc                 d  > [         TU ]  " SSU0UD6  [        U R                  5      U l        [
        R                  " 5       R                  5          U R                  [        R                  R                  U R                  S5      S5      U l        U R                  [        R                  R                  U R                  S5      S5      U l        SSS5        SU l        [        R                   " [        R                  R                  U R                  S5      5      n[        R"                  " X0R                  U R                  4[        R$                  S	9n[        R&                  " U[        R(                  5      R+                  [,        R.                  5      S
-  U l        g! , (       d  f       N= f)zl
use `model` to create a image cartoon pipeline for prediction
Args:
    model: model id on modelscope hub.
r   zcartoon_h.pbmodel_anime_headzcartoon_bg.pbmodel_anime_bgNi   z	alpha.jpginterpolationg     o@ )super__init__r   r   facertfGraph
as_default	load_sessospathjoinsess_anime_headsess_anime_bg	box_widthcv2imreadresize
INTER_AREAcvtColorCOLOR_BGR2GRAYastypenpfloat32global_mask)selfr   kwargsr6   	__class__s       n/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/pipelines/cv/image_cartoon_pipeline.pyr!   ImageCartoonPipeline.__init__#   s#    	/u//TZZ(
XXZ""$#'>>TZZ8:L$ND !%TZZ9;K"MD % jjdjj+!FGjj..$..9..* <<++--3VBJJ-?%H %$s   A?F!!
F/c                 Z   [         R                  " SS9nSUR                  l        [         R                  " US9n[
        R                  SU 35        [         R                  R                  US5       n[         R                  " 5       nUR                  UR                  5       5        UR                  R                  5         [         R                  " XbS9  UR                  [         R                   " 5       5        S S S 5        [
        R                  SU S35        U$ ! , (       d  f       N)= f)	NT)allow_soft_placement)configzloading model from rb)namezload model z done.)r#   ConfigProtogpu_optionsallow_growthSessionloggerinfogfile	FastGFileGraphDefParseFromStringreadgraphr%   import_graph_defrunglobal_variables_initializer)r7   
model_pathr@   r>   sessf	graph_defs          r:   r&   ImageCartoonPipeline.load_sess9   s    T:*.'zz()*67XX
D1QI%%affh/JJ!!#	5HHR4467 2 	k*V45 21s   2BD
D*inputreturnc                 d    [         R                  " U5      nUR                  [        5      nSU0nU$ )Nimg)r   convert_to_ndarrayr3   float)r7   rU   rX   results       r:   
preprocessImageCartoonPipeline.preprocessG   s.    **51jj    c                     UR                   u  p#nU R                  R                  U5      u  pVnUR                   S   S:X  a  g U$ )Nr   )shaper"   rN   )r7   rX   src_hsrc_w_boxes	landmarkss          r:   detect_face ImageCartoonPipeline.detect_faceM   s?    ))a"jjnnS1!;;q>Qr^   c                    US   R                  [        R                  5      nUR                  u  p4n[	        USS9nUS S 2S S 2S S S24   n[        U5      u  pxn	U R                  R                  U R                  R                  R                  S5      SU0S9n
U
S U2S U	2S S 24   nU R                  U5      nUc  [        S5        [        R                  U0$ U GH@  n[        X5      n[        UUS	[!        S
S9U R"                  U R"                  4S
S9u  nnU R$                  R                  U R$                  R                  R                  S5      SUS S 2S S 2S S S24   0S9n[&        R(                  " UU[        R*                  " US5      [        R*                  " US5      4SS9nU R,                  n[&        R(                  " UU[        R*                  " US5      [        R*                  " US5      4SS9n[        R.                  " US5      nUU-  SU-
  U-  -   nGMC     [&        R0                  " XU4[&        R2                  S9n[        R                  U0$ )NrX   i  )sizezmodel_anime_bg/output_image:0zmodel_anime_bg/input_image:0)	feed_dictzNo face detected!g      ?T)default_square)ratioreference_pts	crop_sizereturn_trans_invzmodel_anime_head/output_image:0zmodel_anime_head/input_image:0   r   )r   r   r   )borderValue   r   )r3   r4   uint8r`   r
   r	   r+   rN   rL   get_tensor_by_namerf   printr   
OUTPUT_IMGr   r   r   r,   r*   r-   
warpAffineri   r6   expand_dimsr/   r0   )r7   rU   rX   ori_hori_wrc   img_brgpad_bgpad_hpad_wbg_resresre   landmarkf5phead_img	trans_invhead_reshead_trans_invmaskmask_trans_invs                        r:   forwardImageCartoonPipeline.forwardU   sL   El!!"((+))a#C(aDbDj/  (0u##''$$77/15v> ( @ VeVVeVQ&'$$S)	%&))3//!H(,C #59N>>4>>:!%#'Hi ++//$$**==57 5hq!TrTz6J 0 H !^^BGGCORWWS!_=%'N
 ##D ^^BGGCORWWS!_=%'N  ^^NA>N >1Q5G34NNCE "H jjenCNNK%%s++r^   inputsc                     U$ )Nr   )r7   r   s     r:   postprocess ImageCartoonPipeline.postprocess   s    r^   )r,   r"   r6   r+   r*   )__name__
__module____qualname____firstlineno__strr!   r&   r   r   r   r\   rf   r   r   __static_attributes____classcell__)r9   s   @r:   r   r      s    
Hc H, $sCx. <,T#s(^ <,S#X <,|$sCx. T#s(^  r^   r   )*r'   typingr   r   r-   numpyr4   
tensorflowr#   modelscope.metainfor   modelscope.models.cv.cartoonr   r   r   r	   r
   r   modelscope.outputsr   modelscope.pipelines.baser   r   modelscope.pipelines.builderr   modelscope.preprocessorsr   modelscope.utils.constantr   modelscope.utils.loggerr   utils.devicer   __version__compatv1disable_eager_executionrE   register_moduleimage_portrait_stylizationperson_image_cartoonr   r   r^   r:   <module>r      s    
  
   )> > * 5 2 . + . ,>>U	B 	 	$$..0s8 s0sr^   