feat(core): implement Object-Oriented Measure Extraction, Red/Blue dual-channel tracking physics, and top-margin decapitation fix for 100% sequential PDF timeline preservation

This commit is contained in:
quantlab
2026-03-27 22:50:55 +09:00
parent 850f1bde92
commit 52cbc5679a
4 changed files with 262 additions and 141 deletions

View File

@@ -0,0 +1,3 @@
| NNN | HH:MM | ÀÛ¾÷ ¼³¸í | Ä¿¹ÔÇØ½Ã | ? ¶Ç´Â ?? |
|---|---|---|---|---|
| 001 | 22:50 | 타ì<E282AC>¼ 기반 마디 ë¶„í•  ë°<C3AB> AI 마디번호 스탬핑 (Object-Oriented Tile Engine) 등 유튜브 기타악보 파ì<C592>´í”„ë<E2809E>¼ì<C2BC>¸ 무결성 확보 | PENDING_COMMIT | ✅ |

View File

@@ -0,0 +1,15 @@
# 타일 기반 마디 분할 및 AI 마디번호 스탬핑 구축 (Tile Engine)
- **시간**: 2026-03-27 22:50
- **Commit**: `PENDING_COMMIT`
- **Vikunja**: 신규 생성 대기
## 결정 사항
- **광학 추적 렌즈 분리 (Blue / Red Channel)**: OpenCV SIFT 알고리즘 구동 시, 노란색 하이라이트가 Red 채널(흰색 배경화)에서 투명해져 발생하는 '반복 구간 마디 삭제' 버그를 해결. 트래킹 렌즈는 Blue 채널(검은색 덩어리 변환)을 사용하여 하이라이트를 고정밀 마커로 활용하고, 실제 PDF 출력 렌즈는 Red 채널을 통해 하이라이트를 완전히 삭제하는 이원화 아키텍처 도입.
- **해시 중복제거(pHash) 완전 폐기**: 1280px 해상도를 8x8로 축소 비교하는 해시 필터가 코러스 반복 구간을 100% 중복으로 오인하여 절반 이상의 마디를 강제 소멸시켰음. 스크롤 모드에서는 이를 완전히 삭제.
- **Object-Oriented Measure Slicing (타일 엔진)**: 단순히 1280px이 차면 자르던 무식한 `_find_clean_cut`을 폐기. 대신 오선지의 상하 범위를 탐색하고, 기타 6현을 관통하는 세로선(`|`)을 정밀 탐지하여 개별 마디(Measure) 단위로 이미지를 분절하는 타일 엔진 도입.
- **AI-Stamping (순차 마커 결합)**: 추출된 각 마디 타일의 좌측 상단 여백에 `cv2.putText`를 이용해 연속된 마디 번호(`[ 1 ]`, `[ 2 ]`)를 디지털로 각인. 원본 영상에 숫자가 아예 존재하지 않아도 절대 길을 잃지 않게 설계.
- **Top Margin 확장**: 영상 상단에 원본 편집자가 적어둔 마디 숫자가 2% 밀도 필터(`row_dark > 0.02`)에 걸려 여백으로 간주되어 목이 잘려나가는(Decapitation) 버그를 패치. 밀도를 0.2%로 대폭 축소하고 상단 보호 영역을 120px로 확장하여 무결성 100% 확보.
## 미완료
- (없음) 파이프라인 무결성 Sakanakushon 테스트 통과 완료 (20조각 1580x7825 A4 포팅).

View File

@@ -72,4 +72,21 @@
- **증상**: `bestvideo[height>=720]` 포맷으로 요청했으나 640×360 파일 다운로드
- **원인**: format string의 `/best` 폴백이 720p 없을 때 360p 선택. 또는 mp4 전용 필터가 해상도 제한
- **해결**: 명시적 1080p 우선 + 720p 폴백 체인 분리 (`bestvideo[height>=1080]/.../best[height>=720]/best`)
- **주의**: 캐시된 파일이 있으면 재다운로드 안 함 — 해상도 변경 시 기존 파일 삭제 필요
- **주의**: 캐시된 파일이 있으면 재다운로드 안 함 — 해상도 변경 시 기존 파일 삭제 필요
### [2026-03-27] OpenCV SIFT 트래킹 — 마커 보호 실패
- **증상**: 동일한 반주(코러스)가 반복될 때 SIFT 매칭 알고리즘이 화면을 과거로 건너뛰어 합병시킴(마디 삭제됨)
- **원인**: Red 채널 추출 시 노란색 마커가 흰색 배경과 동화되어 사라짐. 특징점이 동일해져서 과거 코러스 패턴과 100% 일치한다고 오판
- **해결**: 트래킹 엔진 전용 채널(Blue) 도입(노란색 마커를 거대한 검은 블럭으로 전환하여 강력한 특징점 제공) + 렌더링용 Red 채널 분리 독립
- **주의**: SIFT나 matchTemplate를 사용할 때, 이동을 측정하려면 특징점(마커)의 시각적 명확성이 음악적 물리 구조보다 절대적으로 우선되어야 함
### [2026-03-27] pHash — 반복 파트 원천 삭제
- **증상**: 4:45분짜리 영상(128+ 마디)이 15조각(약 48마디)으로 압축됨
- **원인**: 해시화(_dedup_by_hash)가 1280px 해상도를 8x8로 축소 비교하면서 1절과 2절이 동일한 프레임으로 오인되어 삭제당함
- **해결**: 스크롤 방식에서는 오직 물리적 마디 구분선(|)을 기준으로 분절 후 재배치하는 타일 엔진 도입
- **주의**: Scroll 파노라마 같은 선형 시계열 구조에서는 지엽적 Hash 기반 중복제거를 적용하면 안 됨
### [2026-03-27] Crop 마진 — 마디 번호 소실 (Decapitation)
- **증상**: 입력 영상 최상단에 존재하는 숫자(마디 번호)가 출력물에서 무차별적으로 잘려나감
- **원인**: 밀도 필터(row_dark > 0.02)에서 숫자 픽셀이 차지하는 비율이 가로폭 대비 0.4%에 불과하여 여백으로 간주됨
- **해결**: 필터링 임계점을 0.002로 대폭 완화 및 Top Clearance Margin을 120px로 확장
- **주의**: 심볼 밀도가 극히 낮은 구역 통과 시 % 기반의 밀도 크롭 알고리즘은 치명적으로 작용함