8000 [Sub] S3 GetObject + surya-ocr 텍스트/bbox 추출 · Issue #16 · SM17-YoonDongJu/AI · GitHub
[go: up one dir, main page]

Skip to content

[Sub] S3 GetObject + surya-ocr 텍스트/bbox 추출 #16

Open

Description

@donghoong2

Parent #13.

  • S3 GetObject (로컬 디스크 미잔류)
  • PDF→pymupdf 렌더(이미지화)
  • surya-ocr(전용 OCR 엔진, PyTorch, 한국어)로 문서 이미지에서 텍스트 추출
  • 출력은 (text, bbox, polygon, confidence) 라인 단위 구조로 보존(이어붙인 한 덩어리 금지) — 텍스트 마스킹 + 이미지 마스킹([Sub] PII 마스킹 (정규식 + NER-ready 심) #18) 양쪽에서 bbox/polygon 재사용, confidence는 QA·ocr_results 적재
  • 서빙: surya 0.17.x는 FoundationPredictor로 in-process(PyTorch) 로드 가능(GPU 노드). 0.18+/0.20은 별도 추론 서버(vllm/llama.cpp) 필요 → 배포 버전 결정 시 in-process(0.17) vs 서버(0.18+) 트레이드오프 반영
  • 테스트는 우선 Google Colab GPU에서 한국어 정확도 검증 후 배포 (완료: surya-ocr==0.17.0+transformers==4.56.1로 한국어 보험증권 인식·좌표 검증, 평균 conf 0.98)
  • OCR 모델/디바이스/버전은 env 주입, 하드코딩 금지
  • 외부 OCR API 금지(개인정보보호) — 자체 호스팅만

2026-06-26 변경: Qwen2.5-VL(VLM) → surya-ocr. surya는 전용 OCR 엔진이라 텍스트+bbox만 추출하고 분류·필드추출은 못 함 → #16과 #17(분류·추출) 통합안 폐기, #17은 surya 추출 텍스트 위의 별도 LLM/룰 단계로 분리.
OCR=PyTorch·NER=PyTorch로 프레임워크 통일(이전 paddle↔torch CUDA 충돌 소멸).

2026-06-30: 서빙 버전 정정. 0.14~0.17은 in-process(FoundationPredictor), 0.18+는 추론 서버(SuryaInferenceManager) 구조. 이전 "in-process 기본" 전제는 ≤0.17에서만 성립. confidence도 라인 출력에 포함해 ocr_results에 적재.

Activity

  1. changed the title [-][Sub] S3 GetObject + PaddleOCR 텍스트 추출[/-] [+][Sub] S3 GetObject + Qwen2.5-VL OCR/추출[/+] on Jun 25, 2026
  2. changed the title [-][Sub] S3 GetObject + Qwen2.5-VL OCR/추출[/-] [+][Sub] S3 GetObject + surya-ocr 텍스트/bbox 추출[/+] on Jun 26, 2026
  3. donghoong2 commented on Jun 30, 2026

    @donghoong2
    CollaboratorAuthor

    구현 완료 (commit d397c49) — src/ocr_worker/ocr.py + storage.py + core/exceptions.py.

    완료:

    • ✅ S3 GetObject(boto3, asyncio.to_thread 격리, 로컬 디스크 미잔류) — storage.get_object
    • ✅ PDF→pymupdf 렌더 / 이미지(PIL) — render_to_images (content_type 라우팅)
    • ✅ surya-ocr 0.17 in-process(FoundationPredictor 주입, lazy 로드) — SuryaEngine
    • ✅ 출력 (text, bbox, polygon, confidence) 라인 단위 보존 — OcrLine/OcrPage/OcrResult
    • ✅ 무거운 의존(surya·pymupdf·PIL·boto3) lazy import + DI → GPU 없이 페이크로 단위테스트(8 케이스)
    • ✅ AppError → OcrError 도메인 예외 계층 신설
    • ✅ pyproject ocr extra paddle→surya 교체, mypy overrides 추가
    • ✅ ruff·mypy(strict) green, 전체 55 passed·1 skip

    남은 항목:

  4. moved this from Todo to In progress in YoonDongJUon Jun 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    • Status
      In progress

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

    0