Abhinand2001's picture
Upload 2 files
eeb4a26
raw
history blame
2.88 kB
import streamlit as st
import numpy as np
import pickle
import pandas as pd
from ultralytics import YOLO
import os
import glob
import cv2
from statistics import mode
letter_map={0: 'അ', 1: 'ആ', 2: 'ച', 3: 'ഇ', 4: 'ജ', 5: 'ക', 6: 'ല', 7: 'ൾ', 8: 'ണ', 9: 'ന', 10: 'പ', 11: 'ര', 12: 'ർ', 13: 'റ', 14: 'സ', 15: 'ട', 16: 'ത', 17: 'വ', 18: 'യ', 19: 'ഴ'}
st.header('Sign Detection')
model = YOLO(r"C:\Users\hp\OneDrive\Desktop\mini pro\mini\best.onnx",task='detect')
def extract_frames(uploaded_file, output_folder):
input_name = os.path.splitext(uploaded_file.name)[0]
if not os.path.exists(output_folder):
os.makedirs(output_folder)
content = uploaded_file.getvalue()
temp_file_path = os.path.join(output_folder, "temp_video.mp4")
with open(temp_file_path, "wb") as temp_file:
temp_file.write(content)
video_capture = cv2.VideoCapture(temp_file_path)
frame_count = 0
while True:
ret, frame = video_capture.read()
if not ret:
break
frame_filename = os.path.join(output_folder, f"{input_name}-{frame_count:04d}.jpg")
cv2.imwrite(frame_filename, frame)
frame_count += 1
video_capture.release()
st.write(f"Extracted {frame_count} frames from uploaded video to {output_folder}")
os.remove(temp_file_path)
uploaded_file = st.file_uploader("Choose a video file", type=["mp4"])
if uploaded_file is not None:
st.video(uploaded_file)
st.text("Uploaded Video")
if st.button("Submit"):
output_folder = r"C:\Users\hp\OneDrive\Desktop\mini pro\mini\output"
files = glob.glob(os.path.join(output_folder, '*'))
for file in files:
os.remove(file)
extract_frames(uploaded_file, output_folder)
preds=[]
t=[]
cl = []
previous_element = None
word=''
for file in sorted(os.listdir(output_folder)):
frame=os.path.join(output_folder,file)
print(frame)
res=model.predict(frame)
try:
preds.append(int(res[0].boxes.data[0][-1]))
except:
preds.append(-1)
st.write(preds)
if len(preds)%25:
a=0
b=a+25
for i in range((len(preds)//25)+1):
t.append(mode(preds[a:b]))
a,b=b,b+25
elif len(preds)%25:
a=0
b=a+25
for i in range(len(preds)//25):
t.append(mode(preds[a:b]))
a,b=b,b+25
for element in t:
if element != -1:
if element != previous_element:
cl.append(element)
previous_element = element
for i in cl:
word+=letter_map[i]
st.write(word)