
    9i!                         S SK r S SKrS SKrS SKJ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Jr  \R(                  " \\
R*                  S
9 " S S\5      5       rS rS rS rg)    N)Dict)tqdm)MetricswarpListImage)default_group   )Metric)METRICS
MetricKeys)	group_keymodule_namec                   L    \ rS rSrSrS rS\S\4S jrS rSS jr	S	 r
S
 rSrg)VideoStabilizationMetric   z-The metric for video summarization task.
    c                      / U l         / U l        g Ninputsoutputsselfs    m/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/metrics/video_stabilization_metric.py__init__!VideoStabilizationMetric.__init__   s        r   r   c                     [        [        U5      5      nU R                  R                  US   5        U R                  R                  US   S   5        g )Nvideoinputr   )video_mergerwarpprocessr   appendr   )r   r   r   outs       r   addVideoStabilizationMetric.add   sB    ;w/0CL)6'?1-.r   c           	         / n/ n/ n[        U R                  U R                  5       He  u  pE[        XT5      u  pgnUS::  aA  US::  a;  US::  a5  UR	                  U5        UR	                  U5        UR	                  U5        MZ  [        S5        Mg     [        R                  [        U5      [        U5      -  [        R                  [        U5      [        U5      -  [        R                  [        U5      [        U5      -  0$ )Nr	   z.Removed one error item when computing metrics.)zipr   r   metricsr"   printr   CROPPING_RATIOsumlenDISTORTION_VALUESTABILITY_SCORE)	r   CRDVSSoutputr   cropping_ratiodistortion_valuestability_scores	            r   evaluate!VideoStabilizationMetric.evaluate$   s     t{{;MF& >No"'71'<TUAU		.)		*+		/*FG < %%s2wR'8''R3r7):&&B#b'(9
 	
