
    9i*                     L   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r  S SKJr  S SKJr  S SKJr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$  \$" 5       r%\RL                  " \"RN                  \RP                  S9 " S S\5      5       r)g)    N)AnyDict)Image)	Pipelines)DDIMSampler)	box2squre
box_in_boxexpand_bboxexpand_image_maskget_bbox_from_maskpad_to_squaresobel)
OutputKeys)InputPipeline)	PIPELINES)
load_image)Tasks)
get_logger)module_namec                      ^  \ rS rSrSrS\4U 4S jjr\SS j5       rS\	S\
\\4   4S jr    SS	\
\\4   S\
\\4   4S
 jjrS\
\\4   S\
\\4   4S jrSrU =r$ )AnydoorPipeline   aP  AnyDoor Pipeline.

Examples:

>>> from modelscope.pipelines import pipeline
>>> from modelscope.utils.constant import Tasks
>>> from PIL import Image

>>> ref_image = 'data/test/images/image_anydoor_fg.png'
>>> ref_mask = 'data/test/images/image_anydoor_fg_mask.png'
>>> bg_image = 'data/test/images/image_anydoor_bg.png'
>>> bg_mask = 'data/test/images/image_anydoor_bg_mask.png'

>>> anydoor_pipeline = pipeline(Tasks.image_to_image_generation, model='damo/AnyDoor')
>>> out = anydoor_pipeline((ref_image, ref_mask, bg_image, bg_mask))
>>> assert isinstance(out['output_img'], Image.Image)
modelc                 T  > [         TU ]  " SSU0UD6  [        R                  R	                  U R
                  R                  U R                  R
                  R                  5      nU R
                  R                  U R                  USS95        [        U R
                  5      U l        g)zo
use `model` to create a action detection pipeline for prediction
Args:
    model: model id on modelscope hub.
r   cuda)locationN )super__init__ospathjoinr   	model_dircfg
model_pathload_state_dict_get_state_dictr   ddim_sampler)selfr   kwargs
model_ckpt	__class__s       h/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/pipelines/cv/anydoor_pipeline.pyr    AnydoorPipeline.__init__1   s     	/u//WW\\$**"6"6"&((..";";=


""  f =	?'

3    c                 @   S n[         R                  R                  U 5      u  p4UR                  5       S:X  a  SS KnUR
                  R                  XS9nO0U" [
        R                  " U [
        R                  " U5      SS95      nU" U5      n[        SU  S35        U$ )	Nc                 &    U R                  SU 5      $ )N
state_dict)get)ds    r.   get_state_dict7AnydoorPipeline._get_state_dict.<locals>.get_state_dictA   s    55q))r0   z.safetensorsr   )deviceT)map_locationweights_onlyzLoaded state_dict from [])
r!   r"   splitextlowersafetensors.torchtorch	load_fileloadr8   print)	ckpt_pathr   r6   _	extensionsafetensorsr3   s          r.   r(   AnydoorPipeline._get_state_dict>   s    	* ww''	2??.$$**44 5 ,J (

!&h!7!%'(J
 $J/
