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>
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
# 本地开发与 SaaS 内测期的编排(T4)。
|
||||
# 只起依赖: docker compose -f deploy/compose/compose.yaml up -d postgres valkey gotenberg
|
||||
# 只起依赖: docker compose -f deploy/compose/compose.yaml up -d postgres valkey gotenberg ocr
|
||||
# 全部起来: docker compose -f deploy/compose/compose.yaml --profile app up -d --build
|
||||
# 端口只绑 127.0.0.1;生产环境的密钥从环境变量注入,不写在这里。
|
||||
name: bid-doctor
|
||||
@@ -41,6 +41,12 @@ services:
|
||||
# 生产编排(Helm / 生产 compose)用网络策略禁止它的出口流量。
|
||||
ports: ["127.0.0.1:${BD_GOTENBERG_PORT:-3109}:3000"]
|
||||
|
||||
# OCR 服务(vision-plan §4.2):worker 把扫描页、插图发过来,返回文字行和坐标。模型在镜像里,不需要外网
|
||||
ocr:
|
||||
image: bid-doctor-ocr
|
||||
build: { context: ../.., dockerfile: deploy/docker/ocr.Dockerfile }
|
||||
ports: ["127.0.0.1:${BD_OCR_PORT:-8029}:8000"]
|
||||
|
||||
migrate:
|
||||
profiles: [app]
|
||||
image: bid-doctor-server
|
||||
@@ -62,6 +68,8 @@ services:
|
||||
BD_MIGRATE_DATABASE_URL: postgresql+psycopg://bd_owner:${BD_PG_OWNER_PASSWORD:-dev-owner}@postgres:5432/bid_doctor
|
||||
BD_VALKEY_URL: redis://valkey:6379/0
|
||||
BD_GOTENBERG_URL: http://gotenberg:3000
|
||||
BD_OCR_PROVIDER: http
|
||||
BD_OCR_URL: http://ocr:8000
|
||||
BD_STORAGE_DIR: /data/objects
|
||||
ports: ["127.0.0.1:${BD_API_PORT:-8009}:8000"]
|
||||
volumes: [objects:/data/objects]
|
||||
@@ -94,6 +102,7 @@ services:
|
||||
depends_on:
|
||||
migrate: { condition: service_completed_successfully }
|
||||
valkey: { condition: service_healthy }
|
||||
ocr: { condition: service_healthy }
|
||||
|
||||
volumes:
|
||||
pgdata: {}
|
||||
|
||||
25
deploy/docker/ocr.Dockerfile
Normal file
25
deploy/docker/ocr.Dockerfile
Normal file
@@ -0,0 +1,25 @@
|
||||
# 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"]
|
||||
@@ -7,6 +7,7 @@ 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
|
||||
COPY server server
|
||||
RUN uv sync --frozen --no-dev --package bid-doctor --no-editable
|
||||
|
||||
Reference in New Issue
Block a user