o
    W+ i                     @   s   d dl m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mZ d	d
 ZdedefddZeje	ejdG dd deZdS )    )DictN)Metrics)generate_summary)default_group   )Metric)METRICS
MetricKeysc                 C   s   t t| |jd }tj|td}tj|td}| |dt| < g }t|jd D ]>}|| |d|jd < ||@ }t|t| }	t|t| }
|	|
 dkrV|d q)d|	 |
 d |	|
  }|| q)|dkrpt |S t|t| S )a   Compare the predicted summary with the user defined one(s).

    :param ndarray predicted_summary: The generated summary from our model.
    :param ndarray user_summary: The user defined ground truth summaries (or summary).
    :param str eval_method: The proposed evaluation method; either 'max' (SumMe) or 'avg' (TVSum).
    :return: The reduced fscore based on the eval_method
    r   )ZdtypeNr      d   max)	r   lenshapenpZzerosintrangesumappend)Zpredicted_summaryuser_summaryZeval_methodmax_lenSGf_scoresuserZ
overlapped	precisionZrecallf_score r   y/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/modelscope/metrics/video_summarization_metric.pyevaluate_summary   s"   r   outputsinputsc           	      C   s   | d }| d   }|d   d }|d   d }|d   d }|d   d }t|g|g|g|gd }t||d}|S )Nscoresr   r   Zchange_pointsn_frames	positionsZavg)Zsqueezecpunumpytolistr   r   )	r   r    r!   r   sbr"   r#   summaryr   r   r   r   calculate_f_score1   s   r)   )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 )VideoSummarizationMetricz-The metric for video summarization task.
    c                 C   s   g | _ g | _d S Nr    r   selfr   r   r   __init__C   s   
z!VideoSummarizationMetric.__init__r   r    c                 C   s   | j | | j| d S r,   )r   r   r    )r/   r   r    r   r   r   addG   s   zVideoSummarizationMetric.addc                 C   s.   dd t | j| jD }tjt|t| iS )Nc                 S   s   g | ]	\}}t ||qS r   )r)   ).0outputinputr   r   r   
<listcomp>L   s    z5VideoSummarizationMetric.evaluate.<locals>.<listcomp>)zipr   r    r	   ZFScorer   r   )r/   r   r   r   r   evaluateK   s   z!VideoSummarizationMetric.evaluateotherc                 C   s    | j |j  | j|j d S r,   )r    extendr   )r/   r8   r   r   r   mergeS   s   zVideoSummarizationMetric.mergec                 C   s   | j | jfS r,   r-   r.   r   r   r   __getstate__W   s   z%VideoSummarizationMetric.__getstate__c                 C   s   |\| _ | _d S r,   r-   )r/   stater   r   r   __setstate__Z   s   z%VideoSummarizationMetric.__setstate__N)r8   r+   )__name__
__module____qualname____doc__r0   r   r1   r7   r:   r;   r=   r   r   r   r   r+   =   s    
r+   )typingr   r%   r   Zmodelscope.metainfor   Z3modelscope.models.cv.video_summarization.summarizerr   Zmodelscope.utils.registryr   baser   Zbuilderr   r	   r   r)   Zregister_moduleZvideo_summarization_metricr+   r   r   r   r   <module>   s   !