CU2 / scripts /cursor_tracker.py
Fred808's picture
Upload 12 files
ba74f1a verified
import os
import cv2
import numpy as np
from pathlib import Path
def load_templates(cursor_dir):
templates = []
for fname in os.listdir(cursor_dir):
if fname.endswith('.png'):
templates.append(cv2.imread(os.path.join(cursor_dir, fname), cv2.IMREAD_UNCHANGED))
return templates
def track_cursor(frames_dir, cursor_dir, output_json):
import json
templates = load_templates(cursor_dir)
results = []
for frame_file in sorted(os.listdir(frames_dir)):
if not frame_file.endswith('.png'):
continue
frame_path = os.path.join(frames_dir, frame_file)
frame = cv2.imread(frame_path)
best_match = None
best_val = -np.inf
for template in templates:
res = cv2.matchTemplate(frame, template[..., :3], cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
if max_val > best_val:
best_val = max_val
best_match = (max_loc, template.shape[:2], max_val)
if best_match:
(x, y), (h, w), score = best_match
results.append({"frame": frame_file, "cursor_pos": [int(x), int(y)], "score": float(score)})
with open(output_json, "w") as f:
json.dump(results, f, indent=2)
print(f"Cursor tracking complete. Results saved to {output_json}")
if __name__ == "__main__":
track_cursor("frames", "cursors", "annotations/cursor_positions.json")