Files
bid-doctor/deploy/docker/ocr.Dockerfile
YANG JIANKUAN 3344f09563 feat(ocr): 扫描件与图片识别——OCR 进文字层、资质库上传识别、大图浏览
计划见 docs/architecture/vision-plan.md(VS1–VS13,docs/decisions.md)。

- 验证:OCR(RapidOCR + PP-OCRv6 small,CPU)和 DeepSeek Flash 看图在国动投标文件
  和 7 张证书上初测(tech-validation §7,代码 spikes/s5-ocr/)
- OCR 服务 services/ocr(镜像、Compose 服务):整页转正(含 180°)、红章附近按红色通道重读
- 扫描页和插图识别后并入文字层 v6,句子标 source=ocr;出处标「OCR」(迁移 0013);
  依据识别文字的问题降级,规则不查扫描附件;国动端到端见 check-eval §16
- 资质库上传识别:添加资质对话框最上面传证书照片,识别后填表,只预填和 OCR 文字
  对得上的字段;识别值留痕、照片挂成附件(迁移 0014,提示词 vision.cert_fields v1)
- 资质库改为查看详情(只读键值 + 附件缩略图),附件用大图浏览控件看,不开新标签页
  (设计规范 §7.23);PDF 附件按页出预览图

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 17:50:13 +08:00

26 lines
1.4 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# OCR 服务镜像(services/ocr,vision-plan §4.2):RapidOCR + PP-OCRv6 small,CPU 推理。
# docker build -f deploy/docker/ocr.Dockerfile -t bid-doctor-ocr .
# 模型在构建时下载并打进镜像:私有化离线安装、运行时不开网络出口(架构 §3.5、§7)。
FROM python:3.13-slim AS build
COPY --from=ghcr.io/astral-sh/uv:0.12.20 /uv /usr/local/bin/uv
ENV UV_COMPILE_BYTECODE=1 UV_LINK_MODE=copy UV_PROJECT_ENVIRONMENT=/app/.venv
WORKDIR /src
COPY pyproject.toml uv.lock .python-version ./
COPY server/pyproject.toml server/
COPY services/ocr/pyproject.toml services/ocr/
RUN uv sync --frozen --no-dev --no-install-workspace --package bid-doctor-ocr
COPY services/ocr services/ocr
RUN uv sync --frozen --no-dev --package bid-doctor-ocr --no-editable
RUN /app/.venv/bin/python -c "from rapidocr import RapidOCR; RapidOCR()"
FROM python:3.13-slim
# opencv(RapidOCR 依赖)要的系统库
RUN apt-get update && apt-get install -y --no-install-recommends libgl1 libglib2.0-0 && rm -rf /var/lib/apt/lists/* \
&& useradd --system --uid 10001 bd
COPY --from=build /app/.venv /app/.venv
ENV PATH=/app/.venv/bin:$PATH PYTHONUNBUFFERED=1 OMP_NUM_THREADS=4
USER bd
EXPOSE 8000
HEALTHCHECK --interval=10s --timeout=3s --retries=6 CMD python -c "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/healthz')"
CMD ["bid-doctor-ocr", "--host", "0.0.0.0", "--port", "8000"]