Spaces:
Sleeping
Sleeping
# -*- coding: utf-8 -*- | |
""" | |
Created on Mon Dec 11 19:31:04 2023 | |
@author: Pranav | |
""" | |
import streamlit as st | |
import os | |
import cv2 | |
import numpy as np | |
import pandas as pd | |
import tensorflow as tf | |
from tensorflow import keras | |
from keras.models import load_model | |
from utils import eval_real,load_video | |
import tempfile | |
st.title('Action Recognition video spliter') | |
st.header('Please Upload a Video') | |
file = st.file_uploader('',type=['mp4']) | |
isresnet = st.button("Load Resnet Model") | |
iscnnlstm = st.button("Load CNN-LSTM Model") | |
label_data = pd.read_csv("classes.txt", sep = ' ', header = None) | |
label_data.columns = ['index','labels'] | |
classes = label_data['labels'] | |
if file is not None : | |
video_bytes = file.read() | |
st.video(video_bytes) | |
with tempfile.NamedTemporaryFile(dir='.') as f: | |
f.write(file.getbuffer()) | |
model = load_model('activity_recognition.h5',compile = False) | |
if iscnnlstm == True : | |
model = load_model('activity_recognition2.h5',compile = False) | |
images = load_video(f.name) | |
edited_img = [] | |
count = 0 | |
for count in range(len(images[0]) - 15): | |
imgs = images[0][count:count+15] | |
edited_img.append(imgs) | |
count += 1 | |
edited_imgs = np.array(edited_img) | |
images_arr = np.array(images) | |
model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy']) | |
pred = [] | |
with st.spinner('Wait for it...'): | |
for img in edited_imgs: | |
img = img.reshape(1,15,64,64,3) | |
prediction = eval_real(img,model) | |
pred.append(prediction) | |
st.success('Done!') | |
names = [] | |
start = [] | |
end = [] | |
start.append(0) | |
names.append(classes[pred[0]]) | |
for i in range(len(pred)-1): | |
if pred[i] != pred[i+1] : | |
names.append(classes[pred[i]]) | |
if len(end) != 0: | |
end.pop() | |
end.append(i) | |
start.append(i+1) | |
end.append(i+1) | |
else : | |
if len(end) != 0: | |
end.pop() | |
end.append(i) | |
for j in range(len(end)): | |
if j < len(names) : | |
name = names[j] | |
else: name = names[j-1] | |
if start[j] - end[j] != 0: | |
st.write('Video ',j,' Start: ',start[j],' End: ',end[j],name) | |
else: | |
st.write('Video',j,'Insignificant Change') |