
    9i                     0   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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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\R@                  " \RB                  \RB                  S9 " S S\5      5       r"g)    )AnyDictN)default_collate)	Pipelines)FFTInpainting)refine_predict)
OutputKeys)InputPipeline)	PIPELINES)	LoadImage)Tasks)
get_logger)module_namec                      ^  \ rS rSr  SS\4U 4S jjjrS rS rS rS r	S\
\\4   S	\
\\4   4S
 jrS\
\\4   S	\
\\4   4S jrS rS\
\\4   S	\
\\4   4S jrSrU =r$ )ImageInpaintingPipeline   modelc                   > [        U[        5      (       d   S5       e[        TU ]  " S	USS.UD6  X0l        [
        R                  SU 35        [        USS9U l        U R                  (       d%  U R                  R                  U R                  5        U R                  R                  5         [
        R                  SU R                   35        X l        g)
z$
model: model id on modelscope hub.
zmodel must be a single strF)r   auto_collatezloading model from dir T)predict_onlyz)loading model done, refinement is set to N )
isinstancestrsuper__init__refineloggerinfor   infer_modeltodeviceevalpad_out_to_modulo)selfr   r$   r   kwargs	__class__s        q/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/pipelines/cv/image_inpainting_pipeline.pyr    ImageInpaintingPipeline.__init__   s     %%%C'CC%Cu5CFC-eW56(TB{{,?}MN!2    c           	         [        U[        R                  5      (       a  UR                  U5      $ [        R
                  " U5      (       a  UR                  U5      $ [        U[        [        45      (       a!  U Vs/ s H  o0R                  X25      PM     sn$ [        U[        5      (       a4  UR                  5        VVs0 s H  u  pEX@R                  XR5      _M     snn$ [        S[        U5       35      es  snf s  snnf )NzUnexpected type )r   nnModuler!   torch	is_tensortuplelistmove_to_devicedictitems
ValueErrortype)r%   objr"   elnamevals         r(   r2   &ImageInpaintingPipeline.move_to_device/   s    c299%%66&>!??366&>!cE4=))>ABc''3cBBc4   "%!,ID ))#66!,  +DI;788 Cs   <C9C>c                 |    UR                   S:X  a  [        R                  " US5      nUR                  S5      S-  nU$ )N   )   r      float32   )ndimnp	transposeastype)r%   imgout_imgs      r(   
transforms"ImageInpaintingPipeline.transforms=   s5    88q=,,sI.C**Y'#-r*   c                 *    X-  S:X  a  U$ X-  S-   U-  $ )Nr   r?   r   )r%   xmods      r(   ceil_modulo#ImageInpaintingPipeline.ceil_moduloC   s!    7a<H1##r*   c                     UR                   u  p4nU R                  XB5      nU R                  XR5      n[        R                  " USSXd-
  4SXu-
  44SS9$ )N)r   r   r   	symmetricmode)shaperM   rC   pad)r%   rF   rL   channelsheightwidth
out_height	out_widths           r(   pad_img_to_modulo)ImageInpaintingPipeline.pad_img_to_moduloH   s`    "%))%%%f2
$$U0	vv&1j12Q	8I4JK 	r*   inputreturnc                 b   [        US   [        5      (       ah  US   US   p2[        R                  " U5      nU R	                  U5      n[
        R                  " [        SS9" U5      S   5      nU R	                  U5      nO[        US   [        R                  R                  5      (       ad  US   nU R	                  [
        R                  " U5      5      nUS   R                  S5      nU R	                  [
        R                  " U5      5      nO[        S5      e[        XES   S9nU R                  bi  U R                  S:  aY  US	   R                  SS  US
'   U R                  US	   U R                  5      US	'   U R                  US   U R                  5      US'   U R                  U5      nU$ )NrF   maskLrQ   zRinput should be either str or PIL.Image, and both inputs should have the same type)N.)imager_   r?   ra   unpad_to_size)r   r   r   convert_to_ndarrayrH   rC   arrayPILImageconvert	TypeErrorr3   r$   rS   rZ   perform_inference)r%   r\   
image_name	mask_namerF   r_   results          r(   
preprocess"ImageInpaintingPipeline.preprocessP   s   eElC(($)%L%-	..z:C//#&C88I3/	:5ABD??4(Deciioo66,C//"((3-0C=((-D??288D>2Dd  C9o6!!-$2H2H12L&,Wo&;&;AB&?F?#"44VG_595K5KMF7O!33F6N484J4JLF6N
 ''/r*   c                 &    [         R                  U0$ N)r	   
OUTPUT_IMG)r%   r\   s     r(   forwardImageInpaintingPipeline.forwardn   s    %%u--r*   c                    [        U/5      nU R                  (       a  SU;   d   S5       eS[        U R                  5      ;   d   S5       e[        U R                  5      R	                  S5      S   n[        UU R                  UU R                  SSS	S
SS9	nUS   R                  SSS5      R                  5       R                  5       R                  5       nO[        R                  " 5          U R                  X R                  5      nUS   S:  S-  US'   U R                  U5      nUS   S   R                  SSS5      R                  5       R                  5       R                  5       nUR                  SS 5      nUb  Uu  pgUS U2S U24   nS S S 5        [         R"                  " WS-  SS5      R%                  S5      n[&        R(                  " U[&        R*                  5      nU$ ! , (       d  f       N_= f)Nrb   z,Unpadded size is required for the refinementcudazGPU is required for refinement:   gMb`?i   r=   i )gpu_idsmodulon_iterslrmin_side
max_scales	px_budgetr   r?   r>   r_   	inpaintedrA   uint8)r   r   r   r"   splitr   r    r$   permutedetachcpunumpyr.   no_gradr2   getrC   cliprE   cv2cvtColorCOLOR_RGB2BGR)r%   databatchry   cur_resrb   orig_height
orig_widths           r(   ri   )ImageInpaintingPipeline.perform_inferenceq   s   ';;"e+[-[[+S--O/OO-$++&,,S1"5G$  -- 	"G aj((Aq188:>>@FFHG++E;;?!&v!2a 7f((/,Q/77q!#VXcceEEG  %		/4 @ ,.;+K%l{lKZK&?@G ! '''C-C077@,,w(9(9: !s   -B"G((
G6inputsc                     U$ rp   r   )r%   r   s     r(   postprocess#ImageInpaintingPipeline.postprocess   s    r*   )r    r$   r   )   F)__name__
__module____qualname____firstlineno__r   r   r2   rH   rM   rZ   r   r   rm   rr   ri   r   __static_attributes____classcell__)r'   s   @r(   r   r      s     $%33 3&9$
S#X 4S> <.T#s(^ .S#X .B$sCx. T#s(^  r*   r   )#typingr   r   r   r   rC   re   r.   torch.nnr,   torch.utils.data._utils.collater   modelscope.metainfor   %modelscope.models.cv.image_inpaintingr   0modelscope.models.cv.image_inpainting.refinementr   modelscope.outputsr	   modelscope.pipelines.baser
   r   modelscope.pipelines.builderr   modelscope.preprocessors.imager   modelscope.utils.constantr   modelscope.utils.loggerr   r   register_moduleimage_inpaintingr   r   r*   r(   <module>r      sx     
  
   ; ) ? K ) 5 2 4 + .	 		(B(BDyh yDyr*   