Repository navigation
Open
1 / 71 of 7 issues completedLabels
Description
개요
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
Type
Projects
- StatusShow more project fieldsIn progress
Activity
docs(contracts): ocr_results 확장 + claim_id 동기 (#13)
chore: 설계 잔재 정리 — paddle→surya, redpanda→apache/kafka (#13)
chore(ocr): paddle 잔재 정리 + masker docstring 정정 (#13)
Merge pull request #21 from SM17-YoonDongJu/13-feature-ocr-worker-구현