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

refactor: Update logging mechanism to use log level instead of debug mode

- Replaced the debug mode flag with a log level argument for enhanced logging flexibility.
- Updated relevant code sections to reflect the new logging approach, including error handling and output information.
- Revised README documentation to include usage of the log level option for detailed error reporting and intermediate result saving.
zhch158_admin 1 неделя назад
Родитель
Сommit
44d41230d7

+ 8 - 9
ocr_tools/mineru_vl_tool/README.md

@@ -53,12 +53,12 @@ python main.py --input document.pdf --output_dir ./output --pages "-10"
 # 从第5页到最后(PDF或图片目录)
 python main.py --input document.pdf --output_dir ./output --pages "5-"
 
-# 启用调试模式
-python main.py --input document.pdf --output_dir ./output --debug
-
 # 仅验证配置(dry run)
 python main.py --input document.pdf --output_dir ./output --dry_run
 
+# 使用 DEBUG 日志级别获取详细错误信息和中间结果
+python main.py --input document.pdf --output_dir ./output --log_level DEBUG
+
 # 指定服务器地址
 python main.py --input document.pdf --output_dir ./output --server_url http://10.192.72.11:20006
 
@@ -100,7 +100,6 @@ python main.py --input document.pdf --output_dir ./output --no-normalize
 ### 功能开关
 
 - `--no-normalize`: 禁用数字标准化(默认启用)
-- `--debug`: 启用调试模式(保存中间结果)
 - `--dry_run`: 仅验证配置,不执行处理
 
 ### 日志参数
@@ -116,9 +115,9 @@ python main.py --input document.pdf --output_dir ./output --no-normalize
 output_dir/
 ├── filename.md              # Markdown 内容
 ├── filename.json            # Content list JSON
-├── filename_layout.pdf      # 布局边界框(调试用
-├── filename_middle.json     # Middle JSON(调试模式
-├── filename_model.json      # 模型输出(调试模式
+├── filename_layout.pdf      # 布局边界框(始终保存
+├── filename_middle.json     # Middle JSON(仅 log_level=DEBUG 时保存
+├── filename_model.json      # 模型输出(仅 log_level=DEBUG 时保存
 └── images/                  # 提取的图片
     └── filename.png
 ```
@@ -151,7 +150,7 @@ python main.py \
   --output_dir ./output \
   --pages "1-10" \
   --server_url http://10.192.72.11:20006 \
-  --debug
+  --log_level DEBUG
 ```
 
 ### 示例2:批量处理图片目录
@@ -190,7 +189,7 @@ python main.py \
 
 ### 问题:处理失败
 
-- 启用 `--debug` 模式查看详细错误信息
+- 使用 `--log_level DEBUG` 获取详细错误信息和 traceback,同时会保存中间结果(middle.json, model.json)
 - 检查输出目录权限
 - 查看日志文件获取更多信息
 

+ 9 - 17
ocr_tools/mineru_vl_tool/main.py

@@ -159,11 +159,11 @@ def main():
   # 指定页面范围(仅PDF)
   python main.py --input document.pdf --output_dir ./output --pages "1-5,7"
   
-  # 启用调试模式
-  python main.py --input document.pdf --output_dir ./output --debug
-  
   # 仅验证配置(dry run)
   python main.py --input document.pdf --output_dir ./output --dry_run
