Spaces:
Runtime error
Runtime error
import cv2 | |
import numpy as np | |
import gradio as gr | |
from tensorflow.keras.models import load_model | |
# Define constants | |
SEQUENCE_LENGTH = 20 # Number of frames to extract | |
IMAGE_HEIGHT = 64 # Height of each frame | |
IMAGE_WIDTH = 64 # Width of each frame | |
CLASSES_LIST = ["Archery", "BabyCrawling", "Balance_Beam", "EyeMakeup", "LipStick"] | |
# Load the model | |
loaded_model = load_model(r"LRCN_model.h5") | |
def frames_extraction(video_reader): | |
frames_list = [] | |
video_frames_count = int(video_reader.get(cv2.CAP_PROP_FRAME_COUNT)) | |
skip_frames_window = max(int(video_frames_count / SEQUENCE_LENGTH), 1) # default skip is 1 | |
for frame_counter in range(SEQUENCE_LENGTH): | |
video_reader.set(cv2.CAP_PROP_POS_FRAMES, frame_counter * skip_frames_window) | |
success, frame = video_reader.read() | |
if not success: | |
break | |
resized_frame = cv2.resize(frame, (IMAGE_HEIGHT, IMAGE_WIDTH)) | |
normalized_frame = resized_frame / 255 # color 0-255 | |
frames_list.append(normalized_frame) | |
video_reader.release() | |
return frames_list | |
# Function to classify the video | |
def classify_video(frames): | |
predicted_labels = np.argmax(loaded_model.predict(frames), axis=1) | |
predicted_class_label = CLASSES_LIST[predicted_labels[0]] # Ensure we get the label for the first prediction | |
return predicted_class_label | |
# Define the prediction function | |
def predict_video(video_file): | |
video_capture = cv2.VideoCapture(video_file) | |
features = [] | |
video_reader = video_capture | |
frames = frames_extraction(video_reader) | |
if len(frames) == SEQUENCE_LENGTH: | |
features.append(frames) | |
features = np.asarray(features) | |
predicted_class = classify_video(features) | |
video_capture.release() | |
return predicted_class | |
# Gradio interface definition | |
iface = gr.Interface( | |
fn=predict_video, | |
inputs=gr.Video(), | |
outputs="text", | |
title="Action Recognition with LSTM", | |
description="Upload a video and get the predicted action class." | |
) | |
# Launch the Gradio interface | |
iface.launch() |