human_action / prediction.py
rahul5035's picture
Update prediction.py
0ed07d4
import cv2
import numpy as np
import math
from collections import deque
import tensorflow as tf
from tensorflow import keras
from collections import OrderedDict
from keras.models import load_model
LCRN_model = load_model('LRCN_model.h5')
class Predict:
def __init__(self) :
pass
def prediction(self,input_path, output_path,frames_needed):
video_reader=cv2.VideoCapture(input_path)
original_video_width=int(video_reader.get(cv2.CAP_PROP_FRAME_WIDTH))
original_video_hight=int(video_reader.get(cv2.CAP_PROP_FRAME_HEIGHT))
video_writer=cv2.VideoWriter(output_path,cv2.VideoWriter_fourcc('V', 'P', '9', '0'),video_reader.get(cv2.CAP_PROP_FPS),(original_video_width,original_video_hight))
frames_deque=deque(maxlen=frames_needed)
predicted_class_name=""
IMAGE_HEIGHT , IMAGE_WIDTH = 64, 64
classes_to_be_used=["HorseRace","BenchPress","PullUps","PushUps","HorseRiding","HighJump","Swing"]
while video_reader.isOpened():
ok, frame = video_reader.read()
if not ok:
break
resized_frame = cv2.resize(frame, (IMAGE_HEIGHT, IMAGE_WIDTH))
normalized_frame = resized_frame / 255
frames_deque.append(normalized_frame)
if len(frames_deque) == frames_needed:
input_sequence = np.expand_dims(frames_deque, axis=0) # Add batch dimension
predicted_labels_probabilities = LCRN_model.predict(input_sequence)[0] # Get rid of outer batch dimension
predicted_label = np.argmax(predicted_labels_probabilities)
predicted_class_name = classes_to_be_used[predicted_label]
cv2.putText(frame, predicted_class_name, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
video_writer.write(frame)
video_reader.release()
video_writer.release()