
    9i;                        S SK r S SK Jr  S SKJr  S SKrS SKrS SKrS SKJ	s  J
r  S SKJr  S SKJr  S SKJrJr  S SKJr  \R*                  " \\R,                  S9 " S	 S
\5      5       rS rSS jrS r     SS jrS rg)    N)exp)Dict)Metrics)Metric)METRICS
MetricKeys)default_group)	group_keymodule_namec                   b   ^  \ rS rSrSrSrSrU 4S jrS\S\4S jr	S	 r
SS
 jrS rS rSrU =r$ )VideoFrameInterpolationMetric   zdThe metric computation class for video frame interpolation,
which will return PSNR, SSIM and LPIPS.
predtargetc                    > [         [        U ]  5         / U l        / U l        [
        R                  " SS9R                  5       U l        g )Nalex)net)	superr   __init__predslabelslpipsLPIPScudaloss_fn_alex)self	__class__s    s/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/metrics/video_frame_interpolation_metric.pyr   &VideoFrameInterpolationMetric.__init__   s9    +T;=
!KKF388:    outputsinputsc                     U[         R                     nU[         R                     nU R                  R	                  U5        U R
                  R	                  U5        g N)r   
label_name	pred_namer   appendr   )r   r!   r"   ground_truthseval_resultss        r   add!VideoFrameInterpolationMetric.add#   sH     = H HI<FFG

,'=)r    c           	         / / / p2n[         R                  " 5          [        U R                  U R                  5       H  u  pEUR                  S5      UR                  S5      pvUS S 2S S 2SU2SU24   nUR                  [        XT5      5        UR                  [        XT5      5        UR                  [        XTU R                  5      5        M     S S S 5        [        R                  [        R                  " U5      [        R                  [        R                  " U5      [        R                   [        R                  " U5      0$ ! , (       d  f       N|= f)N      r   )torchno_gradzipr   r   sizer'   calculate_psnrcalculate_ssimcalculate_lpipsr   r   PSNRnpmeanSSIMr   )r   	psnr_list	ssim_list
lpips_listr   labelheightwidths           r   evaluate&VideoFrameInterpolationMetric.evaluate)   s    +-r2j	]]_!$TZZ!= %

1uzz!}Aq!F(AeG34  !<=  !<=!!#E1B1BCE ">  OORWWY/OORWWY/bggj1
 	
 _s   B5E
Ec                     U R                   R                  UR                   5        U R                  R                  UR                  5        g r$   )r   extendr   )r   others     r   merge#VideoFrameInterpolationMetric.merge<   s.    

%++&5<<(r    c                 2    U R                   U R                  4$ r$   )r   r   )r   s    r   __getstate__*VideoFrameInterpolationMetric.__getstate__@   s    zz4;;&&r    c                 B    U R                  5         Uu  U l        U l        g r$   )r   r   r   )r   states     r   __setstate__*VideoFrameInterpolationMetric.__setstate__C   s    "'
DKr    )r   r   r   )rD   r   )__name__
__module____qualname____firstlineno____doc__r&   r%   r   r   r*   r@   rE   rH   rL   __static_attributes____classcell__)r   s   @r   r   r      sE     IJ;*4 * *
&)'( (r    r   c                     [         R                  " [        U 5       Vs/ s H)  n[        X S-  -
  S-  * [	        SUS-  -  5      -  5      PM+     sn5      nX3R                  5       -  $ s  snf )Nr-   )r/   Tensorranger   floatsum)window_sizesigmaxgausss       r   gaussianr^   H   sm    LL{##A 	a""Q&&q5!8|)<<=# E 99;	s   0A'c                     [        U S5      R                  S5      nUR                  UR                  5       5      nUR                  S5      UR                  5       -  nUR	                  SXU U 5      R                  5       R                  U5      nU$ )Ng      ?   r-   )r^   	unsqueezemmtexpand
contiguousto)rZ   channeldevice
_1D_window
_2D_window
_3D_windowwindows          r   create_window_3drm   P   sx    +s+55a8Jz||~.J%%a(JLLN;Jq'*,,6JLF Mr    c           	          S[         R                  " [        R                  " U S   US   -
  U S   US   -
  -  5      R	                  5       R
                  5      -  nU$ )Nir   )mathlog10r/   r8   cpudata)img1img2psnrs      r   r3   r3   Y   sX    

DGd1g%$q'DG*;<=AACHHJ JDKr    c                    UcC  [         R                  " U 5      S:  a  SnOSn[         R                  " U 5      S:  a  SnOSnXx-
  n	OUn	Sn
U R                  5       u    pnUc:  [        X,U5      n[	        USU R
                  S9R                  U R
                  5      nU R                  S5      n UR                  S5      n[        R                  " [        R                  " U SS	S
9UU
SS9n[        R                  " [        R                  " USS	S
9UU
SS9nUR                  S5      nUR                  S5      nUU-  n[        R                  " [        R                  " X -  SS	5      UU
SS9U-
  n[        R                  " [        R                  " X-  SS	5      UU
SS9U-
  n[        R                  " [        R                  " X-  SS	5      UU
SS9U-
  nSU	-  S-  nSU	-  S-  nSU-  U-   nUU-   U-   n[         R                  " UU-  5      nSU-  U-   U-  UU-   U-   U-  -  nU(       a  UR                  5       nO/UR                  S5      R                  S5      R                  S5      nU(       a  UU4$ UR                  5       $ )N      r`   g      r   )rg   rh   )   rz   rz   rz   rz   rz   	replicate)mode)paddinggroupsr-   g{Gz?gQ?g       @)r/   maxminr2   rm   rh   rf   ra   Fconv3dpadpowr8   rq   )rs   rt   rZ   rl   size_averagefull	val_rangemax_valmin_valLpadd_r>   r?   	real_sizemu1mu2mu1_sqmu2_sqmu1_mu2	sigma1_sq	sigma2_sqsigma12C1C2v1v2csssim_maprets                                 r   r4   r4   _   s    99T?S GG99T?T!GGD IIKQ5~U3	!q668bo 	 >>!D>>!D
((	d&[9	C
 ((	d&[9	C WWQZFWWQZFCiG	dk-{;	 	I
 	dk-{;	 	I
 hh	dk-{;	 	G (QB
(QB	w	B	Y		#B	BG	BWr!R'Vf_r-AR,GHHmmommA##A&++A.Bw779r    c                 n    U S-  S-
  n US-  S-
  nU" X5      nUR                  5       R                  5       $ )Nr-   r`   )rq   item)rs   rt   r   ds       r   r5   r5      s8    !8a<D!8a<DT A557<<>r    )r`   N)   NTFN)ro   r   typingr   r   numpyr7   r/   torch.nn.functionalnn
functionalr   modelscope.metainfor   modelscope.metrics.baser   modelscope.metrics.builderr   r   modelscope.utils.registryr	   register_module video_frame_interpolation_metricr   r^   rm   r3   r4   r5    r    r   <module>r      s            ' * : 3 	88:/(F /(:/(d  " $!Pfr    