# 工程标书生成器 —— 扫描件识别（OCR）**可选依赖**
#
# ⚠️ 本文件为**按需安装**：不装也能正常使用本技能（Word / 含文本层的 PDF 全部功能可用），
#    只是遇到**扫描件**（图片型 PDF，在 PDF 里划不中文字）时只会「判定 + 明确拒绝」。
#    装上即获得扫描件识别能力。
#
#    安装：pip install -r requirements-ocr.txt
#
# 为什么单独放一份（不并入 requirements.txt）：
#   实测体积约 171 MB（cv2 112 MB + onnxruntime 42 MB + rapidocr 13 MB），
#   体量大头是 opencv-python。不并入主依赖，是为了让只想试用的用户装得轻、跑得快；
#   确实需要处理扫描件的用户再按需安装。
#
#   ⚠️ 口径更正（2026-10-09，勿再沿用旧写法）：**本技能的分发包内不含任何模型文件**。
#     三个 ONNX 识别模型（约 13.07 MB）**含在 rapidocr-onnxruntime 这个 pip 包里**，
#     随上面这行安装一起落到本机（那 171 MB 里另外约 158 MB 是推理库 onnxruntime / opencv）。
#     正确说法：安装这一步**必须联网**（要下载约 171 MB）；**装好之后识别全程离线**，
#     识别时不会再下载任何东西。
#     禁止再写「模型随包分发、首次识别无需联网」—— 那会被误读成"装上就能离线"。
#
# 未安装时的行为（已验证）：
#   parser.py 对 pipeline/ocr_stage.py 做条件引用（try/except ImportError），
#   缺本组依赖时自动退化为「扫描件判定 + 阻断」，**不抛 ImportError、不影响任何既有功能**。
#
# 实测识别质量（本机 16 核 CPU，A4 200 dpi）：中文正文字符级相似度 98.97%、平均 7.5 秒/页。
# 已知失效：★ 星号条款标记可能丢失、分值可能被误读（实测 50→150）、㎡ 等上标单位可能丢失
#   —— 因此 pipeline/ocr_stage.py 会额外产出 suspect_marks 供上层提示人工复核，
#   **绝不宣称「已识别即已正确」**。
#
# 并行是负收益，故默认串行（单进程已吃满物理核；实测 w2 0.92×、w4 0.71×，内存 977MB→2173MB）。

# 本地 OCR 引擎（PaddleOCR 的 ONNX 版）：自带 det / rec / cls 三个中文模型
rapidocr-onnxruntime>=1.2.3

# PDF → 图片：纯 Python wheel，自带 pdfium 二进制，无需用户另装
# ImageMagick / Poppler / Ghostscript。
# pdfplumber 0.11 的 page.to_image 同样基于 pypdfium2；此处显式声明，
# 因为 pipeline/ocr_stage.py 直接调用它做逐页栅格化。
pypdfium2>=4.0.0

# 以下由 rapidocr-onnxruntime 传递安装，列出仅为便于体积评估与锁版本：
#   onnxruntime>=1.16     推理运行时（约 42 MB，CPU 版即可）
#   opencv-python>=4.6    图像预处理（约 112 MB，本组依赖的体积大头）
#   numpy / Pillow        本工程运行时已具备，不重复声明
#   pyclipper / shapely   文本框后处理（合计约 3 MB）
