Spaces:
Build error
Build error
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) | |