69 lines
2.2 KiB
Python
69 lines
2.2 KiB
Python
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()
|