
    ՏkhI^                     h    d Z ddlZddlZddlZddlmZ ddlmZ	 ddl
Z
 G d d      Z G d d	      Zy)
tsungyi    N)defaultdict   )maskc                   F    e Zd ZddZd Zd Zd Zd Zd ZddZ	d	 Z
d
 Zy)COCOevalNc                    |st        d       || _        || _        t        t              | _        i | _        t        t              | _        t        t              | _        t        |      | _
        i | _        g | _        i | _        |Qt        |j                               | j                  _        t        |j#                               | j                  _        yy)z
        Initialize CocoEval using coco APIs for gt and dt
        :param cocoGt: coco object with ground truth annotations
        :param cocoDt: coco object with detection results
        :return: None
        z/iouType not specified. use default iouType segm)iouTypeN)printcocoGtcocoDtr   listevalImgseval_gts_dtsParamsparams_paramsEvalstatsioussorted	getImgIdsimgIds	getCatIdscatIds)selfr   r   r
   s       P/var/www/teggl/fontify/venv/lib/python3.12/site-packages/pycocotools/cocoeval.py__init__zCOCOeval.__init__<   s     CD#D)	%	%	W-
	~!'(8(8(:!;DKK!'(8(8(:!;DKK     c                    d }| j                   }|j                  r| j                  j                  | j                  j	                  |j
                  |j                              }| j                  j                  | j                  j	                  |j
                  |j                              }n~| j                  j                  | j                  j	                  |j
                              }| j                  j                  | j                  j	                  |j
                              }|j                  dk(  r& ||| j                          ||| j                         |D ]@  }d|v r|d   nd|d<   d|v xr |d   |d<   |j                  dk(  s/|d	   dk(  xs |d   |d<   B t        t              | _        t        t              | _        |D ](  }| j                  |d
   |d   f   j                  |       * |D ](  }| j                  |d
   |d   f   j                  |       * t        t              | _        i | _        y)z^
        Prepare ._gts and ._dts for evaluation based on params
        :return: None
        c                 >    | D ]  }|j                  |      }||d<    y )Nsegmentation)annToRLE)annscocoannrles       r   _toMaskz"COCOeval._prepare.<locals>._toMaskY   s)     *mmC(&)N#*r    )r   r   )r   segmignorer   iscrowd	keypointsnum_keypointsimage_idcategory_idN)r   useCatsr   loadAnns	getAnnIdsr   r   r   r
   r   r   r   r   appendr   r   )r   r)   pgtsdtsgtdts          r   _preparezCOCOeval._prepareT   s   
	*
 KK99$$T[[%:%:!((STS[S[%:%\]C$$T[[%:%:!((STS[S[%:%\]C$$T[[%:%:!((%:%KLC$$T[[%:%:!((%:%KLC 99C%C% 	JB+3r>2h<qBxL$?<r)}BxLyyK' "? 3q 8IR\8		J
  %	%	 	DBIIbnb&778??C	D 	DBIIbnb&778??C	D#D)	r    c                    t        j                          }t        d       | j                  }|j                  <|j                  dk(  rdnd|_        t        dj                  |j                               t        dj                  |j                               t        t        j                  |j                              |_	        |j                  r-t        t        j                  |j                              |_        t        |j                        |_        || _        | j                          |j                  r|j                  ndg}|j                  dk(  s|j                  dk(  r| j                  }n|j                  d	k(  r| j                   }|j                  D ci c]  }|D ]  }||f ||        c}}| _        | j$                  }|j                  d   }|D 	cg c]/  }|j&                  D ]  }	|j                  D ]  } ||||	|         1 c}}	}| _        t+        j,                  | j                        | _        t        j                          }
t        d
j                  |
|z
               yc c}}w c c}}	}w )z
        Run per image evaluation on given images and store results (a list of dict) in self.evalImgs
        :return: None
        zRunning per image evaluation...Nr   r*   bboxz7useSegm (deprecated) is not None. Running {} evaluationzEvaluate annotation type *{}*r-   DONE (t={:0.2f}s).)timer   r   useSegmr
   formatr   npuniquer   r1   r   r   maxDetsr:   
computeIoU
computeOksr   evaluateImgareaRngr   copydeepcopyr   )r   ticr5   r   rE   imgIdcatIdrG   maxDetrH   tocs              r   evaluatezCOCOeval.evaluatey   s
   
 iik/0KKyy "#))q.fAIKRRSTS\S\]^-44QYY?@		!((+,99BIIahh/0AH199%	YYRD99!))v"5JYY+%J%&XX-!%+-! U^Zu%== -^ -	 &&2$  !		hh  %UE7FC C C 
  ==5iik"))#c'23-s   I7#4I=c                    | j                   }|j                  r#| j                  ||f   }| j                  ||f   }nb|j                  D cg c]  }| j                  ||f   D ]  }|  }}}|j                  D cg c]  }| j                  ||f   D ]  }|  }}}t        |      dk(  rt        |      dk(  rg S t        j                  |D cg c]  }|d    
 c}d      }	|	D 
cg c]  }
||
   	 }}
t        |      |j                  d   kD  r|d|j                  d    }|j                  dk(  r'|D cg c]  }|d   	 c}}|D cg c]  }|d   	 c}}nA|j                  dk(  r'|D cg c]  }|d   	 c}}|D cg c]  }|d   	 c}}nt        d	      |D cg c]  }t        |d
          }}t        j                  |||      }|S c c}}w c c}}w c c}w c c}
w c c}w c c}w c c}w c c}w c c}w )Nr   score	mergesortkindr=   r*   r#   r<   z#unknown iouType for iou computationr,   )r   r1   r   r   r   lenrB   argsortrD   r
   	Exceptionint	maskUtilsiou)r   rL   rM   r5   r8   r9   cId_dindsigor,   r   s                  r   rE   zCOCOeval.computeIoU   s   KK995;'B5;'B xxF591EFA!F!FBF xxF591EFA!F!FBFr7a<CGaKIzz31AgJ;3+F!"be""r7QYYr]"!AIIbM"B99,./q>"/A,./q>"/AYY& $&'q6'A$&'q6'AABB /113q|$11}}Qq)+ GF 4"
 0/''
 2s6   G<GG)G 7G%
G*-G/ G4G9c                    | j                   }| j                  ||f   }| j                  ||f   }t        j                  |D cg c]  }|d    
 c}d      }|D cg c]  }||   	 }}t        |      |j                  d   kD  r|d|j                  d    }t        |      dk(  st        |      dk(  rg S t        j                  t        |      t        |      f      }	|j                  }
|
dz  dz  }t        |
      }t        |      D ]  \  }}t        j                  |d         }|dd d   }|d	d d   }|dd d   }t        j                  |dkD        }|d
   }|d   |d   z
  }|d   |d   dz  z   }|d	   |d   z
  }|d	   |d   dz  z   }t        |      D ]=  \  }}t        j                  |d         }|dd d   }|d	d d   }|dkD  r||z
  }||z
  }nt        j                  |      }t        j                  |||z
  fd      t        j                  |||z
  fd      z   }t        j                  |||z
  fd      t        j                  |||z
  fd      z   }|dz  |dz  z   |z  |d   t        j                  d	      z   z  dz  }|dkD  r||dkD     }t        j                  t        j                  |             |j                   d   z  |	||f<   @  |	S c c}w c c}w )NrR   rS   rT   r=   r      r-      r   r<   axisarea)r   r   r   rB   rW   rV   rD   zeroskpt_oks_sigmas	enumeratearraycount_nonzeromaxspacingsumexpshape) r   rL   rM   r5   r6   r7   r^   r_   r`   r   sigmasvarskjr8   ra   xgygvgk1bbx0x1y0y1r9   xdyddxdyzes                                    r   rF   zCOCOeval.computeOks   s   KKiiu%iiu%zz41AgJ;4;G#$!s1v$$s8aiim#a		"&Cs8q=CHMIxxS3s8,-!!
QKs^ 	=EArK)A14a4BqAw"Qqt!tW!!"q&)BFBAABRURUQY%6AABRURUQY%6"3 =2HHR_-qt!tW1QTT7ba4bBbB !ABrE
22661be*!3LLBBrE
22661be*!3LLBURU]d*bjA.FG!K6QiAVVBFFA2J/!''!*<QT
=	=0 I 5$s   KK$c                 Z   | j                   }|j                  r#| j                  ||f   }| j                  ||f   }nb|j                  D 	cg c]  }| j                  ||f   D ]  }	|	  }}}	|j                  D 	cg c]  }| j                  ||f   D ]  }	|	  }}}	t        |      dk(  rt        |      dk(  ry|D ](  }
|
d   s|
d   |d   k  s|
d   |d   kD  rd|
d<   $d|
d<   * t        j                  |D 
cg c]  }
|
d   	 c}
d      }|D cg c]  }||   	 }}t        j                  |D cg c]  }|d	    
 c}d      }|d| D cg c]  }||   	 }}|D cg c]  }t        |d
          }}t        | j                  ||f         dkD  r| j                  ||f   dd|f   n| j                  ||f   }t        |j                        }t        |      }t        |      }t        j                  ||f      }t        j                  ||f      }t        j                  |D 
cg c]  }
|
d   	 c}
      }t        j                  ||f      }t        |      dk(  st        |j                        D ]  \  }}t        |      D ]  \  }}t        |dg      }d}t        |      D ]@  \  }}
|||f   dkD  r||   s|dkD  r||   dk(  r
||   dk(  r n|||f   |k  r8|||f   }|}B |dk(  ri||   |||f<   ||   d   |||f<   |d   |||f<     t        j                  |D cg c]  }|d   |d   k  xs |d   |d   kD   c}      j                  dt        |      f      }t        j                   |t        j"                  |dk(  t        j$                  ||d                  }|||||D cg c]  }|d   	 c}|D 
cg c]  }
|
d   	 c}
|||D cg c]  }|d	   	 c}||dS c c}	}w c c}	}w c c}
w c c}w c c}w c c}w c c}w c c}
w c c}w c c}w c c}
w c c}w )zo
        perform evaluation for single category and image
        :return: dict (single image results)
        r   Nr+   rh   r   _ignorerS   rT   rR   r,   gA?r=   id)r/   r0   aRngrN   dtIdsgtIds	dtMatches	gtMatchesdtScoresgtIgnoredtIgnore)r   r1   r   r   r   rV   rB   rW   rY   r   iouThrsri   rl   rk   minreshape
logical_orlogical_andrepeat) r   rL   rM   r   rN   r5   r8   r9   r\   r]   ra   gtindr`   r^   dtindrb   r,   r   TGDgtmdtmgtIgdtIgtindtdindr[   mgindas                                    r   rG   zCOCOeval.evaluateImg   sV   
 KK995;'B5;'B xxF591EFA!F!FBF xxF591EFA!F!FBFr7a<CGaK 	!A{qya0AfId1g4E ) )		! 

