o
    )j	                     @   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)edZSequenceMatcherZget_opcodes)	Z
label_listZpre_listyyyr   r   r   itemdistance r   j/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/metrics/ocr_recognition_metric.pycal_distance   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 )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   r,   floatr   r   r   r   ZACCURACYARZAVERAGE_LOSS)r    Ztotal_charsZtotal_distanceZtotal_fullmatchr-   r.   r   _Zaccuracyr2   Zaverage_lossr   r   r   evaluate6   s   zOCRRecognitionMetric.evaluateotherc                 C      d S Nr   )r    r5   r   r   r   mergeH      zOCRRecognitionMetric.mergec                 C   r6   r7   r   )r    r   r   r   __getstate__K   r9   z!OCRRecognitionMetric.__getstate__c                 C   r6   r7   r   )r    stater   r   r   __setstate__N   r9   z!OCRRecognitionMetric.__setstate__N)r5   r   )__name__
__module____qualname____doc__r#   r   r/   r4   r8   r:   r<   r   r   r   r   r      s    

r   )typingr   Zedit_distancer   r+   npZtorchZtorch.nn.functionalnnZ
functionalFZmodelscope.metainfor   Zmodelscope.utils.registryr   baser   builderr   r   r   Zregister_moduleZocr_recognition_metricr   r   r   r   r   <module>   s    