chore(docs): document ScoreExtractor tiling and refactor debug scripts (#563)
This commit is contained in:
52
scripts/debug/test_y_crop.py
Normal file
52
scripts/debug/test_y_crop.py
Normal file
@@ -0,0 +1,52 @@
|
||||
import cv2
|
||||
import numpy as np
|
||||
|
||||
def find_white_tab_bounds(video_path):
|
||||
cap = cv2.VideoCapture(video_path)
|
||||
cap.set(cv2.CAP_PROP_POS_FRAMES, 30 * cap.get(cv2.CAP_PROP_FPS))
|
||||
ret, frame = cap.read()
|
||||
cap.release()
|
||||
|
||||
if not ret: return None
|
||||
|
||||
scale = 1280 / frame.shape[1]
|
||||
frame = cv2.resize(frame, (1280, int(frame.shape[0] * scale)))
|
||||
|
||||
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
|
||||
|
||||
# Calculate row-wise mean brightness
|
||||
row_means = np.mean(gray, axis=1)
|
||||
|
||||
# We are looking for the white paper background which has brightness > 230 on average
|
||||
# Wait, notes and black lines reduce the mean of a row.
|
||||
# A single black horizontal line on white reduces mean by (255 - 0) * (width/width) -> It drops to ~180 if it's thick.
|
||||
# Let's say any row with mean > 180 is part of the white strip.
|
||||
is_white_row = row_means > 180
|
||||
|
||||
# Find contiguous blocks of True
|
||||
# Pad with False to handle edges cleanly
|
||||
padded = np.concatenate(([False], is_white_row, [False]))
|
||||
diffs = np.diff(padded.astype(int))
|
||||
|
||||
starts = np.where(diffs == 1)[0]
|
||||
ends = np.where(diffs == -1)[0]
|
||||
|
||||
best_start, best_end, max_len = 0, 0, 0
|
||||
|
||||
for s, e in zip(starts, ends):
|
||||
length = e - s
|
||||
if length > max_len:
|
||||
max_len = length
|
||||
best_start = s
|
||||
best_end = e
|
||||
|
||||
return best_start, best_end, frame.shape[0]
|
||||
|
||||
if __name__ == "__main__":
|
||||
video_path = "output/サカナクション/新宝島(エレキギターTAB) 難易度★★★ sakanaction shintakarajima.mp4"
|
||||
bounds = find_white_tab_bounds(video_path)
|
||||
if bounds:
|
||||
s, e, h = bounds
|
||||
print(f"Mathematically found White Tab Strip: Y_START={s}, Y_END={e}. Total Height={h}")
|
||||
else:
|
||||
print("Failed to find bound")
|
||||
Reference in New Issue
Block a user