fix(cv): resolve infinite page duplication bug caused by playback cursor
This commit is contained in:
50
scripts/debug/dump_measure_numbers.py
Normal file
50
scripts/debug/dump_measure_numbers.py
Normal file
@@ -0,0 +1,50 @@
|
||||
import cv2
|
||||
import numpy as np
|
||||
import os
|
||||
|
||||
pdf_path = r"C:\Users\Certes\Desktop\guitar_score\output\shintakarajima_perfect.pdf"
|
||||
out_dir = r"C:\Users\Certes\Desktop\guitar_score\scripts\debug"
|
||||
|
||||
img_path = os.path.join(out_dir, "verify_chunk_0.jpg") # from previous sessions
|
||||
if not os.path.exists(img_path):
|
||||
print("verify_chunk_0.jpg not found. extracting a page from PDF...")
|
||||
import fitz
|
||||
doc = fitz.open(pdf_path)
|
||||
page = doc.load_page(0)
|
||||
pix = page.get_pixmap(dpi=150)
|
||||
pix.save(os.path.join(out_dir, "pdf_test_page.png"))
|
||||
img_path = os.path.join(out_dir, "pdf_test_page.png")
|
||||
|
||||
img = cv2.imread(img_path)
|
||||
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
|
||||
_, bin_inv = cv2.threshold(gray, 200, 255, cv2.THRESH_BINARY_INV)
|
||||
|
||||
h, w = img.shape[:2]
|
||||
staff_y_top = int(h * 0.3)
|
||||
row_sums = np.sum(bin_inv[:, :min(w, 1000)], axis=1) / 255.0
|
||||
staff_rows = np.where(row_sums > min(w, 1000) * 0.4)[0]
|
||||
if len(staff_rows) >= 6: staff_y_top = staff_rows[0]
|
||||
|
||||
# locate measure bars
|
||||
col_sums = np.sum(bin_inv[staff_y_top:staff_y_top+100, :], axis=0) / 255.0
|
||||
bar_xs = np.where(col_sums > 30)[0]
|
||||
bars = []
|
||||
if len(bar_xs) > 0:
|
||||
curr = [bar_xs[0]]
|
||||
for x in bar_xs[1:]:
|
||||
if x - curr[-1] < 10: curr.append(x)
|
||||
else:
|
||||
bars.append(int(np.mean(curr)))
|
||||
curr = [x]
|
||||
bars.append(int(np.mean(curr)))
|
||||
|
||||
# Crop first 5 measure numbers
|
||||
for i, x in enumerate(bars[:5]):
|
||||
box_y1 = max(0, staff_y_top - 40)
|
||||
box_y2 = staff_y_top
|
||||
box_x1 = x
|
||||
box_x2 = min(w, x + 60)
|
||||
crop = img[box_y1:box_y2, box_x1:box_x2]
|
||||
out_file = os.path.join(out_dir, f"measure_num_{i}.png")
|
||||
cv2.imwrite(out_file, crop)
|
||||
print(f"Saved measure number crop to {out_file}")
|
||||
Reference in New Issue
Block a user