chore(docs): document ScoreExtractor tiling and refactor debug scripts (#563)
This commit is contained in:
78
scripts/debug/fast_verify.py
Normal file
78
scripts/debug/fast_verify.py
Normal file
@@ -0,0 +1,78 @@
|
||||
import cv2
|
||||
from video_cv_tracker import TemporalTracker
|
||||
from youtube_tab_to_pdf import extract_unique_scroll, generate_long_image, generate_pdf, download_video, extract_frames
|
||||
import sys
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
# Run verification specifically on Shintakarajima
|
||||
url = "https://youtu.be/tJq1n8TofM0"
|
||||
video_path = Path("output/サカナクション/新宝島(エレキギターTAB) 難易度★★★ sakanaction shintakarajima.mp4")
|
||||
|
||||
print("Extracting full video for final 142-measure verification...")
|
||||
cap = cv2.VideoCapture(str(video_path))
|
||||
|
||||
# PRE-CALCULATE Dynamic Crop
|
||||
# Just like extract_unique_scroll does automatically, we detect the white band.
|
||||
ret, initial = cap.read()
|
||||
scale = 1280 / initial.shape[1]
|
||||
resized_init = cv2.resize(initial, (1280, int(initial.shape[0] * scale)))
|
||||
|
||||
from youtube_tab_to_pdf import _find_white_tab_strip
|
||||
crop_top = 0
|
||||
crop_bottom = resized_init.shape[0]
|
||||
|
||||
cap.set(cv2.CAP_PROP_POS_FRAMES, 500)
|
||||
ret, check_frame = cap.read()
|
||||
if ret:
|
||||
resized_check = cv2.resize(check_frame, (1280, int(check_frame.shape[0] * scale)))
|
||||
bounds = _find_white_tab_strip(resized_check)
|
||||
if bounds:
|
||||
crop_top, crop_bottom = bounds
|
||||
# Preserve D.S. al Coda, ┌─ 1., ┌─ 2., and measure numbers drawn in the black abyss!
|
||||
crop_top = max(0, crop_top - 60)
|
||||
|
||||
print(f"Dynamically Cropping to: Y={crop_top} to {crop_bottom}")
|
||||
|
||||
cap.set(cv2.CAP_PROP_POS_FRAMES, 0)
|
||||
frames = []
|
||||
idx = 0
|
||||
tracker = TemporalTracker(diff_threshold=0.05)
|
||||
|
||||
while True:
|
||||
ret, frame = cap.read()
|
||||
if not ret: break
|
||||
|
||||
frame_resized = cv2.resize(frame, (1280, int(frame.shape[0] * scale)))
|
||||
clean_ribbon = frame_resized[crop_top:crop_bottom, :]
|
||||
frames.append(clean_ribbon)
|
||||
idx += 1
|
||||
|
||||
cap.release()
|
||||
|
||||
cv2.imwrite("C:/Users/Certes/.gemini/antigravity/brain/975cea00-dd68-4689-9ee3-f1a2408b4ee6/raw_frame_check.png", frames[30])
|
||||
|
||||
print(f"Extracted {len(frames)} frames. Running sequential page extraction...")
|
||||
try:
|
||||
final_chunks = extract_unique_scroll(frames)
|
||||
print("DEBUG: final_chunks len =", len(final_chunks))
|
||||
if final_chunks:
|
||||
print("DEBUG: final_chunks[0].shape =", final_chunks[0].shape)
|
||||
cv2.imwrite("C:/Users/Certes/.gemini/antigravity/brain/975cea00-dd68-4689-9ee3-f1a2408b4ee6/debug_chunk_0.png", final_chunks[0])
|
||||
|
||||
# Save the chunks to artifact directory to literally look at it
|
||||
artifact_path = Path(os.environ.get('APPDATA', '')) / '..' / 'Local' / 'Google' / 'AndroidStudio2024.1' # Just using relative artifact manually? No, I'll save it to C:\Users\Certes\.gemini\antigravity\brain\975cea00-dd68-4689-9ee3-f1a2408b4ee6\
|
||||
artifact_path = Path(r"C:\Users\Certes\.gemini\antigravity\brain\975cea00-dd68-4689-9ee3-f1a2408b4ee6")
|
||||
output_png = artifact_path / "final_check_100_sec.png"
|
||||
|
||||
generate_long_image(final_chunks, output_png)
|
||||
print(f"Saved successful verification image to: {output_png}")
|
||||
|
||||
if final_chunks:
|
||||
generate_pdf(final_chunks, Path("output/shintakarajima_perfect.pdf"))
|
||||
print("✨ Successfully generated output/shintakarajima_perfect.pdf ✨")
|
||||
else:
|
||||
print("Failed to produce rows.")
|
||||
except Exception as e:
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
Reference in New Issue
Block a user