import cv2 import mediapipe as mp import json import os def extractLandmarksFromVideo(videoPath, letter, outputDir='landmarks'): mpHands = mp.solutions.hands hands = mpHands.Hands(static_image_mode=False, max_num_hands=1, min_detection_confidence=0.5) cap = cv2.VideoCapture(videoPath) landmarksData = [] while cap.isOpened(): success, frame = cap.read() if not success: break frame = cv2.flip(frame, 1) imageRGB = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) results = hands.process(imageRGB) frameLandmarks = [] if results.multi_hand_landmarks: handLandmarks = results.multi_hand_landmarks[0] for lm in handLandmarks.landmark: frameLandmarks.append({ "x": lm.x, "y": lm.y, "z": lm.z, }) if frameLandmarks: landmarksData.append(frameLandmarks) cap.release() hands.close() os.makedirs(outputDir, exist_ok=True) outputFilename = f"{letter.upper()}.json" outputPath = os.path.join(outputDir, outputFilename) with open(outputPath, "w") as f: json.dump({"frames": landmarksData}, f, indent=2) print(f"Saved landmarks to {outputPath}") def processAllVideosInDirectory(videoDirectory, outputDirectory='landmarks'): if not os.path.isdir(videoDirectory): print(f"Error: Video directory '{videoDirectory}' not found.") return os.makedirs(outputDirectory, exist_ok=True) for filename in os.listdir(videoDirectory): if filename.lower().endswith(('.mp4')): videoPath = os.path.join(videoDirectory, filename) letter = os.path.splitext(filename)[0] print(f"Processing video: {filename} for letter: {letter}") extractLandmarksFromVideo(videoPath, letter, outputDirectory) else: print(f"Skipping non-video file: {filename}") if __name__ == "__main__": videoInputDirectory = "../video_data" landmarkOutputDirectory = "../processed_data/landmarks" processAllVideosInDirectory(videoInputDirectory, landmarkOutputDirectory)