
    9i0+                     *   S 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\R                  R                  l        Su  rrSrSrS	rSrS
 r " S S\5      r " S S\5      r\
R0                  " \" 5       \" 5       /5      rS rS rS rS rS rS rg)zVideoInpaintingProcess
The implementation here is modified based on STTN,
originally Apache 2.0 License and publicly available at https://github.com/researchmm/STTN
    N)Image)
transformsF)   `   i,        c                     [         R                  " U 5      nUR                  5       u  p#USL a  SnSu  pVnO2S nUR                  SS u  peUR	                  [         R
                  5      nUR                  5         XGXV4$ )NFdecode_error)r   r   r   r      )cv2VideoCapturereadshapegetCAP_PROP_FPSrelease)video_input_pathvideo_inputsuccessframer
   whfpss           p/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/models/cv/video_inpainting/inpainting.pyvideo_processr      s{    ""#34K %%'NG%%	c{{1Qooc../a""    c                   $    \ rS rSrSS jrS rSrg)Stack'   c                     Xl         g Nroll)selfr#   s     r   __init__Stack.__init__)   s    	r   c                    US   R                   nUS:X  a"  U Vs/ s H  o3R                  S5      PM     nnSnUS:X  a;  [        R                  " U Vs/ s H  n[        R                  " US5      PM     snSS9$ US:X  am  U R
                  (       aG  [        R                  " U Vs/ s H&  n[        R                  " U5      S S 2S S 2S S S24   PM(     snSS9$ [        R                  " USS9$ [        SU 35      es  snf s  snf s  snf )	Nr   1Lr   )axisRGBzImage mode )modeconvertnpstackexpand_dimsr#   arrayNotImplementedError)r$   	img_groupr-   imgxs        r   __call__Stack.__call__,   s    |  3;5>?YcS)YI?D3;889E9aR^^Aq19EANNU]yyxx) L)Q!Q4R4Z!8) L%&( ( xx	22%D6&:;; @ F !Ms   C:!C?$-Dr"   N)F)__name__
__module____qualname____firstlineno__r%   r7   __static_attributes__ r   r   r   r   '   s    <r   r   c                   (    \ rS rSrSrSS jrS rSrg)ToTorchFormatTensor=   zConverts a PIL.Image (RGB) or numpy.ndarray (H x W x C) in the range [0, 255]
to a torch.FloatTensor of shape (C x H x W) in the range [0.0, 1.0] c                     Xl         g r!   div)r$   rD   s     r   r%   ToTorchFormatTensor.__init__A   s    r   c                    [        U[        R                  5      (       a7  [        R                  " U5      R                  SSSS5      R                  5       nO[        R                  " [        R                  R                  UR                  5       5      5      nUR                  UR                  S   UR                  S   [        UR                  5      5      nUR                  SS5      R                  SS5      R                  5       nU R                   (       a!  UR#                  5       R!                  S5      nU$ UR#                  5       nU$ )Nr      r         )
isinstancer/   ndarraytorch
from_numpypermute
contiguous
ByteTensorByteStoragefrom_buffertobytesviewsizelenr-   	transposerD   float)r$   picr5   s      r   r7   ToTorchFormatTensor.__call__D   s    c2::&&""3'//1a;FFHC""!!--ckkm<>C((388A;S]CC--1%//15@@BC&*hhciikooc"
 58IIK
r   rC   N)T)r9   r:   r;   r<   __doc__r%   r7   r=   r>   r   r   r@   r@   =   s    L	r   r@   c           	         U R                   u  pnU S:H  R                  5       (       aH  U S[        U5      S[        U5      4S[        U5      S[        U5      /S[        U5      S[        U5      /4$ [        R                  " [        R
                  " U S:H  5      S   5      n[        R                  " [        R
                  " U S:H  5      S   5      n[        R                  " [        R
                  " U S:H  5      S   5      n[        R                  " [        R
                  " U S:H  5      S   5      nXdXu/n[        [        US-  5      S-  5      S-  n	[        [        US-  5      S-  5      S-  n
XI:  a%  XY:  a   Xj:  a  Xz:  a  U S U	2S U
2S S 24   nSU	SU
4nGOXI:  a2  XY:  a-  Xj:  a(  Xz:  a#  U S U	2X*-
  U2S S 24   nSXU
-
  [        U5      4nGOvXI:  a2  XY:  a-  Xj:  a(  Xz:  a#  XU	-
  U2S U
2S S 24   nX-
  [        U5      SU
4nGO?XI:  a>  XY:  a9  Xj:  a4  Xz:  a/  XU	-
  U2X*-
  U2S S 24   nX-
  [        U5      X*-
  [        U5      4nOXI:  a-  XY:  a(  Xj:  a#  Xz:  a  U S U	2S S 2S S 24   nSU	S[        U5      4nOXI:  a-  XY:  a(  Xj:  a#  Xz:  a  U S S 2S U
2S S 24   nS[        U5      SU
4nOXI:  a:  XY:  a5  Xj:  a0  Xz:  a+  XU	-
  U2S S 2S S 24   nX-
  [        U5      S[        U5      4nOYXI:  a:  XY:  a5  Xj:  a0  Xz:  a+  U S S 2X*-
  U2S S 24   nS[        U5      X*-
  [        U5      4nOU nS[        U5      S[        U5      4nXlS   -
  nXLS   -
  nX|S   -
  nX\S   -
  nXXXU/4$ )NrI   r   rH   r      )r   allintr/   minwheremaxround)maskorig_horig_w_hshewswecrop_boxmask_hmask_w	crop_maskres_pixabcds                    r   get_crop_mask_v1ru   S   s   

FAaVa&k#%&FQ%([%')*CK),V)66 	6 
#A&	'B	#A&	'B	#A&	'B	#A&	'BH3vz?Q&'!+F3vz?Q&'!+F
"+BKbk&'6'1,-	fa(
+BKbk&&/&"8!;<	fvos6{;
+BKbk&/&!;<	?CKF;
+BKbk&/1GJK	?CK#f+N
+BKbk&!Q'	faV-
+BKbkGVGQ'	c&k1f-
+BKbk&/A56	?CKCK@
+BKbkFOF2A56	c&k6?CK@	c&k1c&k2
QZA
QZA
QZA
QZAxQ155r   c                 j    / n[        SU[        5       H  nX0;  d  M
  UR                  U5        M     U$ )Nr   )range
ref_lengthappend)neighbor_idslength	ref_indexis       r   get_ref_indexr~      s6    I1fj) Q * r   c                    / n[        SR                  U 5      5        [        U R                  S5      S   R                  S5      S   R                  S5      S   5      n[        U R                  S5      S   R                  S5      S   R                  S5      S   R                  S5      S   5      n[        R
                  " U 5      n[        R                  " UR                  S	5      5      n[        R                  " US:  5      R                  [        R                  5      nSU-
  n[        US-
  US-   5       H+  nUR                  [        R                  " US
-  5      5        M-     U$ )Nzmask_path: {}/r,   mask_rH   rg   r   .r)   rI   )printformatr_   splitr   openr/   r2   r.   astypeuint8rw   ry   	fromarray)mpathmasksstartendmr}   s         r   read_mask_oneImager      s"   E	/
 
 
'(C $**73A6<<SA!DEE
C""7+A.44S9!<BB3GJLC

5A
3 A
Qrxx(A	AA519cAg&U__QW-. 'Lr   c                 2    SnU S:w  a  Sn SnUS:w  a  SnSnU$ )NF   Ti  r>   )r   r   	is_resizes      r   
check_sizer      s/    ICx	Cx	r   c                 X   [         R                  " U 5      nUR                  5         / n/ n/ n/ nU H  nUR                  S5      S   nUR	                  [        UR                  S5      S   5      5        UR	                  [        UR                  S5      S   R                  S5      S   5      5        UR	                  [         R                  R                  X5      5        [        R                  " [         R                  R                  X5      5      nUR	                  U5        M     X4XR4$ )Nr   rH   rg   r   r   )
oslistdirsortr   ry   r_   pathjoinr   imread)		mask_path
mask_namesabs_mask_path	mask_list
begin_listend_list	mask_namemask_name_tmprd   s	            r   get_mask_listr      s    I&JOOMIJH	!03#m11#6q9:;M//4Q7==cB1EFGRWW\\)?@zz"'',,y<=   (99r   c                    [         R                  " U5      n[         R                  " S6 n[         R                  " X8XEU45      n	[	        U5      u  pp/ n[        U
5       GH  u  nn[        X   5      n[        U5      u  nnnnUR                  SS u  nn[        UR                  S   UR                  S   5      nX   nX   n[        SR                  U5      5        [        SR                  U5      5        [        UUS-   [        5       GH  n[        R                  " 5       nU[        -   U::  a  [        nOUU-
  S-   n[        U5       H'  nUR                  5       u  nnUR!                  U5        M)     / n U Hu  n!["        R$                  " U!5      n!U!R'                  US   US   US   US   45      n"U"R)                  [*        [,        4["        R.                  5      n#U R!                  U#5        Mw     [1        U 5      R3                  S5      S-  S-
  n$U  V!s/ s H6  n![4        R6                  " U!5      R9                  [4        R:                  5      PM8     n n!/ n%UUU-
  UU-   U-
    H_  n&U&R'                  US   US   US   US   45      n'U'R)                  [*        [,        4["        R.                  5      n(U%R!                  U(5        Ma     U% V&s/ s HN  n&[4        R<                  " [4        R6                  " U&5      S:g  R9                  [4        R:                  5      S5      PMP     n)n&[1        U%5      R3                  S5      n%[>        R@                  RC                  5       (       a   U$RA                  5       U%RA                  5       n%n$S /U-  n*U RE                  5         [>        RF                  " 5          U$SU%-
  RI                  5       -  n+U+RK                  US[,        [*        5      n+U RL                  RO                  U+5      n+U+RQ                  5       u  nn,n-n.U+RK                  SUU,U-U.5      n+S S S 5        [        SU[R        5       GH   n![        [U        SU![R        -
  5      [W        UU![R        -   S-   5      5       Vs/ s H  nUPM     n/n[Y        U/U5      n0[>        RF                  " 5          U RL                  R[                  W+SU/U0-   S S 2S S 2S S 24   U%SU/U0-   S S 2S S 2S S 24   5      n1[>        R\                  " U RL                  R_                  U1S [a        U/5      2S S 2S S 2S S 24   5      5      Rc                  5       n2U2S-   S-  n2U2Re                  5       Rg                  SSSS5      Ri                  5       S-  n2[        [a        U/5      5       H  n3U/U3   n4[4        R6                  " U2U3   5      R9                  [4        R:                  5      U)U4   -  U U4   SU)U4   -
  -  -   n5U*U4   c  U5U*U4'   M`  U*U4   R9                  [4        Rj                  5      S	-  U5R9                  [4        Rj                  5      S	-  -   U*U4'   M     S S S 5        GM     [        S
[        R                  " 5       U-
  5        [        U5       H  n![4        R6                  " U*U!   5      R9                  [4        R:                  5      U)U!   -  U U!   SU)U!   -
  -  -   n6U(       a  [         R(                  " U6UU45      n6UU!   n7Uu  n8n9n:n;Uu  n<n=n>n?U6U=U?2U<U>24   U7U9U;2U8U:24'   U	Rm                  U75        M     / nGM     GM     URo                  5         g s  sn!f s  sn&f ! , (       d  f       GN#= fs  snf ! , (       d  f       GM*  = f)Nmp4vr   r   rH   z	begin: {}zend: {}rG   rI   g      ?zinpainting time:)8r   r   VideoWriter_fourccVideoWriterr   	enumerater   ru   r   r   r   r   rw   	MAX_frametimer   ry   r   r   cropresizer   r   NEAREST_to_tensors	unsqueezer/   r2   r   r   r1   rL   cudais_availableevalno_gradrX   rT   modelencoderrU   neighbor_striderb   r`   r~   infertanhdecoderrV   detachcpurN   numpyfloat32writer   )@r   video_inputPathr   video_savePathr   w_orih_ori	video_orifourcc
video_saver   r   r   r   img_npyindexrd   r   rp   crop_for_oriimgcrop_for_inpimgrm   rn   r   beginr   r}   
begin_timevideo_lengthframe_countrg   r   frames_tempfi_temprq   
feats_temp
masks_tempr   m_temprr   binary_masks_tempcomp_frames	feats_outrs   feat_hfeat_wrz   ref_ids	pred_featpred_imgjidxr5   compcomplete_framea1b1c1d1a2b2c2d2s@                                                                   r   inpainting_by_model_balancer      s      1I##V,FenMJ5B95M2I8G +t"=#78:J;7gAatzz!}djjm<	!ok  '(is#$ucAgy1AJ9}#("Qw{$\2$>>+5u%  3 KOOA&QZWQZDFMM1a&%--8""1%  %[1;;A>BQFJALMA288A;--bhh7KMJ1u9Q%5%=>QZWQZDFMM1a&%--8!!!$ ? $!#A q 088BAF#  ! %Z0::1=Jzz&&(()3):JOO<MJ
&</KJJL&!j.)?)?)AA	%NN<AqA	!KK//	:	'0~~'7$1ff%NN1lAvvN	 ! 1lO<$Aq?23L!o*=*AB D  D!A  D   
 (lC]]_ % 1 1!!\G%;Q1"DE"1lW&<aA#EF!HI  %zz++%&8s<'8&8!Q&ABD EEKVX  !)11H'||~55aAqAGGICOH"3|#45*1o hhx{3::HH&(9#(>?AL #B%(),=c,B(BBDD 's+3/2K,/:3/?/F/F "

0,.10247JJ$&JJ50255606K, 6 %_ =6 $diikJ&>?<(xxA/66HH 1! 457B1~-a00822 ::dVV,<=D!(!0BB!0BB/3BrE2b5L/Ar"ube|,  0 ) Ge 2 ,D E N! !  %_s-   =\5A\:+A8\?3]
"F]	?
]
]&) r[   r   r   r   r   r/   rL   PILr   torchvisionr   backendscudnnenabledr   r   rx   r   default_fpsr   r   objectr   r@   Composer   ru   r~   r   r   r   r   r>   r   r   <module>r      s   
 
  
    "$   1
	#<F <,& &   %'+>+@!AB26j:&nr   