+  
+  # 使用 DEBUG 日志级别获取详细错误信息和中间结果
+  python main.py --input document.pdf --output_dir ./output --log_level DEBUG
         """
     )
     
@@ -207,11 +207,6 @@ def main():
         action='store_true',
         help='禁用数字标准化'
     )
-    parser.add_argument(
-        '--debug',
-        action='store_true',
-        help='启用调试模式'
-    )
     
     # 处理参数
     parser.add_argument(
@@ -291,7 +286,7 @@ def main():
             logger.info(f"  - 批次大小: {args.batch_size}")
             logger.info(f"  - PDF DPI: {args.pdf_dpi}")
             logger.info(f"  - 数字标准化: {not args.no_normalize}")
-            logger.info(f"  - 调试模式: {args.debug}")
+            logger.info(f"  - 日志级别: {args.log_level}")
             if args.pages:
                 logger.info(f"  - 页面范围: {args.pages}")
             logger.info(f"📋 将要处理的文件 ({len(image_files)} 个):")
@@ -311,7 +306,7 @@ def main():
             server_url=args.server_url,
             timeout=args.timeout,
             normalize_numbers=not args.no_normalize,
-            debug=args.debug
+            log_level=args.log_level
         )
         
         # 开始处理
@@ -368,12 +363,12 @@ def main():
         print(f"  output_dir/")
         print(f"  ├── filename.md              # Markdown content")
         print(f"  ├── filename.json            # Content list")
-        print(f"  ├── filename_layout.pdf      # Debug: layout bbox")
+        print(f"  ├── filename_layout.pdf      # Layout bbox (always saved)")
         print(f"  └── images/                  # Extracted images")
         print(f"      └── filename.png")
-        if args.debug:
-            print(f"  ├── filename_middle.json    # Debug: middle JSON")
-            print(f"  └── filename_model.json     # Debug: model output")
+        if args.log_level == "DEBUG":
+            print(f"  ├── filename_middle.json    # Debug: middle JSON (log_level=DEBUG)")
+            print(f"  └── filename_model.json     # Debug: model output (log_level=DEBUG)")
 
         # 保存结果统计
         stats = {
@@ -455,9 +450,6 @@ if __name__ == "__main__":
         sys.argv = [sys.argv[0]]
         for key, value in default_config.items():
             sys.argv.extend([f"--{key}", str(value)])
-        
-        # 调试模式
-        sys.argv.append("--debug")
     
     sys.exit(main())
 

+ 9 - 9
ocr_tools/mineru_vl_tool/processor.py

@@ -35,7 +35,7 @@ class MinerUVLLMProcessor:
                  server_url: str = "http://127.0.0.1:8121",
                  timeout: int = 300,
                  normalize_numbers: bool = False,
-                 debug: bool = False):
+                 log_level: str = "INFO"):
         """
         初始化处理器
         
@@ -43,12 +43,12 @@ class MinerUVLLMProcessor:
             server_url: vLLM 服务器地址
             timeout: 请求超时时间
             normalize_numbers: 是否标准化数字
-            debug: 是否启用调试模式
+            log_level: 日志级别(DEBUG, INFO, WARNING, ERROR),当为 DEBUG 时会打印详细错误信息和保存中间结果
         """
         self.server_url = server_url.rstrip('/')
         self.timeout = timeout
         self.normalize_numbers = normalize_numbers
-        self.debug = debug
+        self.log_level = log_level
         self.backend = "http-client"  # 固定使用 http-client 后端
         
         logger.info(f"MinerU vLLM Processor 初始化完成:")
@@ -56,7 +56,7 @@ class MinerUVLLMProcessor:
         logger.info(f"  - 后端: vlm-{self.backend}")
         logger.info(f"  - 超时: {timeout}s")
         logger.info(f"  - 数字标准化: {normalize_numbers}")
-        logger.info(f"  - 调试模式: {debug}")
+        logger.info(f"  - 日志级别: {log_level}")
     
     def do_parse_single_file(self, 
                            input_file: str, 
@@ -130,7 +130,7 @@ class MinerUVLLMProcessor:
             
         except Exception as e:
             logger.error(f"Failed to process {file_path}: {e}")
-            if self.debug:
+            if self.log_level == "DEBUG":
                 traceback.print_exc()
             return {
                 "success": False,
@@ -227,8 +227,8 @@ class MinerUVLLMProcessor:
             except Exception as e:
                 logger.warning(f"Failed to draw layout bbox: {e}")
             
-            # 调试模式下保存额外信息
-            if self.debug:
+            # DEBUG 模式下保存额外信息(中间结果)
+            if self.log_level == "DEBUG":
                 # 保存 middle.json
                 middle_json_str = json.dumps(middle_json, ensure_ascii=False, indent=2)
                 if self.normalize_numbers:
@@ -247,7 +247,7 @@ class MinerUVLLMProcessor:
             
         except Exception as e:
             logger.error(f"Error in _process_output: {e}")
-            if self.debug:
+            if self.log_level == "DEBUG":
                 traceback.print_exc()
         
         return saved_files
@@ -367,7 +367,7 @@ class MinerUVLLMProcessor:
             result_info["error"] = str(e)
             result_info["success"] = False
             logger.error(f"Error processing {image_name}: {e}")
-            if self.debug:
+            if self.log_level == "DEBUG":
                 traceback.print_exc()
         
         finally: