Просмотр исходного кода

fix(修复倾斜角度检测): 修改SkewDetector类中的cv2.fitLine返回值处理,确保返回值显式转为标量,并更新异常处理为错误日志记录。

zhch158_admin 2 дней назад
Родитель
Сommit
64ad4a204d

+ 9 - 4
ocr_tools/universal_doc_parser/models/adapters/wired_table/skew_detection.py

@@ -243,7 +243,12 @@ class SkewDetector:
                 
             # fitLine 获取方向
             # [vx, vy, x, y] normalized vector (vx,vy) and point (x,y)
-            [vx, vy, x, y] = cv2.fitLine(cnt, cv2.DIST_L2, 0, 0.01, 0.01)
+            # cv2.fitLine 返回形状为 (1,1) 的数组,需显式转为标量
+            fit_result = cv2.fitLine(cnt, cv2.DIST_L2, 0, 0.01, 0.01)
+            vx = float(fit_result[0].item())
+            vy = float(fit_result[1].item())
+            x = float(fit_result[2].item())
+            y = float(fit_result[3].item())
             
             # 找到轮廓在这个方向上的极值点
             # 计算所有点在线上的投影
@@ -347,10 +352,10 @@ class SkewDetector:
             return final_angle
             
         except Exception as e:
-            logger.warning(f"基于Mask的倾斜角度检测失败: {e}")
+            logger.error(f"基于Mask的倾斜角度检测失败: {e}")
             import traceback
-            logger.warning(traceback.format_exc())
-            return 0.0
+            logger.error(traceback.format_exc())
+            raise e
     
     def apply_deskew(
         self,