8000 [Feature] OCR Worker 구현 · Issue #13 · SM17-YoonDongJu/AI · GitHub
[go: up one dir, main page]

Skip to content

[Feature] OCR Worker 구현 #13

Open
1 of 7 issues completed
Open

Description

@donghoong2

개요

ocr-job-queue(Spring 발행)를 소비해 S3 파일을 surya-ocr로 텍스트 추출 → 문서 분류 → 엔티티 추출 → PII 마스킹(텍스트+이미지) 후 ocr_results에 저장하고 report-job을 발행하는 GPU 노드 Kafka 워커.

구현 범위

  • Kafka 컨슈머 — ocr-job-queue 소비, OcrJob pydantic 역직렬화·검증, 실패 시 DLQ
  • job_id 멱등 처리 (at-least-once, 중복 소비 방어)
  • S3 GetObject — 파일 다운로드, 로컬 디스크 미잔류
  • surya-ocr(전용 OCR 엔진, PyTorch, 자체 호스팅 GPU)로 문서 이미지에서 텍스트+bbox/polygon+confidence 추출(라인 단위 구조)
  • 문서 유형 분류 — diagnosis/policy/payout_notice/claim/other (surya 추출 텍스트 위의 별도 단계)
  • 엔티티 추출 — 진단명(KCD)·보험사·상품·지급금액(단정 금지, 참고값)
  • PII 텍스트 마스킹(정규식+NER) — 마스킹 텍스트만 downstream
  • PII 이미지 마스킹(신규 트랙) — 검출 PII 좌표로 원본 페이지에 줄 단위 검은블럭 렌더 → 비식별 이미지 사본 S3 저장(손해사정사 열람용). 원본은 삭제 말고 KMS·IAM·Lifecycle로 잠금보관
  • ocr_results 저장 (asyncpg) — contracts §3 스키마(confidence·masked_lines(bbox/polygon)·비식별 이미지 키 포함)
  • ReportJob 발행 → report-job (contracts §2)
  • 우아한 종료(graceful shutdown)·오프셋 커밋 전략
  • 단위 테스트(분류·엔티티·마스킹·이미지마스킹·계약 직렬화)

주의 사항

  • 외부 OCR API 금지(개인정보보호) — 자체 호스팅 GPU만(Colab은 테스트용)
  • PII는 계약/DB에 평문 금지 — 마스킹 후 값만 적재. masked_lines의 텍스트도 마스킹본(좌표·confidence만 원형 보존)
  • 비식별 이미지 사본은 S3, ocr_results엔 참조 키만 저장
  • PII 마스킹 규칙은 guardrail 입력단과 동일 정의 공유 (정렬 필수)
  • OCR/NER 모델은 env 주입, 하드코딩 금지 (임베딩은 report_worker 책임 — 우리 범위 밖)
  • core.kafka·core.db·core.contracts 의존 → platform/contracts 선행 필요

2026-06-26 변경: OCR 모델 Qwen2.5-VL(VLM) → surya-ocr. surya는 전용 OCR 엔진이라 텍스트+bbox만 추출 → 분류·추출(#17)은 별도 단계로 분리(#16 통합 폐기). OCR·NER 모두 PyTorch로 프레임워크 통일.

2026-06-30 변경: 범위에 이미지 마스킹 트랙 추가. 손해사정사 비식별 이미지 열람 요구를 충족하기 위해 검은블럭 이미지 마스킹을 #13 범위에 포함(기존 "마스킹-only 텍스트" 범위 확장). 이에 따라 ocr_results에 ocr_confidence·doc_type_confidence·masked_lines(bbox/polygon/conf, 마스킹 텍스트)·비식별 이미지 S3 키 컬럼 추가(→ #19, contracts §3 동기 갱신 필요). surya가 라인 단위 polygon/confidence를 네이티브 출력해 이미지 마스킹 좌표로 재사용(#16). Colab(surya 0.17) 검증에서 한국어 보험증권 인식·좌표 정확도 확인.

Metadata

Metadata

Assignees

Labels

AIFeatureNew feature or request

Type

No type

Projects

  • Status
    In progress

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

0