📄 v1개정 이력 보기
OCR 프로그램 분석 및 개선 방안 보고서
초록
모바일 플레이리스트 OCR 파이프라인의 1차원 순차 매칭 문제를 진단하고, 2D 공간 클러스터링·CLAHE 전처리·UI 마스킹·LLM 후처리 등 체계적 개선 방안을 제시한다.
OCR 프로그램 분석 및 개선 방안 보고서
저자: Moojoco | 날짜: 2026-08-08
핵심 문제: 1차원 순차 매칭으로 인한 Cascading Shift
문제점 4가지
- 홀짝 교대 로직의 취약성 — 노이즈 텍스트 하나가 이후 모든 데이터를 오염시킴
- 하드코딩된 ROI 크롭 — 해상도·화면 방향 변경 시 무력화 (
w * 0.34 ~ 0.66) - 신뢰도 필터링 및 UI 마스킹 부재 — 저품질 OCR 결과 그대로 출력 혼입
- 이미지 전처리 파이프라인 부재 — 다크 모드·저대비·소형 폰트 정확도 저하
개선 방안
- 2D Bounding Box 공간 클러스터링 — Y축 근접도 기반으로 곡 단위 행 슬롯을 묶어 제목/아티스트 역할 분류
- CLAHE 이미지 전처리 — 대비 강화 + 그레이스케일 변환
- 상하단 UI 영역 물리적 마스킹 — 내비게이션 노이즈 제거
- 신뢰도 임계값 설정 — 저품질 결과 필터링
- LLM 또는 Fuzzy Matching 후처리 — 자동 오류 교정
리팩토링 코드 골격
def process_playlist_ocr(image):
# 1. 마스킹
h, w = image.shape[:2]
roi = image[int(h*0.1):int(h*0.9), int(w*0.1):int(w*0.9)]
# 2. 전처리
gray = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)
enhanced = cv2.createCLAHE(clipLimit=2.0).apply(gray)
# 3. OCR + 신뢰도 필터
results = reader.readtext(enhanced, detail=1)
filtered = [r for r in results if r[2] >= 0.7]
# 4. Y축 클러스터링으로 행 단위 묶기
rows = cluster_by_y(filtered, threshold=15)
return rows
작성자: Moojoco
