# ScoreExtractor 타일링 구조 변경 및 수많은 디버그/OCR 시행착오 보존

- **시간**: 2026-03-29 17:55
- **Commit**: 추후 삽입
- **Vikunja**: #560 연장선 마무리

## 결정 사항 및 시행착오 (Lessons Learned)

1. **OCR-First 방식의 실패 (마디 번호 읽기)**
   - 스크롤 영상의 특성상 마디 번호는 화면 왼쪽 (고정)이 아니라 악보와 함께 이동하며 위치가 상시 변합니다.
   - 126프레임 중 6개(4.8%)만 인식되며 숫자가 왜곡(7→10→71→101)되어 중복 제거의 기준으로 사용할 수 없었습니다.
   - 따라서 이 방식은 최종 폐기되었고 (관련 스크립트 `verify_ocr.py`, `test_number_band.py` 등 보존) "Tracker를 통한 물리 구조 병합 후, 마디선을 기준으로 자르는(Tile) 방식"을 유지하기로 결정했습니다.

2. **ScoreExtractor (Object-Oriented) 하이브리드 타일링 도입**
   - 기존에는 스크롤된 5만 픽셀 이상의 긴 파노라마를 만든 뒤 A4 사이즈로 자르려고 했습니다.
   - 그러다 보니 오차 누적으로 악보 중앙부가 엉뚱하게 잘리는 현상(Decapitation_mid)이 지속되었습니다.
   - `TemporalTracker`가 정지된 슈퍼블록 단위까지만 자르고, 그 블록 단위에서 `ScoreExtractor`가 1D matchTemplate 및 마디(Bar) 단위 분절을 수행하도록 구조를 개편(`patch_final_holy_matrix.py`의 아이디어 적용)하여 A4 줄바꿈이 완벽해졌습니다.

3. **작업 공간(Workspace) 위생 개선**
   - 개발 중 양산된 수많은 테스트용/일회성 덤프 스크립트(`patch_*.py`, `debug_*.py`, `dump_*.py` 등 약 30여 개)와 산출물 이미지를 `scripts/debug/` 폴더로 일괄 이동하여 프로젝트 Root를 깨끗하게 비웠습니다. (단, 앞으로 진행될 전체 파이프라인 테스트용 `test_pipeline.py` 등 핵심 유틸은 복구)
