o
    ߥi	                     @   s   d dl mZ d dlZd dlZd dlZd dlm  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ejeejd
G dd deZdS )    )DictN)Metrics)default_group   )Metric)METRICS
MetricKeysc           	      C   s   t j| |d}| }d}d}d}|D ]2}|d dkr%||d |d  7 }|d dkr5||d |d  7 }|d d	krE||d |d  7 }q|| | }||||ffS )
N)abr   insertdelete   r   replace)edSequenceMatcherget_opcodes)	
label_listpre_listyyyr   r   r   itemdistance r   ]/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/metrics/ocr_recognition_metric.pycal_distance   s   r   )	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 )OCRRecognitionMetricz6The metric computation class for ocr recognition.
    c                 O   s"   g | _ g | _d| _d| _d| _d S )Ng        r   )predstargetsloss_sumnsampleiter_sum)selfargskwargsr   r   r   __init__%   s
   
zOCRRecognitionMetric.__init__outputsinputsc                 C   sl   |d }|d }|d }| j | | j| |  j|j  7  _|  jt|7  _|  j	d7  _	d S )Nr    losslabelsr   )
r    extendr!   r"   datacpunumpyr#   lenr$   )r%   r)   r*   predr+   targetr   r   r   add,   s   zOCRRecognitionMetric.addc                 C   s   d}d}d}t | j| jD ]\}}t||\}}|t|7 }||7 }|||k7 }qt|| j }dt||  }	| jdkrC| j| j nd}
t	j
|t	j|	t	j|
iS )Nr   r   )zipr    r!   r   r1   floatr#   r$   r"   r   ACCURACYARAVERAGE_LOSS)r%   total_charstotal_distancetotal_fullmatchr2   r3   r   _accuracyr8   average_lossr   r   r   evaluate6   s   zOCRRecognitionMetric.evaluateotherc                 C      d S Nr   )r%   rA   r   r   r   mergeH      zOCRRecognitionMetric.mergec                 C   rB   rC   r   )r%   r   r   r   __getstate__K   rE   z!OCRRecognitionMetric.__getstate__c                 C   rB   rC   r   )r%   stater   r   r   __setstate__N   rE   z!OCRRecognitionMetric.__setstate__N)rA   r   )__name__
__module____qualname____doc__r(   r   r4   r@   rD   rF   rH   r   r   r   r   r      s    

r   )typingr   edit_distancer   r0   nptorchtorch.nn.functionalnn
functionalFmodelscope.metainfor   modelscope.utils.registryr   baser   builderr   r   r   register_moduleocr_recognition_metricr   r   r   r   r   <module>   s    