Răsfoiți Sursa

pdf_converter_v2: 添加 MINERU_RELEASE_BEFORE_PADDLE_OCR 开关,可选不释放 MinerU

何文松 3 săptămâni în urmă
părinte
comite
3f0d1df186
2 a modificat fișierele cu 15 adăugiri și 6 ștergeri
  1. 2 0
      pdf_converter_v2/README.md
  2. 13 6
      pdf_converter_v2/utils/paddleocr_fallback.py

+ 2 - 0
pdf_converter_v2/README.md

@@ -300,6 +300,7 @@ sudo journalctl -u pdf-converter-v2 -f
 - `API_PORT`: 服务监听端口(默认: 4214)
 - `LOG_LEVEL`: 日志级别(默认: info)
 - `PDF_CONVERTER_LOG_DIR`: 日志目录(默认: ./logs)
+- `MINERU_RELEASE_BEFORE_PADDLE_OCR`: 调用 PaddleOCR 前是否释放 MinerU 服务(停止 mineru-api.service 以腾出显存)。设为 `false`/`0`/`no` 时不释放,MinerU 保持运行(默认: true)
 
 ## 注意事项
 
@@ -445,6 +446,7 @@ pdf_converter_v2 API 默认只连一个 MinerU 地址(如 `API_URL=http://127.
 | 组件 | 环境变量 | 示例 |
 |------|----------|------|
 | MinerU | `MINERU_DEVICE_MODE` | `npu`、`npu:0`、`npu:1` |
+| MinerU 释放开关 | `MINERU_RELEASE_BEFORE_PADDLE_OCR` | `true`(默认,PaddleOCR 前释放 MinerU)/ `false`(不释放) |
 | PaddleOCR | `PADDLE_OCR_DEVICE` | `npu:0`、`npu:1` |
 | 昇腾可见卡 | `ASCEND_RT_VISIBLE_DEVICES` | `0`、`1,2`(物理卡号) |
 

+ 13 - 6
pdf_converter_v2/utils/paddleocr_fallback.py

@@ -45,6 +45,13 @@ except ImportError:
 MINERU_LOCK_FILE = "/tmp/mineru_service_lock"
 MINERU_COUNT_FILE = "/tmp/mineru_service_count"
 
+
+def _should_release_mineru_for_paddle() -> bool:
+    """是否在调用 PaddleOCR 前释放 MinerU 服务(停止 mineru-api.service 以腾出显存)。
+    可通过环境变量 MINERU_RELEASE_BEFORE_PADDLE_OCR 控制:设为 false/0/no 时不释放,MinerU 保持运行。"""
+    v = os.getenv("MINERU_RELEASE_BEFORE_PADDLE_OCR", "true").strip().lower()
+    return v not in ("false", "0", "no")
+
 def _get_paddleocr_executable() -> str:
     """返回 paddleocr 可执行文件路径或命令名,供 subprocess 使用。
     当以 systemd 等方式运行时 PATH 可能不包含 venv/bin,故优先使用当前 Python 同目录下的 paddleocr。
@@ -519,9 +526,9 @@ def call_paddleocr(image_path: str) -> Optional[Dict[str, Any]]:
     Returns:
         paddleocr解析结果,如果失败返回None
     """
-    # 在调用PaddleOCR前停止mineru服务以释放GPU内存
-    mineru_stopped = stop_mineru_service()
-    
+    # 在调用PaddleOCR前按配置决定是否停止mineru服务以释放GPU内存
+    mineru_stopped = stop_mineru_service() if _should_release_mineru_for_paddle() else False
+
     try:
         # 检查图片文件是否存在
         if not os.path.exists(image_path):
@@ -868,9 +875,9 @@ def call_paddleocr_ocr(image_path: str, save_path: str) -> tuple[Optional[List[s
     Returns:
         (OCR识别的文本列表, JSON文件路径),如果失败返回(None, None)
     """
-    # 在调用PaddleOCR前停止mineru服务以释放GPU内存
-    mineru_stopped = stop_mineru_service()
-    
+    # 在调用PaddleOCR前按配置决定是否停止mineru服务以释放GPU内存
+    mineru_stopped = stop_mineru_service() if _should_release_mineru_for_paddle() else False
+
     try:
         if not os.path.exists(image_path):
             logger.error(f"[PaddleOCR OCR] 图片文件不存在: {image_path}")