code: def combine_results(self, results):
      numGt = 0
      numDet = 0
      methodRecallSum = 0
      methodPrecisionSum = 0
  
      for result in results:
          numGt += result["gtCare"]
          numDet += result["detCare"]
          methodRecallSum += result["recallAccum"]
          methodPrecisionSum += result["precisionAccum"]
  
      methodRecall = 0 if numGt == 0 else methodRecallSum / numGt
      methodPrecision = (
          0 if numDet == 0 else methodPrecisionSum / numDet
      )
      methodHmean = (
          0
          if methodRecall + methodPrecision == 0
          else 2
          * methodRecall
          * methodPrecision
          / (methodRecall + methodPrecision)
      )
  
      methodMetrics = {
          "precision": methodPrecision,
          "recall": methodRecall,
          "hmean": methodHmean,
      }
  
      return methodMetrics
  
file_path: PaddleOCR/benchmark/PaddleOCR_DBNet/utils/ocr_metric/icdar2015/detection/deteval.py
imports: import math
  from collections import namedtuple
  import numpy
  from shapely.geometry import Polygon
label_desc: Use image node_id 3 for calling the DetectionDetEvalEvaluator obj's underlying member method code with example usage: obj.combine_results(results) and returns: methodMetrics