chore(docs): document ScoreExtractor tiling and refactor debug scripts (#563)
This commit is contained in:
68
scripts/debug/dump_logs.py
Normal file
68
scripts/debug/dump_logs.py
Normal file
@@ -0,0 +1,68 @@
|
||||
import cv2
|
||||
import pickle
|
||||
from pathlib import Path
|
||||
|
||||
# TemporalTracker already saved the video chunks? No.
|
||||
# I will use fast_verify.py's frames but run process_pages directly and print all its output.
|
||||
import fast_verify
|
||||
from youtube_tab_to_pdf import extract_unique_scroll
|
||||
|
||||
# Actually, I will just write a wrapper around ScoreExtractor to print to file
|
||||
import sys
|
||||
|
||||
def main():
|
||||
cap = cv2.VideoCapture("output/サカナクション/新宝島(エレキギターTAB) 難易度★★★ sakanaction shintakarajima.mp4")
|
||||
# Quick dynamic crop
|
||||
ret, initial = cap.read()
|
||||
scale = 1280 / initial.shape[1]
|
||||
|
||||
from youtube_tab_to_pdf import _find_white_tab_strip
|
||||
crop_top, crop_bottom = 0, int(initial.shape[0] * scale)
|
||||
|
||||
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
|
||||
|
||||
cap.set(cv2.CAP_PROP_POS_FRAMES, 0)
|
||||
# We don't want to load ALL 15000 frames into memory. Use TemporalTracker directly!
|
||||
from video_cv_tracker import TemporalTracker
|
||||
tracker = TemporalTracker(diff_threshold=0.05)
|
||||
|
||||
count = 0
|
||||
cap.set(cv2.CAP_PROP_POS_FRAMES, 0)
|
||||
|
||||
while True:
|
||||
ret, frame = cap.read()
|
||||
if not ret: break
|
||||
if count % 4 == 0:
|
||||
resized = cv2.resize(frame, (1280, int(frame.shape[0] * scale)))
|
||||
tracker.process_frame(resized[crop_top:crop_bottom, :])
|
||||
count += 1
|
||||
|
||||
unique_pages = tracker.get_unique_pages()
|
||||
print(f"Got {len(unique_pages)} unique pages from tracker.")
|
||||
|
||||
from score_extractor import ScoreExtractor
|
||||
extractor = ScoreExtractor()
|
||||
|
||||
# We will hook print
|
||||
original_print = print
|
||||
with open("score_log.txt", "w") as f:
|
||||
def my_print(*args, **kwargs):
|
||||
text = " ".join(map(str, args))
|
||||
f.write(text + "\n")
|
||||
original_print(*args, **kwargs)
|
||||
|
||||
import builtins
|
||||
builtins.print = my_print
|
||||
|
||||
extractor.process_pages(unique_pages)
|
||||
|
||||
builtins.print = original_print
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user