
    9i	                         S SK Jr  S SKrS SKrS SKrS SKJs  J	r
  S SKJr  S SKJr  SSKJr  SSKJrJr  S r\R*                  " \\R,                  S	9 " S
 S\5      5       rg)    )DictN)Metrics)default_group   )Metric)METRICS
MetricKeysc                    [         R                  " XS9nUR                  5       nSnSnSnU HG  nUS   S:X  a  XGS   US   -
  -  nUS   S:X  a  XWS   US   -
  -  nUS   S	:X  d  M:  XgS   US   -
  -  nMI     XE-   U-   nXXd44$ )
N)abr   insertdelete   r   replace)edSequenceMatcherget_opcodes)	
label_listpre_listyyyr   r   r   itemdistances	            i/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/metrics/ocr_recognition_metric.pycal_distancer      s    
Z4A	
BFFG7h2hb))F7h1gQ''F7iBx$r(**G  (Hg...    )	group_keymodule_namec                   L    \ rS rSrSrS rS\S\4S jrS rSS jr	S	 r
S
 rSrg)OCRRecognitionMetric   z6The metric computation class for ocr recognition.
    c                 J    / U l         / U l        SU l        SU l        SU l        g )Ng        r   )predstargetsloss_sumnsampleiter_sum)selfargskwargss      r   __init__OCRRecognitionMetric.__init__%   s%    
r   outputsinputsc                 j   US   nUS   nUS   nU R                   R                  U5        U R                  R                  U5        U =R                  UR                  R                  5       R                  5       -  sl        U =R                  [        U5      -  sl        U =R                  S-  sl	        g )Nr%   losslabelsr   )
r%   extendr&   r'   datacpunumpyr(   lenr)   )r*   r/   r0   predr2   targets         r   addOCRRecognitionMetric.add,   s    wv!

$F#..00D	!r   c                    SnSnSn[        U R                  U R                  5       H+  u  pE[        XT5      u  pgU[	        U5      -  nX&-  nX5U:H  -  nM-     [        U5      U R                  -  nS[        U5      U-  -
  n	U R                  S:  a  U R                  U R                  -  OSn
[        R                  U[        R                  U	[        R                  U
0$ )Nr   r   )zipr%   r&   r   r8   floatr(   r)   r'   r	   ACCURACYARAVERAGE_LOSS)r*   total_charstotal_distancetotal_fullmatchr9   r:   r   _accuracyrA   average_losss              r   evaluateOCRRecognitionMetric.evaluate6   s    !$**dll;NT&v4KH3v;&K&N$/O	 <
 )DLL8~&448<8It}}t}}4qMM2##\
 	
r   c                     g N )r*   others     r   mergeOCRRecognitionMetric.mergeH       r   c                     g rL   rM   )r*   s    r   __getstate__!OCRRecognitionMetric.__getstate__K   rQ   r   c                     g rL   rM   )r*   states     r   __setstate__!OCRRecognitionMetric.__setstate__N   rQ   r   )r)   r'   r(   r%   r&   N)rN   r"   )__name__
__module____qualname____firstlineno____doc__r-   r   r;   rI   rO   rS   rW   __static_attributes__rM   r   r   r"   r"      s3    4  
$r   r"   )typingr   edit_distancer   r7   nptorchtorch.nn.functionalnn
functionalFmodelscope.metainfor   modelscope.utils.registryr   baser   builderr   r	   r   register_moduleocr_recognition_metricr"   rM   r   r   <module>rm      s[          ' 3  (/" 	)G)GI.6 .I.r   