o
    ߥ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   )dtypeNr      d   max)	r   lenshapenpzerosintrangesumappend)predicted_summaryuser_summaryeval_methodmax_lenSGf_scoresuser
overlapped	precisionrecallf_score r"   a/home/ubuntu/.local/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   change_pointsn_frames	positionsavg)squeezecpunumpytolistr   r$   )	r%   r&   r'   r   sbr)   r*   summaryr!   r"   r"   r#   calculate_f_score1   s   r2   )	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 r6   )r%   r   r&   )r9   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"   )r2   ).0outputinputr"   r"   r#   
<listcomp>L   s    z5VideoSummarizationMetric.evaluate.<locals>.<listcomp>)zipr%   r&   r	   FScorer   r   )r9   r   r"   r"   r#   evaluateK   s   z!VideoSummarizationMetric.evaluateotherc                 C   s    | j |j  | j|j d S r6   )r&   extendr%   )r9   rC   r"   r"   r#   mergeS   s   zVideoSummarizationMetric.mergec                 C   s   | j | jfS r6   r7   r8   r"   r"   r#   __getstate__W   s   z%VideoSummarizationMetric.__getstate__c                 C   s   |\| _ | _d S r6   r7   )r9   stater"   r"   r#   __setstate__Z   s   z%VideoSummarizationMetric.__setstate__N)rC   r5   )__name__
__module____qualname____doc__r:   r   r;   rB   rE   rF   rH   r"   r"   r"   r#   r5   =   s    
r5   )typingr   r.   r   modelscope.metainfor   3modelscope.models.cv.video_summarization.summarizerr   modelscope.utils.registryr   baser   builderr   r	   r$   r2   register_modulevideo_summarization_metricr5   r"   r"   r"   r#   <module>   s   !