Files
guitar_score/scripts/debug/patch_tracker.py

81 lines
2.3 KiB
Python

import sys
with open('youtube_tab_to_pdf.py', 'r', encoding='utf-8') as f:
lines = f.readlines()
new_lines = []
skip = False
import_added = False
for line in lines:
if line.startswith('import cv2') and not import_added:
new_lines.append(line)
new_lines.append('from video_cv_tracker import TemporalTracker\n')
import_added = True
continue
if line.startswith('def extract_unique_scroll(frames:'):
skip = True
new_lines.append('''def extract_unique_scroll(frames: List[np.ndarray], threshold: float = SIMILARITY_THRESHOLD) -> List[np.ndarray]:
print(f"[4/5] 스크롤형 Tab 시계열 추적 추출 중...")
strip_tops, strip_bottoms = [], []
for frame in frames[:50]:
strip = _find_white_tab_strip(frame)
if strip:
strip_tops.append(strip[0])
strip_bottoms.append(strip[1])
if not strip_tops:
return []
median_top = int(np.median(strip_tops))
median_bottom = int(np.median(strip_bottoms))
tracker = TemporalTracker()
for frame in frames:
h = frame.shape[0]
tab_crop = frame[max(0, median_top):min(h, median_bottom), :]
if not _has_tab_content(tab_crop):
continue
tracker.process_frame(tab_crop)
panorama = tracker.get_final_panorama()
if panorama is None:
return []
print(f" -> 생성된 파노라마 길이: {panorama.shape[1]}px")
chunk_width = 1280
final_chunks = []
w = panorama.shape[1]
start_x = 0
while start_x < w:
chunk = panorama[:, start_x:min(w, start_x + chunk_width)]
if chunk.shape[1] < chunk_width:
pad = np.full((chunk.shape[0], chunk_width - chunk.shape[1], 3), 255, dtype=np.uint8)
chunk = np.hstack([chunk, pad])
final_chunks.append(chunk)
start_x += chunk_width
print(f" -> A4 분할 컷: {len(final_chunks)}개")
return final_chunks
''')
continue
if skip and line.startswith('def extract_unique_overlay('):
skip = False
if not skip:
new_lines.append(line)
with open('youtube_tab_to_pdf.py', 'w', encoding='utf-8') as f:
f.writelines(new_lines)
print("Patched youtube_tab_to_pdf.py successfully.")