(156r0   inputsreturnc                    Uu  p#pE[         R                  " [        U5      R                  S5      5      n[         R                  " [         R                  " [        U5      R                  S5      5      S:  SS5      R                  [         R                  5      n[         R                  " [        U5      R                  S5      5      n[         R                  " [         R                  " [        U5      R                  S5      5      S:  SS5      R                  [         R                  5      n[        U5      n[         R                  " X3U/S5      nX'-  [         R                  " U5      S-  SU-
  -  -   nUu  ppXU
2X2S S 24   nX9U
2X24   n[         R                  R                  SS	5      S
-  n[        XUS9u  p[         R                  " X3U/S5      n[        USSS9n[        R                  " UR                  [         R                  5      S5      R                  [         R                  5      n[        US-  SSS9n[        R                  " UR                  [         R                  5      S5      R                  [         R                  5      nUS S 2S S 2S4   nXp[         R                  " XU/S5      n[!        UUS-  5      n[        U5      n[#        UUSS/S9n[#        UUSS/S9n[%        UU5      nUu  ppXIU
2X2S S 24   nXYU
2X24   n['        UU5      nUu  pp[        R                  " UR                  [         R                  5      X-
  X-
  45      n[        R                  " UR                  [         R                  5      X-
  X-
  45      nUS:  R                  [         R                  5      nUR)                  5       nUUX2X2S S 24'   UR)                  5       S-  nSUX2X2S S 24'   [         R                  " UUU/S5      nUR*                  S   UR*                  S   nn[        USSS9R                  [         R                  5      n[        USSS9R                  [         R                  5      n[        USSS9R                  [         R                  5      nUR*                  S   UR*                  S   nn[        R                  " UR                  [         R                  5      S5      R                  [         R,                  5      n[        R                  " UR                  [         R                  5      S5      R                  [         R,                  5      n[        R                  " UR                  [         R                  5      S5      R                  [         R,                  5      S:  R                  [         R,                  5      nUS-  nUS-  S-
  nUS-  S-
  n[         R.                  " UUS S 2S S 2S S24   /S5      n[1        UUR)                  5       UR)                  5       UR)                  5       [         R2                  " UUUU/5      [         R2                  " U5      S9nU$ )NRGBL      r            
   )ratioF)	pad_valuerandom)   rW   g?g333333?g?      @g              ?   r[   g      ?     _@)	tar_imagerefjpghintextra_sizestar_box_yyxx_crop)npasarrayr   convertwhereastypeuint8r   stack	ones_likerV   randintr   r   cv2resizer   r
   r   r	   copyshapefloat32concatenatedictarray)r*   rH   	ref_imageref_maskr]   tar_maskref_box_yyxx
ref_mask_3masked_ref_imagey1y2x1x2rT   masked_ref_image_composeref_mask_composeref_image_collagetar_box_yyxxrb   cropped_target_imagecropped_tar_maskcollagecollage_maskH1W1H2W2items                               r.   
preprocessAnydoorPipeline.preprocessS   s   390	YJJz)4<<UCD	88JJz(+33C89C?vbhh 	 JJz)4<<UCD	88JJz(+33C89C?vbhh 	 *(3 XXx8<bA
$1BLL55 !J50 0 &+rE25!O<rE25L)		!!"b)B.%6e&5"XXx8<bA
 )E;::##BHH-z;;A6"((;K 	 #:#3qO
ZZ
 1 1"(( ; *,,2F288,< 	aAg& 6F"2XX1ABBH
!":"2S"8: *(3"l3*6 (|C:7%i1BC*(Bq9#rE25L1!,0AB%  JJ$$RXX."'0BD::##BHH-/AC,s2::288D&++-#4rua +002S8(+RUBE1_%xx/1ABBH q!7==#3B, Ae ==CVBHH=M 	q006rxx0@ 	$Ae55;VBHH5E 	 q!7==#3B"zz ''1 rzz* 	 **W^^BHH5'))/

); 	

<#6#6HH$!##)6"**#5<=CVBJJ=O 	 ,c13e;cAE/C'..'<1bqb+A!BBG %%'$))+"b"b!12 hh'89; r0   r   c                 \   US   R                  5       R                  5       nUS   nUS   nSnUR                  5       R                  5       n	[        R
                  " [        U5       V
s/ s H  oPM     sn
SS9n	[        R                  " U	S5      R                  5       n	UR                  5       R                  5       n[        R
                  " [        U5       V
s/ s H  oPM     sn
SS9n[        R                  " US5      R                  5       nSu  pU	/U R                  R                  U5      /S	.nU	/U R                  R                  [        R                  " S
5      /U-  5      /S	.nSUS-  US-  4nU/S-  U R                  l        U R                  R                  UUUUSSUUS9u  nn
U R                  R!                  U5      n[        R                  " US5      S-  S-   R                  5       R                  5       nUS   S S 2S S 2S S S24   n["        R$                  " USS5      nUS   n["        R$                  " USS5      SS 2S S 2S S 24   nUS   R                  5       R                  5       nUS   R                  5       R                  5       n['        UUUUS9$ s  sn
f s  sn
f )Nr]   r^   r`   rN   r   )dimzb h w c -> b c h wrZ   )c_concatc_crossattn)rN      rW   rW            F)verboseetaunconditional_guidance_scaleunconditional_conditioningzb c h w -> b h w cr\   rO   rP   ra   rb   )predr]   sizesrb   )cpunumpyfloatr   r?   ri   rangeeinops	rearrangecloner   get_learned_conditioningzeroscontrol_scalesr)   sampledecode_first_stagerc   cliprr   )r*   r   num_samplesstrength
ddim_stepsscaler]   r^   r`   controlrD   
clip_inputHWcondun_condro   samples	x_samplesresultr   r   rb   s                          r.   forwardAnydoorPipeline.forward   s    %))+113	5kF|**,##%++k0BC0B1w0BCK""7,@AGGIYY[%%'
[[eK6H!I6H*6H!I%&(
%%j2FGMMO
 !	 JJ??
KL

 !	

33[[!123kAC
 AFAF#&.Z"_

!&&--).'. . 0
 JJ11':	%%i1EFN!ceEEG 	 1aDbDj)C(|wwtQ$QRAX.]#'')//1 !4599;AAC/	1 	1[ D "Js   )J$J)c                    US   nUS   nUS   nUS   nUu  pgpUu  pp[         R                  " X)U45      nSnXv:X  a  X.U* 2X* 24   X:U-   X-
  2X-   X-
  2S S 24'   [        R                  " UR	                  5       5      R                  SSS5      nUR                  SSS5      R                  5       n[        R                  " US	S
9n[        R                  U0$ Xy:  a'  [        X-
  S-  5      nX-
  U-
  nUS S 2UU* 2S S 24   nO&[        X-
  S-  5      nX-
  U-
  nUUU* 2S S 2S S 24   nUR	                  5       nX.U* 2X* 24   XU-   X-
  2X-   X-
  2S S 24'   [        R                  " U5      R                  SSS5      nUR                  SSS5      R                  5       n[        R                  " US	S
9n[        R                  U0$ )Nr   r]   r   rb   r      r   rN   rK   )mode)rl   rm   r?   
from_numpyrn   permuter   r   	fromarrayr   
OUTPUT_IMGint)r*   rH   r   r]   ra   rb   r   r   r   r   rz   r{   r|   r}   m	gen_imagepad1pad2s                     r.   postprocessAnydoorPipeline.postprocess  s   f~;'	Wo"#67$*zz$R)89=dAbDj9II1fRVmRVBF]A56(()9:BB1aKI!))!Q288:I	>I))95571}%D7T>D4:q()D1}%D7T>DdU
Aq()DNN$	59QB$"*5E	q&-12$$Y/771a@	%%aA.446	OOIE:	%%y11r0   )r)   )r   )rN   rY      rX   )__name__
__module____qualname____firstlineno____doc__strr    staticmethodr(   r   r   r   r   r   r   __static_attributes____classcell__)r-   s   @r.   r   r      s    $4c 4  (p p4S> ph =138n=1
 #38n=1~!2$sCx. !2T#s(^ !2 !2r0   r   )*r!   typingr   r   rl   r   r   rc   requestsr?   PILr   modelscope.metainfor   -modelscope.models.cv.anydoor.cldm.ddim_hackedr   0modelscope.models.cv.anydoor.datasets.data_utilsr   r	   r
   r   r   r   r   modelscope.outputsr   modelscope.pipelines.baser   r   modelscope.pipelines.builderr   modelscope.preprocessors.imager   modelscope.utils.constantr   modelscope.utils.loggerr   loggerregister_moduleimage_to_image_generationanydoorr   r   r0   r.   <module>r      s    
  
      ) E   * 5 2 5 + .	 	##1B1BDG2h G2DG2r0   