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("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 ="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) | |