11Abdul's picture
Docs updated
26b5c2c
raw
history blame contribute delete
No virus
2.06 kB
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()