Bladeren bron

feat(grid_recovery): 增强调试可视化,区分原有与补偿单元格并添加统计信息

zhch158_admin 2 weken geleden
bovenliggende
commit
6e7663499e
1 gewijzigde bestanden met toevoegingen van 25 en 9 verwijderingen
  1. 25 9
      ocr_tools/universal_doc_parser/models/adapters/wired_table/grid_recovery.py

+ 25 - 9
ocr_tools/universal_doc_parser/models/adapters/wired_table/grid_recovery.py

@@ -1166,31 +1166,47 @@ class GridRecovery:
                 f"占据{len(empty_cells)}个网格单元"
             )
         
-        # Step 5: Debug可视化
+        # Step 5: Debug可视化(增强版:颜色区分原有/补偿单元格)
         if debug_dir and compensated_bboxes:
             try:
                 from pathlib import Path
                 vis_img = np.ones((int(img_h), int(img_w), 3), dtype=np.uint8) * 255
                 
-                # 绘制网格线(灰色虚线)
+                # 绘制网格线(灰色虚线)
                 for y in row_dividers:
-                    cv2.line(vis_img, (0, int(y)), (int(img_w), int(y)), (200, 200, 200), 1, cv2.LINE_AA)
+                    cv2.line(vis_img, (0, int(y)), (int(img_w), int(y)), (220, 220, 220), 1, cv2.LINE_AA)
                 for x in col_dividers:
-                    cv2.line(vis_img, (int(x), 0), (int(x), int(img_h)), (200, 200, 200), 1, cv2.LINE_AA)
+                    cv2.line(vis_img, (int(x), 0), (int(x), int(img_h)), (220, 220, 220), 1, cv2.LINE_AA)
                 
-                # 绘制现有bbox(蓝色
+                # 绘制现有bbox(绿色 - 原有单元格
                 for bbox in existing_bboxes:
                     x1, y1, x2, y2 = [int(v) for v in bbox]
-                    cv2.rectangle(vis_img, (x1, y1), (x2, y2), (255, 0, 0), 2)
+                    cv2.rectangle(vis_img, (x1, y1), (x2, y2), (0, 200, 0), 2)
                 
-                # 绘制补偿bbox(绿色
+                # 绘制补偿bbox(橙色 - 补偿单元格,加粗
                 for bbox in compensated_bboxes:
                     x1, y1, x2, y2 = [int(v) for v in bbox]
-                    cv2.rectangle(vis_img, (x1, y1), (x2, y2), (0, 255, 0), 2)
+                    cv2.rectangle(vis_img, (x1, y1), (x2, y2), (0, 165, 255), 3)  # 橙色,线宽3
+                
+                # 添加图例和统计信息
+                legend_y = 30
+                cv2.putText(vis_img, f"OCR Compensation: +{len(compensated_bboxes)} cells", (10, legend_y),
+                           cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 0), 2)
+                legend_y += 35
+                cv2.putText(vis_img, f"Green: Original ({len(existing_bboxes)})", (10, legend_y),
+                           cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 200, 0), 2)
+                legend_y += 30
+                cv2.putText(vis_img, f"Orange: Compensated ({len(compensated_bboxes)})", (10, legend_y),
+                           cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 165, 255), 2)
+                legend_y += 30
+                cv2.putText(vis_img, f"Gray: Grid lines ({len(row_dividers)-1}x{len(col_dividers)-1})", (10, legend_y),
+                           cv2.FONT_HERSHEY_SIMPLEX, 0.6, (150, 150, 150), 2)
                 
                 out_path = Path(debug_dir) / f"{debug_prefix}step06_ocr_compensation.png"
                 cv2.imwrite(str(out_path), vis_img)
-                logger.debug(f"💾 Debug图: {out_path}")
+                logger.info(f"💾 OCR补偿可视化已保存: {out_path}")
+                logger.info(f"   📊 单元格统计: 原有={len(existing_bboxes)}, 补偿={len(compensated_bboxes)}, "
+                           f"总计={len(existing_bboxes) + len(compensated_bboxes)}")
             except Exception as e:
                 logger.warning(f"⚠️ Debug可视化失败: {e}")