o
    W+ i!                     @   s   d dl Z d dlZd dlZd dlmZ d dlZd dlZd dlmZ d dl	m
Z
 d dlmZ d dlmZ ddlmZ dd	lmZmZ ejee
jd
G dd deZdd Zdd Zdd ZdS )    N)Dict)tqdm)MetricswarpListImage)default_group   )Metric)METRICS
MetricKeys)Z	group_keymodule_namec                   @   sL   e Zd ZdZdd ZdedefddZdd	 ZdddZdd Z	dd Z
dS )VideoStabilizationMetricz-The metric for video summarization task.
    c                 C   s   g | _ g | _d S Ninputsoutputsself r   y/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/modelscope/metrics/video_stabilization_metric.py__init__   s   
z!VideoStabilizationMetric.__init__r   r   c                 C   s4   t t|}| j|d  | j|d d  d S )Nvideoinputr   )video_mergerwarpprocessr   appendr   )r   r   r   outr   r   r   add   s   zVideoStabilizationMetric.addc           	      C   s   g }g }g }t | j| jD ],\}}t||\}}}|dkr5|dkr5|dkr5|| || || qtd qtjt|t	| tj
t|t	| tjt|t	| iS )Nr   z.Removed one error item when computing metrics.)zipr   r   metricsr   printr   ZCROPPING_RATIOsumlenZDISTORTION_VALUEZSTABILITY_SCORE)	r   CRDVZSSoutputr   Zcropping_ratioZdistortion_valueZstability_scorer   r   r   evaluate$   s   


z!VideoStabilizationMetric.evaluateotherc                 C   s    | j |j  | j|j d S r   )r   extendr   )r   r'   r   r   r   merge8   s   zVideoStabilizationMetric.mergec                 C   s   | j | jfS r   r   r   r   r   r   __getstate__<   s   z%VideoStabilizationMetric.__getstate__c                 C   s   |\| _ | _d S r   r   )r   stater   r   r   __setstate__?   s   z%VideoStabilizationMetric.__setstate__N)r'   r   )__name__
__module____qualname____doc__r   r   r   r&   r)   r*   r,   r   r   r   r   r      s    
r   c                 C   s   | d dddddddf }| d dddddddf }| d dddddddf }| d dddddddf }|| }|| }t | d ||| d | d }|| d	 | d | d | d
 dS )z video stabilization postprocess

    Args:
        inputs:  input data

    Return:
        dict of results:  a dict containing outputs of model.
    Zorigin_motionNr   r   Zsmooth_pathZ
ori_imageswidthheightfpsbase_crop_width)r%   r3   r1   r2   r4   r   )r   Zx_pathsZy_pathsZsx_pathsZsy_pathsZnew_x_motion_meshesZnew_y_motion_meshes
out_imagesr   r   r   r   C   s     	   
r   c                    s   | d   tj  fddt jd D  tjddj}t	j
d }| d }| d	 }| d
 }t	||| d ||f}t D ]-\}}t|| d }	t|	| | }
||
|
 |	|	 f }t	|||f}|| q@|  d|iS )Nr%   c                    s   g | ]
}t  | d qS ))r      r   )npZ	transpose).0idxr5   r   r   
<listcomp>a   s    z video_merger.<locals>.<listcomp>r   z.mp4)suffixZmp4vr1   r2   r4   r3   i   r   )numpyZastyper7   Zuint8rangeshapetempfileNamedTemporaryFilenamecv2ZVideoWriter_fourccZVideoWriter	enumerateintresizewriterelease)r   Zoutput_video_pathZfourccwhr4   Zvideo_writerr9   frameZhorizontal_borderZvertical_borderZ	new_framer   r:   r   r   _   s,   


r   c           -         sp  t  }t  }d}d}d}g }g }td}	g }
t | }t |}| }| }g }g }|rQ|rQ| \}}| \}}|rM|rM|| || |rQ|s3d}t	d| 
dd  d	  ttt|D ]*}|| }|| }||d \ }||d \}|j||d
d}g }|D ]\}}|j||j k r|| qt||krt fdd|D ddd
}tfdd|D ddd
}t j||t j|d\}}nd}|st|d d
 |d d
  }tj|dd
dd
f \} }t| d d d } | d | d  }!|d|  ||! |d t|k r||d  }"||"d \}#|j||#d
d}g }|D ]\}}|j||j k rM|| q;t||krtfdd|D ddd
}tfdd|D ddd
}t j||t j|d\}}|
t|	| t|	|}	qh|rdS g }$g }%|
D ]+}&t|&d d
 |&d d
  }'t|&d |&d d tj }(|$|' |%|( qtj|$})tj|%}*t|)d
 })t|*d
 }*t|)d})t|*d}*|)d t|)d
  })|*d t|*d
  }*t|)d d t|) }+t|*d d t|* },t t!|dgt"t ||+|, d
 fS )N
   gffffff?g      @   Fzprocessing /:r6   )kc                       g | ]} |j  jqS r   ZqueryIdxptr8   m)
keyPoints1r   r   r;          zmetrics.<locals>.<listcomp>r   c                    rR   r   ZtrainIdxrT   rU   keyPoints1or   r   r;      rX   )methodZransacReprojThresholdT)r   r   )r   r   r   c                    rR   r   rS   rU   rZ   r   r   r;      rX   c                    rR   r   rY   rU   )keyPoints2or   r   r;      rX   )rO   rO   rO   )r   r6   )r   r6   )r   r         )#rC   Z	BFMatcherZSIFT_creater7   eyeZVideoCaptureZisOpenedreadr   r    splitr   r>   r"   ZdetectAndComputeZknnMatchZdistanceZfloat32ZreshapeZfindHomographyZRANSACsqrtZlinalgZeigsortmatmulZarctan2piZfftabsdeleter!   minmeanabsolute)-Z
original_vZpred_vbfZsiftZMIN_MATCH_COUNTratioZthreshZCR_seqZDV_seqZPtZP_seqZvc_oZvc_pZrval_oZrval_pZimgs1Zimgs1oZimg1Zimg1oZis_got_bad_itemiZdescriptors1Zdescriptors1omatchesZgoodMatchesrV   nZsourcePointsZdestinationPointsM_ZscaleRecoveredrI   r$   Zimg2oZdescriptors2oZP_seq_tZP_seq_rZMpZtransRecoveredZthetaRecoveredZfft_tZfft_rZSS_tZSS_rr   )rW   r[   r]   r   r   z   s   







 





r   )ossysr@   typingr   rC   r=   r7   r   Zmodelscope.metainfor   Z8modelscope.models.cv.video_stabilization.utils.WarpUtilsr   Zmodelscope.utils.registryr   baser	   Zbuilderr
   r   Zregister_moduleZvideo_stabilization_metricr   r   r   r   r   r   r   r   <module>   s&   ,