r   c                     U R                   R                  UR                   5        U R                  R                  UR                  5        g r   )r   extendr   )r   others     r   mergeVideoStabilizationMetric.merge8   s.    5<<(EMM*r   c                 2    U R                   U R                  4$ r   r   r   s    r   __getstate__%VideoStabilizationMetric.__getstate__<   s    {{DLL((r   c                 "    Uu  U l         U l        g r   r   )r   states     r   __setstate__%VideoStabilizationMetric.__setstate__?   s    $)!T\r   r   N)r:   r   )__name__
__module____qualname____firstlineno____doc__r   r   r$   r6   r;   r>   rB   __static_attributes__ r   r   r   r      s3    /4 / /

(+)*r   r   c                     U S   SS2SS2SS2S4   nU S   SS2SS2SS2S4   nU S   SS2SS2SS2S4   nU S   SS2SS2SS2S4   nX1-
  nXB-
  n[        U S   UX`S   U S   5      nUU S	   U S   U S   U S
   S.$ )zvideo stabilization postprocess

Args:
    inputs:  input data

Return:
    dict of results:  a dict containing outputs of model.
origin_motionNr   r	   smooth_path
ori_imageswidthheightfpsbase_crop_width)r2   rQ   rO   rP   rR   r   )r   x_pathsy_pathssx_pathssy_pathsnew_x_motion_meshesnew_y_motion_meshes
out_imagess           r   r!   r!   C   s     _%aAqj1G_%aAqj1Gm$Q1aZ0Hm$Q1aZ0H",",vl35H27O%h/1J
 e}"!"34 r   c                    U S   R                  5       R                  [        R                  5      n[	        UR
                  S   5       Vs/ s H  n[        R                  " X   S5      PM     nn[        R                  " SS9R                  n[        R                  " S6 nU S   nU S   nU S	   n[        R                  " X4U S
   XV45      n[        U5       HY  u  p)[        Xu-  S-  5      n
[        X-  U-  5      nXU* 2X* 24   n[        R                  " XU45      nUR!                  U5        M[     UR#                  5         SU0$ s  snf )Nr2   r   )r	      r   z.mp4)suffixmp4vrO   rP   rR   rQ   i   r   )numpyastypenpuint8rangeshape	transposetempfileNamedTemporaryFilenamecv2VideoWriter_fourccVideoWriter	enumerateintresizewriterelease)r   rY   idxoutput_video_pathfourccwhrR   video_writerframehorizontal_bordervertical_border	new_frames                r   r    r    _   s_   !'')00:J ))!,--C 	Z_i0-  
 !336BGG##V,FwAxA./O??#4fUm$%6+L  
+
 3d :;/3a78?*::+,>>? @	JJya&1	9% , &''-s   #Ec                    [         R                  " 5       n[         R                  " 5       nSnSnSn/ n/ n[        R                  " S5      n	/ n
[         R
                  " U 5      n[         R
                  " U5      nUR                  5       nUR                  5       n/ n/ nU(       am  U(       af  UR                  5       u  nnUR                  5       u  nnU(       a)  U(       a"  UR                  U5        UR                  U5        U(       a	  U(       a  Mf  Sn[        SU R                  S5      S   -   S	-   5        [        [        [        U5      5      5       GH  nUU   nUU   nUR                  US 5      u  nnUR                  US 5      u  nnUR                  UUS
S9n/ nU H6  u  nnUR                   UUR                   -  :  d  M%  UR                  U5        M8     [        U5      U:  a  [        R"                  " U Vs/ s H  nUUR$                     R&                  PM     sn5      R)                  SSS
5      n[        R"                  " U Vs/ s H  nUUR*                     R&                  PM     sn5      R)                  SSS
5      n[         R,                  " UU[         R.                  US9u  nn OSnU(       a  GMi  [        R0                  " WS   S
-  US   S
-  -   5      n![        R2                  R5                  USS
2SS
24   5      u  n"n [        R6                  " U"5      S S S2   n"U"S   U"S   -  n#UR                  SU!-  5        UR                  U#5        US-   [        U5      :  d  GM  UUS-      n$UR                  U$S 5      u  n%n&UR                  UU&S
S9n/ nU H6  u  nnUR                   UUR                   -  :  d  M%  UR                  U5        M8     [        U5      U:  a  [        R"                  " U Vs/ s H  nUUR$                     R&                  PM     sn5      R)                  SSS
5      n[        R"                  " U Vs/ s H  nU%UR*                     R&                  PM     sn5      R)                  SSS
5      n[         R,                  " UU[         R.                  US9u  nn U
R                  [        R8                  " U	U5      5        [        R8                  " U	U5      n	GM     U(       a  g/ n'/ n(U
 H{  n)[        R0                  " U)S   S
-  U)S   S
-  -   5      n*[        R:                  " U)S   U)S   5      S-  [        R<                  -  n+U'R                  U*5        U(R                  U+5        M}     [        R>                  R?                  U'5      n,[        R>                  R?                  U(5      n-[        R@                  " U,5      S
-  n,[        R@                  " U-5      S
-  n-[        RB                  " U,S5      n,[        RB                  " U-S5      n-U,S [        U,5      S
-   n,U-S [        U-5      S
-   n-[        RD                  " U,S S 5      [        RD                  " U,5      -  n.[        RD                  " U-S S 5      [        RD                  " U-5      -  n/[        RF                  " [        RH                  " U5      S/5      [        RJ                  " [        RF                  " U5      5      U.U/-   S
-  4$ s  snf s  snf s  snf s  snf )N
   gffffff?g      @   Fzprocessing /:r[   )kr	   )methodransacReprojThresholdT)r   r	   )r   r   r   )r~   r~   r~   )r   r[   )r	   r[   )r	   r         )&rh   	BFMatcherSIFT_creater`   eyeVideoCaptureisOpenedreadr"   r)   splitr   rb   r,   detectAndComputeknnMatchdistancefloat32queryIdxptreshapetrainIdxfindHomographyRANSACsqrtlinalgeigsortmatmularctan2pifftabsdeleter+   minmeanabsolute)0
original_vpred_vbfsiftMIN_MATCH_COUNTratiothreshCR_seqDV_seqPtP_seqvc_ovc_prval_orval_pimgs1imgs1oimg1img1ois_got_bad_itemi
keyPoints1descriptors1keyPoints1odescriptors1omatchesgoodMatchesmnsourcePointsdestinationPointsM_scaleRecoveredrs   r0   img2okeyPoints2odescriptors2oP_seq_tP_seq_rMptransRecoveredthetaRecoveredfft_tfft_rSS_tSS_rs0                                                   r   r(   r(   z   s   	B??D OEFFF	BEJ'DF#D]]_F]]_FEFfyy{		fLLMM%  ff O	-***3/3
3c
9:%E
#$Qxq	 $(#8#8t#D 
L%)%:%:5$%G"] ++lMQ+? DAqzzEAJJ..""1%  {o-::3>'3>a
1::&));' wr1a   !#

4?,4?qAJJ'**K, !wr1a  
 %%!zz&,	.DAq #O   WWQtWaZ!D'1*%<=N99==1Q3!8-DAq
4R4 A1!BMM!n,-MM" 1us5z!q1u-1-B-B5$-O*]++m]a+H #DAqzzEAJJ$66#**1- $ {#o5#%::<G/<GqAJJ/22K/ $wr1a( ! )+

<G4<GqAJJ/22K4 )wr1a( &
 --$)"zz.4	6DAq RYYr1-.YYr1%c %j  GGD1r$x{!:;BtHbh7#=E~&~&  FFJJwEFFJJwEFF5M1EFF5M1EIIeQEIIeQE"3u:?#E"3u:?#E66%)rvve},D66%)rvve},D662776? BFF6N3dTkQ5FG Gy',R/4s   =#[:
#[?
<#\
#\	
)ossysre   typingr   rh   r^   r`   r   modelscope.metainfor   8modelscope.models.cv.video_stabilization.utils.WarpUtilsr   modelscope.utils.registryr   baser
   builderr   r   register_modulevideo_stabilization_metricr   r!   r    r(   rJ   r   r   <module>r      sr    
 
   
   ' 3  ( 	)K)KM)*v )*M)*X8(6SGr   