File size: 2,696 Bytes
cc6360f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import cv2
import os
from moviepy.editor import *
import gradio as gr
import re

def parse_string(string, dataset):
    parsed_list = []
    start = 0
    otherword=""
    end = len(string)
    while start < end:
        max_chunk = ""
        max_length = 0
        for chunk in VideosNames:
            if string.startswith(chunk.lower(), start) and len(chunk) > max_length:
                max_chunk = chunk
                max_length = len(chunk)
        if max_chunk:
          if len(max_chunk)>1:
            parsed_list.append(max_chunk)
            print(max_chunk)
          else:
            otherword+=max_chunk
          start += len(max_chunk)
        else:
            parsed_list.append(otherword)
            otherword=""
            start += 1
    return parsed_list


def remove_empty_values(lst):
    return [x for x in lst if x and (not isinstance(x, (str, list, dict)) or x)]


def flatten_lists(lst):
    flat_list = []
    for i in lst:
        if type(i) == list:
            flat_list.extend(flatten_lists(i))
        else:
            flat_list.append(i)
    return flat_list



path = 'dataset'
videos = []
VideosNames = []
myList = os.listdir(path)
print(myList)
for cu_video in myList:
    current_Video = cv2.imread(f'{path}/{cu_video}')
    videos.append(current_Video)
    VideosNames.append((os.path.splitext(cu_video)[0]).replace("-"," ").lower())
print(VideosNames)

def texttoSign(text):
      text=text+" "
      text=text.lower()
      text=re.sub('[^a-z]+', ' ', text)
      framescount=0
      listofwords=parse_string(text,VideosNames)
      listofwords=remove_empty_values(listofwords)
      index=0
      for word in listofwords:
        if word not in VideosNames:
          listofwords[index]=(list(word))
        index+=1
      listofwords=flatten_lists(listofwords)
      clips=[]
      for i in range(len(listofwords)):

        path="Dataset/"+(listofwords[i])+".mp4"
        data=cv2.VideoCapture(path)
        framescount = data.get(cv2.CAP_PROP_FRAME_COUNT)
        fps = data.get(cv2.CAP_PROP_FPS)
        seconds = round(framescount / fps)
        clips.append(VideoFileClip(path))
        clips[i]=clips[i].subclip(1, seconds/2)
    
      result_clip=concatenate_videoclips(clips, method='compose')
      result_clip.write_videofile("combined.mp4", fps=30)
      return "combined.mp4"
 # except:
      #  pass


demo=gr.Interface(fn=texttoSign,
                  inputs="text",
                  outputs="video",
                  title="Urdu Text To Sign",
                  description="This is a small text to sign language model based on Urdu sign langugae standards",
                 examples=[["good boy"]])

demo.launch(debug=True)