From 9ee92136d82b9bb2e4097bc7ddd14258387fb161 Mon Sep 17 00:00:00 2001 From: Harden <1915702192@qq.com> Date: Thu, 8 Jan 2026 18:00:00 +0800 Subject: [PATCH] update . --- OPTIMIZATION_REPORT.md | 1115 ++++++++++++++++++++++++++++++++++++++++ data/sf-1.jpg | Bin 0 -> 115884 bytes 2 files changed, 1115 insertions(+) create mode 100644 OPTIMIZATION_REPORT.md create mode 100644 data/sf-1.jpg diff --git a/OPTIMIZATION_REPORT.md b/OPTIMIZATION_REPORT.md new file mode 100644 index 0000000..5a8fa00 --- /dev/null +++ b/OPTIMIZATION_REPORT.md @@ -0,0 +1,1115 @@ +# Vision-OCR 项目深度分析与优化报告 + +> 分析日期: 2026-01-08 +> 分析范围: 全项目代码审查 + +--- + +## 目录 + +- [一、架构设计问题](#一架构设计问题) +- [二、性能优化点](#二性能优化点) +- [三、代码质量问题](#三代码质量问题) +- [四、安全性问题](#四安全性问题) +- [五、配置管理问题](#五配置管理问题) +- [六、测试覆盖问题](#六测试覆盖问题) +- [七、功能增强建议](#七功能增强建议) +- [八、优化优先级总结](#八优化优先级总结) + +--- + +## 一、架构设计问题 + +### 1.1 API 请求参数未生效 (严重 🔴) + +**问题描述** + +`lang`、`use_gpu`、`drop_score` 等请求参数虽然被接收,但在实际 OCR 处理中 **完全未被使用**。 + +**问题位置**: `api/routes/ocr.py` 第 78-95 行 + +```python +def _process_ocr( + image_bytes: bytes, + pipeline: OCRPipeline, + roi: Optional[ROIParams] = None, + return_annotated_image: bool = False, +) -> tuple[OCRResult, Optional[str]]: + # lang, use_gpu, drop_score 参数未传入也未使用! +``` + +**影响** +- 用户设置的语言、GPU 加速、置信度阈值完全无效 +- API 文档描述与实际行为不一致 +- 用户误以为参数生效,导致困惑 + +**解决方案** + +方案一:在 `_process_ocr` 中动态创建或更新 OCRConfig + +```python +def _process_ocr( + image_bytes: bytes, + pipeline: OCRPipeline, + params: OCRRequestParams, # 新增参数 + roi: Optional[ROIParams] = None, + return_annotated_image: bool = False, +) -> tuple[OCRResult, Optional[str]]: + # 创建临时配置 + ocr_config = OCRConfig( + lang=params.lang, + use_gpu=params.use_gpu, + drop_score=params.drop_score, + ) + # 使用新配置处理... +``` + +方案二:修改 `OCRPipeline.process()` 方法接受运行时参数 + +```python +def process( + self, + image: np.ndarray, + image_path: Optional[str] = None, + drop_score: Optional[float] = None, # 运行时覆盖 +) -> OCRResult: + effective_drop_score = drop_score or self._ocr_config.drop_score + # ... +``` + +--- + +### 1.2 Pipeline 配置临时替换 - 线程安全问题 (严重 🔴) + +**问题描述** + +`api/routes/ocr.py` 中直接修改共享的 pipeline 配置对象,在并发场景下会产生竞态条件。 + +**问题位置**: `api/routes/ocr.py` 第 102-113 行 + +```python +# 临时更新管道配置 +original_config = pipeline._pipeline_config +pipeline._pipeline_config = pipeline_config # ⚠️ 非线程安全! + +try: + result = pipeline.process(image) +finally: + pipeline._pipeline_config = original_config # ⚠️ 并发时可能恢复错误的配置 +``` + +**影响** +- 多用户并发请求时,配置会相互干扰 +- 用户 A 的 ROI 设置可能被应用到用户 B 的请求 +- 产生不可预期且难以复现的 Bug + +**解决方案** + +方案一:将配置作为 `process()` 方法的参数传入(推荐) + +```python +def process( + self, + image: np.ndarray, + image_path: Optional[str] = None, + pipeline_config: Optional[PipelineConfig] = None, # 新增 +) -> OCRResult: + config = pipeline_config or self._pipeline_config + # 使用传入的配置... +``` + +方案二:使用 `contextvars` 实现请求级别隔离 + +```python +from contextvars import ContextVar + +_request_config: ContextVar[PipelineConfig] = ContextVar('request_config') + +# 在请求处理开始时设置 +_request_config.set(pipeline_config) + +# 在 process 中读取 +config = _request_config.get(self._pipeline_config) +``` + +方案三:使用线程锁(性能较差,不推荐) + +```python +import threading + +class OCRPipeline: + _lock = threading.Lock() + + def process_with_config(self, image, config): + with self._lock: + original = self._pipeline_config + self._pipeline_config = config + try: + return self.process(image) + finally: + self._pipeline_config = original +``` + +--- + +### 1.3 缺少日志系统 (中等 🟡) + +**问题描述** + +全项目使用 `print()` 输出信息,无法控制日志级别、格式、输出目标。 + +**问题位置**: 分布在多个文件 + +```python +# main.py +print("[INFO] 正在初始化 OCR 系统...") + +# input/loader.py +print(f"[ERROR] 文件不存在: {path}") + +# api/main.py +print("[INFO] 正在加载 OCR 模型...") +``` + +**影响** +- 无法按级别过滤日志(开发/生产环境) +- 无法将日志输出到文件或日志服务 +- 缺少时间戳、调用位置等上下文信息 +- 无法进行日志聚合和分析 + +**解决方案** + +引入 Python 标准 `logging` 模块: + +```python +# utils/logger.py +import logging +import sys + +def setup_logger(name: str, level: int = logging.INFO) -> logging.Logger: + logger = logging.getLogger(name) + logger.setLevel(level) + + handler = logging.StreamHandler(sys.stdout) + handler.setFormatter(logging.Formatter( + '%(asctime)s - %(name)s - %(levelname)s - %(message)s' + )) + logger.addHandler(handler) + + return logger + +# 使用 +logger = setup_logger(__name__) +logger.info("正在初始化 OCR 系统...") +logger.error(f"文件不存在: {path}") +``` + +或使用 `loguru`(更简洁): + +```python +from loguru import logger + +logger.info("正在初始化 OCR 系统...") +logger.error(f"文件不存在: {path}") +``` + +--- + +## 二、性能优化点 + +### 2.1 缺少批处理 API (中等 🟡) + +**现状** + +API 只支持单张图片处理,需要批量识别时必须多次调用。 + +**影响** +- 网络往返开销大 +- 无法充分利用 GPU 批处理能力 +- 客户端实现复杂 + +**解决方案** + +添加批处理端点: + +```python +@router.post("/recognize/batch") +async def recognize_batch( + files: List[UploadFile] = File(..., max_length=10), + params: OCRRequestParams = Depends(parse_multipart_params), + pipeline: OCRPipeline = Depends(get_ocr_pipeline), +) -> BatchOCRResponse: + results = [] + for file in files: + image_bytes = await parse_multipart_image(file) + result, _ = _process_ocr(image_bytes, pipeline, params.get_roi(), False) + results.append(_convert_ocr_result_to_response(result)) + + return BatchOCRResponse(success=True, data=results) +``` + +--- + +### 2.2 可视化器重复创建 (低 🟢) + +**问题描述** + +`api/routes/ocr.py` 中每次请求都创建新的 `OCRVisualizer`。 + +**问题位置**: `api/routes/ocr.py` 第 117-120 行 + +```python +if return_annotated_image and result.text_count > 0: + visualizer = OCRVisualizer(VisualizeConfig()) # 每次请求都创建 + annotated = visualizer.draw_result(image, result) +``` + +**影响** +- 每次都重新加载中文字体文件 +- PIL/OpenCV 初始化开销 + +**解决方案** + +将 visualizer 作为应用级单例: + +```python +# api/dependencies.py +_visualizer: Optional[OCRVisualizer] = None + +def get_visualizer() -> OCRVisualizer: + global _visualizer + if _visualizer is None: + _visualizer = OCRVisualizer(VisualizeConfig()) + return _visualizer +``` + +--- + +### 2.3 图片编码格式固定 (低 🟢) + +**现状** + +返回标注图片时固定使用 JPEG 格式。 + +**问题位置**: `api/dependencies.py` 第 119 行 + +```python +def encode_image_base64(image: np.ndarray, format: str = ".jpg") -> str: +``` + +**建议** + +允许用户指定输出格式,PNG 适合需要透明度或无损压缩的场景: + +```python +def encode_image_base64( + image: np.ndarray, + format: str = ".jpg", + quality: int = 95, # JPEG 质量 +) -> str: + params = [] + if format == ".jpg": + params = [cv2.IMWRITE_JPEG_QUALITY, quality] + elif format == ".png": + params = [cv2.IMWRITE_PNG_COMPRESSION, 3] + + success, encoded = cv2.imencode(format, image, params) + # ... +``` + +--- + +## 三、代码质量问题 + +### 3.1 OCR 路由重复代码 (中等 🟡) + +**问题描述** + +`express_multipart` 和 `express_base64` 中解析快递单的逻辑完全重复,约 30+ 行。 + +**问题位置**: `api/routes/ocr.py` 第 204-242 行 和 第 322-360 行 + +```python +# express_multipart 中 +express_info = result.parse_express() +merged_text = result.merge_text() +return ExpressResponse( + success=True, + data=ExpressResultData( + processing_time_ms=result.processing_time_ms, + express_info=ExpressInfoData( + tracking_number=express_info.tracking_number, + sender=ExpressPersonData( + name=express_info.sender_name, + phone=express_info.sender_phone, + address=express_info.sender_address, + ), + receiver=ExpressPersonData( + name=express_info.receiver_name, + phone=express_info.receiver_phone, + address=express_info.receiver_address, + ), + courier_company=express_info.courier_company, + confidence=express_info.confidence, + extra_fields=express_info.extra_fields, + raw_text=express_info.raw_text, + ), + merged_text=merged_text, + annotated_image_base64=annotated_base64, + ), +) +``` + +**影响** +- 修改一处逻辑需要同步修改另一处 +- 容易遗漏导致行为不一致 + +**解决方案** + +提取公共辅助函数: + +```python +def _convert_express_result_to_response( + result: OCRResult, + annotated_base64: Optional[str] = None, +) -> ExpressResultData: + """将 OCRResult 转换为快递单响应数据""" + express_info = result.parse_express() + merged_text = result.merge_text() + + return ExpressResultData( + processing_time_ms=result.processing_time_ms, + express_info=ExpressInfoData( + tracking_number=express_info.tracking_number, + sender=ExpressPersonData( + name=express_info.sender_name, + phone=express_info.sender_phone, + address=express_info.sender_address, + ), + receiver=ExpressPersonData( + name=express_info.receiver_name, + phone=express_info.receiver_phone, + address=express_info.receiver_address, + ), + courier_company=express_info.courier_company, + confidence=express_info.confidence, + extra_fields=express_info.extra_fields, + raw_text=express_info.raw_text, + ), + merged_text=merged_text, + annotated_image_base64=annotated_base64, + ) +``` + +--- + +### 3.2 异常处理过于宽泛 (中等 🟡) + +**问题描述** + +多处使用裸 `except Exception`,吞掉所有异常。 + +**问题位置**: `api/routes/ocr.py` 第 165-172 行 等多处 + +```python +except Exception as e: + return OCRResponse( + success=False, + error=ErrorDetail( + code=type(e).__name__, + message=str(e), + ), + ) +``` + +**影响** +- 隐藏了真正的错误信息 +- 难以定位问题根源 +- 可能掩盖严重的系统错误 + +**解决方案** + +明确捕获预期异常,让未预期异常传播: + +```python +from api.exceptions import OCRAPIException, InvalidImageError, OCRProcessingError + +try: + # ... +except OCRAPIException as e: + # 业务异常,返回友好信息 + return OCRResponse( + success=False, + error=ErrorDetail(code=type(e).__name__, message=e.message), + ) +except Exception as e: + # 未预期异常,记录日志并返回通用错误 + logger.exception(f"OCR 处理发生未知错误: {e}") + raise # 让全局异常处理器处理 +``` + +--- + +### 3.3 类型注解不完整 (低 🟢) + +**问题描述** + +部分函数返回值和参数缺少完整的类型注解。 + +**问题位置**: `ocr/pipeline.py` 第 185 行 + +```python +def _apply_roi(self, image: np.ndarray) -> tuple: + # 应该是: -> Tuple[np.ndarray, Tuple[int, int], Optional[Tuple[int, int, int, int]]] +``` + +**建议** + +补充完整的类型注解: + +```python +from typing import Tuple, Optional + +def _apply_roi( + self, + image: np.ndarray +) -> Tuple[np.ndarray, Tuple[int, int], Optional[Tuple[int, int, int, int]]]: + """ + Returns: + (裁剪后的图像, ROI 偏移量, ROI 矩形) + """ +``` + +--- + +## 四、安全性问题 + +### 4.1 缺少速率限制 (Rate Limiting) (严重 🔴) + +**问题描述** + +API 无任何请求频率限制,易受 DDoS 攻击或滥用。 + +**影响** +- 恶意用户可无限制发送请求 +- OCR 处理是 CPU/GPU 密集型操作,易导致服务过载 +- 可能产生高额的计算成本 + +**解决方案** + +使用 `slowapi` 实现速率限制: + +```python +# requirements.txt 添加 +slowapi>=0.1.9 + +# api/main.py +from slowapi import Limiter, _rate_limit_exceeded_handler +from slowapi.util import get_remote_address +from slowapi.errors import RateLimitExceeded + +limiter = Limiter(key_func=get_remote_address) +app.state.limiter = limiter +app.add_exception_handler(RateLimitExceeded, _rate_limit_exceeded_handler) + +# api/routes/ocr.py +from slowapi import Limiter + +@router.post("/recognize") +@limiter.limit("10/minute") # 每分钟最多 10 次请求 +async def recognize_multipart(...): +``` + +--- + +### 4.2 CORS 配置过于宽松 (中等 🟡) + +**问题描述** + +生产环境不应允许所有来源访问。 + +**问题位置**: `api/main.py` 第 106-112 行 + +```python +app.add_middleware( + CORSMiddleware, + allow_origins=["*"], # ⚠️ 危险!允许任何域名 + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) +``` + +**影响** +- 任何网站都可以调用你的 API +- 可能被用于 CSRF 攻击 +- 敏感数据可能泄露给第三方 + +**解决方案** + +通过环境变量配置允许的域名: + +```python +import os + +ALLOWED_ORIGINS = os.getenv("ALLOWED_ORIGINS", "http://localhost:3000").split(",") + +app.add_middleware( + CORSMiddleware, + allow_origins=ALLOWED_ORIGINS, + allow_credentials=True, + allow_methods=["GET", "POST"], + allow_headers=["*"], +) +``` + +--- + +### 4.3 Base64 解码后缺少图片尺寸验证 (中等 🟡) + +**问题描述** + +恶意用户可构造压缩率极高的图片(如 zip bomb),解码后占用大量内存。 + +**问题位置**: `api/dependencies.py` 第 94-116 行 + +**影响** +- 单个请求可能消耗数 GB 内存 +- 导致服务崩溃或 OOM + +**解决方案** + +在图片解码后添加尺寸检查: + +```python +def decode_image_bytes(content: bytes, max_dimension: int = 10000) -> np.ndarray: + """ + 将图片字节解码为 numpy 数组 + + Args: + content: 图片字节数据 + max_dimension: 最大允许的图片尺寸(宽或高) + """ + try: + nparr = np.frombuffer(content, np.uint8) + image = cv2.imdecode(nparr, cv2.IMREAD_COLOR) + if image is None: + raise InvalidImageError("图片解码失败") + + # 新增: 检查图片尺寸 + height, width = image.shape[:2] + if width > max_dimension or height > max_dimension: + raise InvalidImageError( + f"图片尺寸过大 ({width}x{height}),最大允许 {max_dimension}x{max_dimension}" + ) + + return image + except InvalidImageError: + raise + except Exception as e: + raise InvalidImageError(f"图片解码失败: {str(e)}") +``` + +--- + +## 五、配置管理问题 + +### 5.1 硬编码配置 (中等 🟡) + +**问题描述** + +多处配置硬编码在代码中,无法通过环境变量调整。 + +**问题位置** + +```python +# api/security.py:19 +MAX_FILE_SIZE = 10 * 1024 * 1024 # 硬编码 + +# api/main.py:48-56 +return OCRConfig( + lang="ch", # 硬编码默认值 + use_angle_cls=True, + use_gpu=False, + drop_score=0.5, +) +``` + +**影响** +- 不同环境(开发/测试/生产)无法使用不同配置 +- 修改配置需要改代码并重新部署 + +**解决方案** + +使用 `pydantic-settings` 统一管理: + +```python +# utils/settings.py +from pydantic_settings import BaseSettings +from typing import List + +class Settings(BaseSettings): + # 文件上传限制 + max_file_size: int = 10 * 1024 * 1024 + max_image_dimension: int = 10000 + + # OCR 默认配置 + ocr_default_lang: str = "ch" + ocr_use_gpu: bool = False + ocr_drop_score: float = 0.5 + + # API 配置 + api_rate_limit: str = "10/minute" + cors_origins: List[str] = ["http://localhost:3000"] + + # 日志配置 + log_level: str = "INFO" + + class Config: + env_prefix = "VISION_OCR_" + env_file = ".env" + +settings = Settings() +``` + +使用示例: + +```python +from utils.settings import settings + +MAX_FILE_SIZE = settings.max_file_size + +ocr_config = OCRConfig( + lang=settings.ocr_default_lang, + use_gpu=settings.ocr_use_gpu, + drop_score=settings.ocr_drop_score, +) +``` + +--- + +### 5.2 API 版本号分散 (低 🟢) + +**问题描述** + +版本号在多处定义,可能不一致。 + +**问题位置** + +```python +# api/main.py:98 +version="1.0.0", + +# api/routes/health.py:14 +API_VERSION = "1.0.0" +``` + +**解决方案** + +从单一来源读取版本号: + +```python +# api/__init__.py +__version__ = "1.0.0" + +# 其他文件使用 +from api import __version__ +``` + +或从 `pyproject.toml` 动态读取: + +```python +from importlib.metadata import version +__version__ = version("vision-ocr") +``` + +--- + +## 六、测试覆盖问题 + +### 6.1 核心模块缺少单元测试 (中等 🟡) + +**现状** + +只有 API 集成测试,核心业务逻辑无单元测试。 + +**缺失的测试** + +| 模块 | 测试覆盖 | 风险 | +|------|----------|------| +| `ocr/engine.py` | ❌ 无 | 高 - OCR 核心逻辑 | +| `ocr/express_parser.py` | ❌ 无 | 高 - 正则匹配复杂 | +| `ocr/pipeline.py` | ❌ 无 | 高 - 处理流程 | +| `input/loader.py` | ❌ 无 | 中 - 文件加载 | +| `visualize/draw.py` | ❌ 无 | 低 - 可视化 | +| `utils/config.py` | ❌ 无 | 低 - 配置类 | + +**建议** + +为 `ExpressParser` 添加单元测试(最高优先级): + +```python +# tests/test_express_parser.py +import pytest +from ocr.express_parser import ExpressParser +from ocr.engine import TextBlock + +class TestExpressParser: + @pytest.fixture + def parser(self): + return ExpressParser() + + def test_extract_tracking_number(self, parser): + text_blocks = [ + TextBlock( + text="运单号:SF1234567890", + confidence=0.95, + bbox=[[0, 0], [100, 0], [100, 20], [0, 20]], + ) + ] + result = parser.parse(text_blocks) + assert result.tracking_number == "SF1234567890" + + def test_extract_phone_number(self, parser): + text_blocks = [ + TextBlock( + text="收件人:张三 13800138000", + confidence=0.95, + bbox=[[0, 0], [200, 0], [200, 20], [0, 20]], + ) + ] + result = parser.parse(text_blocks) + assert result.receiver_phone == "13800138000" + + def test_detect_courier_company(self, parser): + text_blocks = [ + TextBlock( + text="顺丰速运", + confidence=0.95, + bbox=[[0, 0], [100, 0], [100, 20], [0, 20]], + ) + ] + result = parser.parse(text_blocks) + assert result.courier_company == "顺丰速运" +``` + +--- + +### 6.2 测试使用 Mock 导致假阳性 (中等 🟡) + +**问题描述** + +测试全程使用 Mock Pipeline,无法验证真实 OCR 行为。 + +**问题位置**: `tests/conftest.py` 第 25-67 行 + +```python +@pytest.fixture(scope="session") +def mock_ocr_pipeline(): + mock_pipeline = MagicMock() + mock_pipeline.process.return_value = mock_result # 永远返回固定结果 +``` + +**影响** +- 无法发现 OCR 引擎的问题 +- 接口变更可能导致测试仍然通过 +- 端到端流程未被验证 + +**解决方案** + +添加集成测试(可选择性运行): + +```python +# tests/test_integration.py +import pytest +import os + +# 通过环境变量控制是否运行集成测试 +SKIP_INTEGRATION = os.getenv("SKIP_INTEGRATION_TESTS", "true").lower() == "true" + +@pytest.mark.skipif(SKIP_INTEGRATION, reason="跳过集成测试") +class TestOCRIntegration: + @pytest.fixture(scope="class") + def real_pipeline(self): + """使用真实的 OCR Pipeline""" + from ocr.pipeline import OCRPipeline + from utils.config import OCRConfig, PipelineConfig + + pipeline = OCRPipeline(OCRConfig(), PipelineConfig()) + pipeline.initialize() + return pipeline + + def test_real_ocr_recognition(self, real_pipeline): + """测试真实 OCR 识别""" + import cv2 + import numpy as np + + # 创建包含文字的测试图片 + image = np.ones((100, 300, 3), dtype=np.uint8) * 255 + cv2.putText(image, "Hello OCR", (10, 60), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 0), 2) + + result = real_pipeline.process(image) + + assert result is not None + assert result.text_count >= 0 # 可能识别到也可能没有 +``` + +--- + +## 七、功能增强建议 + +### 7.1 支持语言动态切换 + +**现状** + +`lang` 参数即使生效,切换语言也需要重新初始化 OCR 引擎,耗时较长。 + +**建议** + +预加载多语言模型,或实现模型池: + +```python +class OCREnginePool: + """OCR 引擎池,支持多语言""" + + def __init__(self): + self._engines: Dict[str, OCREngine] = {} + + def get_engine(self, lang: str) -> OCREngine: + if lang not in self._engines: + config = OCRConfig(lang=lang) + engine = OCREngine(config) + engine.initialize() + self._engines[lang] = engine + return self._engines[lang] +``` + +--- + +### 7.2 添加结果缓存 + +**场景** + +相同图片重复识别时可直接返回缓存结果,节省计算资源。 + +**建议** + +基于图片哈希实现缓存: + +```python +import hashlib +from functools import lru_cache + +def get_image_hash(image_bytes: bytes) -> str: + return hashlib.md5(image_bytes).hexdigest() + +# 使用 Redis 或内存缓存 +_cache: Dict[str, OCRResult] = {} + +def process_with_cache(image_bytes: bytes, pipeline: OCRPipeline) -> OCRResult: + cache_key = get_image_hash(image_bytes) + + if cache_key in _cache: + return _cache[cache_key] + + image = decode_image_bytes(image_bytes) + result = pipeline.process(image) + + _cache[cache_key] = result + return result +``` + +--- + +### 7.3 支持异步处理 + +**场景** + +大批量图片处理时,同步等待耗时过长。 + +**建议** + +提供任务队列 + Webhook 回调模式: + +```python +@router.post("/recognize/async") +async def recognize_async( + file: UploadFile, + callback_url: str = Form(..., description="处理完成后的回调 URL"), +) -> dict: + # 1. 保存图片到临时存储 + task_id = str(uuid.uuid4()) + save_to_storage(task_id, await file.read()) + + # 2. 提交任务到队列 + queue.enqueue(process_ocr_task, task_id, callback_url) + + # 3. 立即返回任务 ID + return {"task_id": task_id, "status": "pending"} + +@router.get("/task/{task_id}") +async def get_task_status(task_id: str) -> dict: + # 查询任务状态 + return {"task_id": task_id, "status": get_status(task_id)} +``` + +--- + +### 7.4 增强快递单解析能力 + +**现状** + +正则匹配覆盖有限,部分快递公司格式无法识别。 + +**建议** + +1. **扩展正则模式库**:收集更多快递单样本,补充正则规则 +2. **引入 NER 模型**:使用命名实体识别提取人名、地址等 +3. **添加置信度评估**:对解析结果的可靠性给出评分 + +```python +class ExpressParser: + def parse(self, text_blocks: List[TextBlock]) -> ExpressInfo: + info = self._extract_by_regex(text_blocks) + + # 如果正则效果不好,尝试 NER + if not info.is_valid: + info = self._extract_by_ner(text_blocks) + + # 评估解析结果的置信度 + info.parse_confidence = self._evaluate_confidence(info) + + return info +``` + +--- + +## 八、优化优先级总结 + +### 按紧急程度分类 + +#### P0 - 必须立即修复 🔴 + +| 问题 | 影响 | 工作量 | +|------|------|--------| +| API 参数未生效 | 功能完全失效,用户设置的参数无意义 | 中 | +| Pipeline 线程安全 | 并发请求数据错乱,生产事故风险 | 中 | +| 缺少速率限制 | 服务可被 DDoS 攻击,稳定性风险 | 低 | + +#### P1 - 近期需要处理 🟡 + +| 问题 | 影响 | 工作量 | +|------|------|--------| +| 缺少日志系统 | 无法排查线上问题 | 低 | +| CORS 过于宽松 | 安全风险 | 低 | +| 图片尺寸验证缺失 | 内存攻击风险 | 低 | +| 代码重复 | 维护成本增加 | 低 | +| 测试覆盖不足 | 回归风险 | 中 | + +#### P2 - 可以规划 🟢 + +| 问题 | 影响 | 工作量 | +|------|------|--------| +| 配置硬编码 | 部署灵活性差 | 中 | +| 异常处理宽泛 | 问题定位困难 | 低 | +| 类型注解不完整 | 代码可读性 | 低 | +| 可视化器重复创建 | 性能损耗(轻微) | 低 | + +#### P3 - 长期优化 + +| 问题 | 影响 | 工作量 | +|------|------|--------| +| 批处理 API | 用户体验 | 中 | +| 结果缓存 | 性能优化 | 中 | +| 异步处理 | 大批量场景支持 | 高 | +| 快递单解析增强 | 产品竞争力 | 高 | + +--- + +### 建议的修复顺序 + +``` +1. [P0] 修复 API 参数传递问题 +2. [P0] 解决 Pipeline 线程安全问题 +3. [P0] 添加速率限制 +4. [P1] 引入日志框架 +5. [P1] 修复 CORS 配置 +6. [P1] 添加图片尺寸验证 +7. [P1] 提取重复代码 +8. [P2] 配置外部化 +9. [P2] 补充单元测试 +``` + +--- + +## 附录:快速修复代码片段 + +### A. 修复 API 参数传递 + +```python +# api/routes/ocr.py + +def _process_ocr( + image_bytes: bytes, + pipeline: OCRPipeline, + params: OCRRequestParams, # 新增 + roi: Optional[ROIParams] = None, + return_annotated_image: bool = False, +) -> tuple[OCRResult, Optional[str]]: + image = decode_image_bytes(image_bytes) + pipeline_config = build_pipeline_config(roi) + + # 关键:将参数传递给 process 方法 + result = pipeline.process( + image, + pipeline_config=pipeline_config, + drop_score=params.drop_score, + ) + + # ... +``` + +### B. 修复线程安全问题 + +```python +# ocr/pipeline.py + +def process( + self, + image: np.ndarray, + image_path: Optional[str] = None, + pipeline_config: Optional[PipelineConfig] = None, # 新增 + drop_score: Optional[float] = None, # 新增 +) -> OCRResult: + config = pipeline_config or self._pipeline_config + effective_drop_score = drop_score or self._ocr_config.drop_score + + # 使用传入的配置,而不是修改实例属性 + cropped_image, roi_offset, roi_rect = self._apply_roi(image, config.roi) + # ... +``` + +### C. 添加速率限制 + +```python +# requirements.txt +slowapi>=0.1.9 + +# api/main.py +from slowapi import Limiter +from slowapi.util import get_remote_address + +limiter = Limiter(key_func=get_remote_address) +app.state.limiter = limiter + +# api/routes/ocr.py +from fastapi import Request +from api.main import limiter + +@router.post("/recognize") +@limiter.limit("10/minute") +async def recognize_multipart(request: Request, ...): + # ... +``` + +--- diff --git a/data/sf-1.jpg b/data/sf-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..161549cae12345a5a0b0c2cf3f1d81a24867fc95 GIT binary patch literal 115884 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 literal 0 HcmV?d00001