"5QAiL5KH"#be##

4AQwZK4;G"1V_-be--.013q|$1147		%,8O4PST4Ttyy&q%x0Z^ZcZcdikpdpZq		NGGxx1xx1xxr2!923xx14y!|$QYY/ .a(} .GD!qk*CA#,R= atDy>!+GDM$R4DGQJ4:q=!T	?S0$ dO 2v &*1gDdO&(eDkCT	N&'gCQK-..2 HHbIaiQ'<1V9T!W+<<IJRRTUWZ[]W^S_`}}T2>>#q&"))Aa:J#KL !& % $ &24 5Q4 524 5Q4 5 # #57 87 8 $ $ 	q GF 6#4-1 38 J !6 5 !9sH   O/<O5;O;P 5PP
$P-P,P6PP#P(c                 .   t        d       t        j                         }| j                  st        d       || j                  }|j                  dk(  r|j
                  ndg|_        t        |j                        }t        |j                        }|j                  rt        |j
                        nd}t        |j                        }t        |j                        }t        j                  |||||f       }t        j                  ||||f       }	t        j                  |||||f       }
| j                  }|j                  r|j
                  ndg}t        |      }t        t        t         |j                              }t        |j                        }t        |j"                        }t%        |j
                        D cg c]  \  }}||v s| }}}t%        |j                        D cg c]  \  }}||v s| }}}t%        t        d |j                              D cg c]  \  }}||v s| }}}t%        |j"                        D cg c]  \  }}||v s| }}}t        |j"                        }t        |j                        }t%        |      D ]  \  }}||z  |z  }t%        |      D ]  \  }}||z  }t%        |      D ]  \  }} |D cg c]  }| j                  ||z   |z       }!}|!D "cg c]  }"|"|"	 }!}"t        |!      dk(  rJt        j&                  |!D "cg c]
  }"|"d   d|   c}"      }#t        j(                  |# d	
      }$|#|$   }%t        j&                  |!D "cg c]  }"|"d   ddd| f    c}"d      dd|$f   }&t        j&                  |!D "cg c]  }"|"d   ddd| f    c}"d      dd|$f   }'t        j&                  |!D "cg c]  }"|"d   	 c}"      }(t        j*                  |(dk(        })|)dk(  rEt        j,                  |&t        j.                  |'            }*t        j,                  t        j.                  |&      t        j.                  |'            }+t        j0                  |*d      j3                  t4              },t        j0                  |+d      j3                  t4              }-t%        t7        |,|-            D ]y  \  }.\  }/}0t        j8                  |/      }/t        j8                  |0      }0t        |/      }1|/|)z  }2|/|0|/z   t        j:                  d      z   z  }3t        j<                  |f      }4t        j<                  |f      }5|1r|2d   |	|.|||f<   n	d|	|.|||f<   |3j?                         }3|4j?                         }4tA        |1dz
  dd      D ]  }|3|   |3|dz
     kD  s|3|   |3|dz
  <    t        jB                  |2|j                  d      }$	 t%        |$      D ]  \  }6}7|3|7   |4|6<   |%|7   |5|6<    	 t        j8                  |4      ||.dd|||f<   t        j8                  |5      |
|.dd|||f<   |    ||||||gtD        jD                  jG                         jI                  d      ||	|
d| _%        t        j                         }8t        djM                  |8|z
               yc c}}w c c}}w c c}}w c c}}w c c}w c c}"w c c}"w c c}"w c c}"w c c}"w #  Y xY w)z
        Accumulate per image evaluation results and store the result in self.eval
        :param p: input params for evaluation
        :return: None
        z"Accumulating evaluation results...zPlease run evaluate() firstNr   r=   c                     t        |       S N)tuple)xs    r   <lambda>z%COCOeval.accumulate.<locals>.<lambda>\  s
    a r    r   r   rS   rT   r   rf   r   r   )dtypeleft)sidez%Y-%m-%d %H:%M:%S)r   countsdate	precisionrecallscoresr>   )'r   r?   r   r   r1   r   rV   r   recThrsrH   rD   rB   onesr   setmapr   r   rk   concatenaterW   rm   r   logical_notcumsumastypefloatziprl   ro   ri   tolistrangesearchsorteddatetimenowstrftimer   rA   )9r   r5   rK   r   RKAMr   r   r   _per   setKsetAsetMsetInru   k_listr   m_listr   a_listr`   i_listI0A0k0Nka0NarN   Er   r   r_   dtScoresSortedr   r   r   npigtpsfpstp_sumfp_sumr   tpfpndrcprqssripirO   s9                                                            r   
accumulatezCOCOeval.accumulate;  s:    	23iik}}/09A yyA~188B4!))n!))n'(yyc!((ma!))n!))nww!Aa{++	ww!Aay))ww!Aa{++ "{{6{3uckk*+3;;3:: )!(( 3B1T	!BB )!)) 4B1T	!BB )#.@!))*L M[1QRVZQZ![[ )!(( 3B1T	!BB_v& 9	9EArBrB"6* 792U!*6!2 59IAv=CDrBw{3DAD$%7qQY7A71v{ !~~PQ.R1q}Qv/F.RSH ::xikBD%-d^N>>q*Q!1[>!AfH*+E*QXYZ[\]a[abC>>q*Q!1Z=1V8+D*QXYZ[\]a[abD>>!*DQ1Z=*DED++D!G5Dqy ..bnnT>RTC..)<bnnT>RTCYYs3:::GFYYs3:::GF'0VV1D'E 98BXXb\XXb\ W$Y2b5A#67XXqd^XXqd^.0fF1Qq7O./F1Qq7O  YY[ahhj!!&r!tQ!3 0A!!ur!A#w*,Q%1Q30  "r1996J!*3D/ <B(*2")7);2<
 02xx{	!Aa!),,.HHRLq1Qqy)=9/59799	9v !Q1o%%))+445HI"
	 iik"))3s734U CB[B E7 /S +R*Q*DH! sf   [[2[ ?[ )[&6[&[,"[,[2
<[7
[7
,[<2\*\"\<#\\c                      d	 fd	 fd}fd} j                   st        d       j                  j                  }|dk(  s|dk(  r|}n|dk(  r|}         _        y)
z
        Compute and display summary metrics for evaluation results.
        Note this functin can *only* be applied on the default parameter setting
        Nc           
      f   j                   }d}| dk(  rdnd}| dk(  rdnd}|,dj                  |j                  d   |j                  d	         nd
j                  |      }t        |j                        D 	
cg c]  \  }	}
|
|k(  s|	 }}	}
t        |j
                        D 	cg c]  \  }	}||k(  s|	 }}	}| dk(  rLj                  d   }|*t        j                  ||j                  k(        d   }||   }|d d d d d d ||f   }nHj                  d   }|*t        j                  ||j                  k(        d   }||   }|d d d d ||f   }t        ||d	kD           dk(  rd	}nt        j                  ||d	kD           }t        |j                  ||||||             |S c c}
}	w c c}}	w )NzB {:<18} {} @[ IoU={:<9} | area={:>6s} | maxDets={:>3d} ] = {:0.3f}r   zAverage PrecisionzAverage Recallz(AP)z(AR)z{:0.2f}:{:0.2f}r   r=   z{:0.2f}r   r   )r   rA   r   rk   
areaRngLblrD   r   rB   whererV   meanr   )apiouThrrH   rD   r5   iStrtitleStrtypeStriouStrr`   r   aindmDetmindsr   mean_sr   s                    r   
_summarizez&COCOeval.summarize.<locals>._summarize  s   AWD.0Ag*;KH "Af6G> '--aiilAIIbMJ'0'7'7'?  &/q||%<P'!TAPDP%.qyy%9M'!TTW_AMDMQwIIk*%199!45a8A!Aa!Do& IIh'%199!45a8A!Aa$tm$1QrT7|Q1R4)$++h'6RSM- QMs   9F'F'&F-4F-c                  p   t        j                  d      }  d      | d<    ddj                  j                  d         | d<    ddj                  j                  d         | d<    ddj                  j                  d   	      | d
<    ddj                  j                  d   	      | d<    ddj                  j                  d   	      | d<    dj                  j                  d         | d<    dj                  j                  d         | d<    dj                  j                  d         | d<    ddj                  j                  d   	      | d<    ddj                  j                  d   	      | d<    ddj                  j                  d   	      | d<   | S )N)   r   r         ?rd   )r   rD         ?small)rH   rD   re   medium   large   rD            	   
      )rB   ri   r   rD   )r   r   r   s    r   _summarizeDetsz*COCOeval.summarize.<locals>._summarizeDets  s   HHUOE!!}E!H!!B8K8KA8NOE!H!!C9L9LQ9OPE!H!!Wdkk>Q>QRS>TUE!H!!Xt{{?R?RST?UVE!H!!Wdkk>Q>QRS>TUE!H!!T[[-@-@-CDE!H!!T[[-@-@-CDE!H!!T[[-@-@-CDE!H!!Wdkk>Q>QRS>TUE!H"1h@S@STU@VWE"I"1gt{{?R?RST?UVE"ILr    c                  F   t        j                  d      }  dd      | d<    ddd      | d<    ddd      | d	<    ddd
      | d<    ddd      | d<    dd      | d<    ddd      | d<    ddd      | d<    ddd
      | d<    ddd      | d<   | S )N)r  r      r  r   r   )rD   r   r   rd   r   )rD   rH   re   r  r   r  r  r  r  r  )rB   ri   )r   r   s    r   _summarizeKpsz)COCOeval.summarize.<locals>._summarizeKps  s    HHUOE!!R0E!H!!R;E!H!!R<E!H!!RBE!H!!RAE!H!!R0E!H!!R;E!H!!R<E!H!!RBE!H!!RAE!HLr    zPlease run accumulate() firstr*   r<   r-   )r   Nalld   )r   rX   r   r
   r   )r   r
  r  r
   	summarizer   s   `    @r   r  zCOCOeval.summarize  s`    
	>		 yy;<<++%%f6 1&I#%I[
r    c                 $    | j                          y r   )r  r   s    r   __str__zCOCOeval.__str__  s    r    )NNr*   r   )__name__
__module____qualname__r   r:   rP   rE   rF   rG   r   r  r   r    r   r   r   
   s9    d<0#J(4T:)VN`i5VG!Rr    r   c                   $    e Zd ZdZd Zd ZddZy)r   z(
    Params for coco evaluation api
    c           	      l   g | _         g | _        t        j                  ddt	        t        j
                  d            dz   d      | _        t        j                  ddt	        t        j
                  d	            dz   d      | _        g d
| _        ddgddgddgddgg| _	        g d| _
        d| _        y )Nr   ffffff?!@r   Tendpoint              ?      Y@)r   r  r  r       _B    $  )r  r   r   r  )r   r   rB   linspacerY   roundr   r   rD   rH   r   r1   r  s    r   setDetParamszParams.setDetParams  s    {{2tS:K1L-MPQ-Q\`a{{2tS:K1L-MPQ-Q\`a#*VW,=?QT[]eSfg=r    c           	         g | _         g | _        t        j                  ddt	        t        j
                  d            dz   d      | _        t        j                  ddt	        t        j
                  d	            dz   d      | _        d
g| _        ddgddgddgg| _	        g d| _
        d| _        t        j                  g d      dz  | _        y )Nr   r  r  r   Tr  r  r  r   r  r   r!  r"  r#  )r  r   r  )gp=
ף?      ?r(  ffffff?r)  HzG?r*  
ףp=
?r+  ףp=
?r,  Q?r-  ףp=
?r.  {Gz?r/  g      $@)r   r   rB   r$  rY   r%  r   r   rD   rH   r   r1   rl   rj   r  s    r   setKpParamszParams.setKpParams  s    {{2tS:K1L-MPQ-Q\`a{{2tS:K1L-MPQ-Q\`at*Wg,>(@ST4 hh'}~  @D  Dr    c                     |dk(  s|dk(  r| j                          n!|dk(  r| j                          nt        d      || _        d | _        y )Nr*   r<   r-   ziouType not supported)r&  r0  rX   r
   r@   )r   r
   s     r   r   zParams.__init__  sK    f6 1#344r    N)r*   )r  r  r  __doc__r&  r0  r   r  r    r   r   r     s    	
D	r    r   )
__author__numpyrB   r   r?   collectionsr    r   rZ   rI   r   r   r  r    r   <module>r7     s3   
    #  f fP$ $r    