Kaynağa Gözat

refactor: 附件切割OCR只保留Tesseract,移除PaddleOCR fallback;test_api适配anyuan环境

何文松 1 hafta önce
ebeveyn
işleme
95ee7ca577
2 değiştirilmiş dosya ile 21 ekleme ve 61 silme
  1. 8 8
      pdf_converter_v2/test_api.py
  2. 13 53
      pdf_converter_v2/test_no.py

+ 8 - 8
pdf_converter_v2/test_api.py

@@ -24,10 +24,10 @@ from pathlib import Path
 from typing import Optional, Dict, Any, List
 
 # API 配置(默认本机 4214 端口;可通过环境变量 PDF_CONVERTER_API_URL 覆盖)
-API_BASE_URL = os.getenv("PDF_CONVERTER_API_URL", "http://47.108.80.98:4214")
+API_BASE_URL = os.getenv("PDF_CONVERTER_API_URL", "http://localhost:4214")
 
 # 测试文件配置
-TEST_DIR = Path(__file__).parent / "test"
+TEST_DIR = Path("/root/test/test")
 
 # 测试用例:文件名 -> (文档类型, 是否去水印, 是否只保留表格附件)
 # 格式: 
@@ -37,14 +37,14 @@ TEST_DIR = Path(__file__).parent / "test"
 TEST_CASES = {
     # 新增投资类型
     "鄂电司发展〔2024〕124号 国网湖北省电力有限公司关于襄阳连云220千伏输变电工程可行性研究报告的批复.pdf": ("safetyFsApproval", True,False),  # 需要去水印 + 只保留表格附件
-    # "2-(可研批复)晋电发展〔2017〕831号+国网山西省电力公司关于临汾古县、晋城周村220kV输变电等工程可行性研究报告的批复.pdf.pdf": "fsApproval",
-    # "1-(可研评审)晋电经研规划〔2017〕187号(盖章)国网山西经研院关于山西晋城周村220kV输变电工程可行性研究报告的评审意见.pdf": "fsReview",
-    # "5-(初设批复)晋电建设〔2019〕566号 国网山西省电力公司关于晋城周村220kV输变电工程初步设计的批复 .pdf": "pdApproval",
+    "2-(可研批复)晋电发展〔2017〕831号+国网山西省电力公司关于临汾古县、晋城周村220kV输变电等工程可行性研究报告的批复.pdf.pdf": "fsApproval",
+    "1-(可研评审)晋电经研规划〔2017〕187号(盖章)国网山西经研院关于山西晋城周村220kV输变电工程可行性研究报告的评审意见.pdf": "fsReview",
+    "5-(初设批复)晋电建设〔2019〕566号 国网山西省电力公司关于晋城周村220kV输变电工程初步设计的批复 .pdf": "pdApproval",
     # 现有类型
-    # "9-(结算报告)山西晋城周村220kV输变电工程结算审计报告.pdf": "settlementReport",
-    # "4-(初设评审)中电联电力建设技术经济咨询中心技经〔2019〕201号关于山西周村220kV输变电工程初步设计的评审意见.pdf": "designReview",
+    "9-(结算报告)山西晋城周村220kV输变电工程结算审计报告.pdf": "settlementReport",
+    "4-(初设评审)中电联电力建设技术经济咨询中心技经〔2019〕201号关于山西周村220kV输变电工程初步设计的评审意见.pdf": "designReview",
     # 决算报告
-    # "10-(决算报告)盖章页-山西晋城周村220kV输变电工程竣工决算审核报告(中瑞诚鉴字(2021)第002040号).pdf": "finalAccount",
+    "10-(决算报告)盖章页-山西晋城周村220kV输变电工程竣工决算审核报告(中瑞诚鉴字(2021)第002040号).pdf": "finalAccount",
 }
 
 

+ 13 - 53
pdf_converter_v2/test_no.py

@@ -15,25 +15,14 @@ from utils.logging_config import get_logger
 # 初始化日志
 logger = get_logger("pdf_converter_v2.attachment_splitter")
 
-# 尝试导入 OCR 相关库
+# 导入 Tesseract OCR
 try:
     import pytesseract
     TESSERACT_AVAILABLE = True
     logger.info("[附件切割] Tesseract OCR 可用")
 except ImportError:
     TESSERACT_AVAILABLE = False
-    logger.warning("[附件切割] Tesseract OCR 不可用")
-
-# 尝试导入 PaddleOCR 作为备用
-try:
-    from paddleocr import PaddleOCR
-    PADDLEOCR_AVAILABLE = True
-    logger.info("[附件切割] PaddleOCR 可用")
-    # 初始化 PaddleOCR(延迟到实际使用时)
-    _paddle_ocr = None
-except ImportError:
-    PADDLEOCR_AVAILABLE = False
-    logger.warning("[附件切割] PaddleOCR 不可用")
+    logger.error("[附件切割] Tesseract OCR 不可用,请安装: apt install tesseract-ocr tesseract-ocr-chi-sim && pip install pytesseract")
 
 try:
     import PyPDF2
@@ -104,7 +93,7 @@ NON_TABLE_ATTACHMENT_KEYWORDS = [
 
 def ocr_page_image(image) -> str:
     """
-    对图片进行 OCR 识别(优先使用 Tesseract,备用 PaddleOCR
+    对图片进行 OCR 识别(使用 Tesseract)
     
     Args:
         image: PIL Image 对象
@@ -112,46 +101,17 @@ def ocr_page_image(image) -> str:
     Returns:
         str: 识别出的文本
     """
-    # 优先使用 Tesseract
-    if TESSERACT_AVAILABLE:
-        try:
-            text = pytesseract.image_to_string(image, lang=OCR_LANG)
-            logger.debug(f"[附件切割] Tesseract OCR识别成功,文本长度: {len(text)}")
-            return text
-        except Exception as e:
-            logger.error(f"[附件切割] Tesseract OCR识别失败: {e}")
-            # 失败后尝试 PaddleOCR
+    if not TESSERACT_AVAILABLE:
+        logger.warning("[附件切割] Tesseract OCR 不可用,跳过识别")
+        return ""
     
-    # 备用:使用 PaddleOCR
-    if PADDLEOCR_AVAILABLE:
-        try:
-            global _paddle_ocr
-            if _paddle_ocr is None:
-                logger.info("[附件切割] 初始化 PaddleOCR...")
-                _paddle_ocr = PaddleOCR(use_angle_cls=True, lang='ch', show_log=False)
-            
-            # 将PIL图片转换为numpy数组
-            import numpy as np
-            img_array = np.array(image)
-            
-            # 执行OCR
-            result = _paddle_ocr.ocr(img_array, cls=True)
-            
-            # 提取文本
-            if result and result[0]:
-                texts = [line[1][0] for line in result[0] if line[1][0]]
-                text = '\n'.join(texts)
-                logger.debug(f"[附件切割] PaddleOCR识别成功,文本长度: {len(text)}")
-                return text
-            else:
-                logger.warning("[附件切割] PaddleOCR未识别出文本")
-                return ""
-        except Exception as e:
-            logger.error(f"[附件切割] PaddleOCR识别失败: {e}")
-            return ""
-    
-    logger.warning("[附件切割] 没有可用的OCR工具")
-    return ""
+    try:
+        text = pytesseract.image_to_string(image, lang=OCR_LANG)
+        logger.debug(f"[附件切割] Tesseract OCR识别成功,文本长度: {len(text)}")
+        return text
+    except Exception as e:
+        logger.error(f"[附件切割] Tesseract OCR识别失败: {e}")
+        return ""
 
 def extract_page_text(page, use_ocr: bool = False) -> str:
     """