chore(docs): document ScoreExtractor tiling and refactor debug scripts (#563)
This commit is contained in:
47
scripts/debug/test_col_sums.py
Normal file
47
scripts/debug/test_col_sums.py
Normal file
@@ -0,0 +1,47 @@
|
||||
import cv2
|
||||
import numpy as np
|
||||
import glob
|
||||
|
||||
videos = glob.glob('output/*.mp4')
|
||||
cap = cv2.VideoCapture(videos[0])
|
||||
cap.set(cv2.CAP_PROP_POS_FRAMES, 500)
|
||||
ret, frame = cap.read()
|
||||
cap.release()
|
||||
|
||||
def _find_white_tab_strip(bgr: np.ndarray):
|
||||
gray = cv2.cvtColor(bgr, cv2.COLOR_BGR2GRAY)
|
||||
_, binary = cv2.threshold(gray, 200, 255, cv2.THRESH_BINARY)
|
||||
h, w = binary.shape
|
||||
row_white_counts = np.sum(binary, axis=1) / 255
|
||||
threshold = w * 0.1
|
||||
white_rows = np.where(row_white_counts > threshold)[0]
|
||||
if len(white_rows) < 2: return None
|
||||
return white_rows[0], white_rows[-1]
|
||||
|
||||
strip = _find_white_tab_strip(frame)
|
||||
if strip:
|
||||
y1, y2 = strip
|
||||
roi = frame[y1:y2, :]
|
||||
|
||||
gray_roi = np.max(roi, axis=2)
|
||||
_, binary = cv2.threshold(gray_roi, 200, 255, cv2.THRESH_BINARY)
|
||||
|
||||
col_sums = np.sum(binary, axis=0) / 255
|
||||
h_roi = y2 - y1
|
||||
|
||||
# Relaxed to 40% to survive hand occlusions. Note stems max out at ~20-30%.
|
||||
bars = np.where(col_sums > h_roi * 0.4)[0]
|
||||
|
||||
clean_bars = []
|
||||
for x in bars:
|
||||
if not clean_bars or x - clean_bars[-1] > 20: # 20px min distance
|
||||
clean_bars.append(int(x))
|
||||
|
||||
# Include edges
|
||||
if not clean_bars or clean_bars[0] > 50: clean_bars.insert(0, 0)
|
||||
if clean_bars[-1] < binary.shape[1] - 50: clean_bars.append(binary.shape[1])
|
||||
|
||||
print(f"Top: {y1}, Bottom: {y2}, Height: {h_roi}")
|
||||
print(f"Detected Clean Measure Bars: {clean_bars}")
|
||||
else:
|
||||
print("Could not find tab strip.")
|
||||
Reference in New Issue
Block a user