File size: 5,696 Bytes
7d8f76d
efd6e56
 
d099ce5
efd6e56
 
 
 
 
 
 
 
 
 
 
 
7d8f76d
d1de822
 
 
 
 
 
 
 
051c974
 
d1de822
051c974
d1de822
051c974
d1de822
051c974
 
d1de822
051c974
 
 
 
 
 
d099ce5
 
7d8f76d
d1de822
d099ce5
d1de822
 
 
 
 
 
 
 
 
f5c44a6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d1de822
 
d4a060a
d1de822
 
 
 
 
 
 
 
 
 
 
 
d4a060a
d1de822
 
 
 
4d73b25
d099ce5
d1de822
d099ce5
 
d1de822
 
 
 
 
 
 
 
 
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
import gradio as gr
import torch
import whisper
from whisper.utils import write_vtt
import requests
from pytube import YouTube

### β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”

title="Transcript PDF"

### β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”

whisper_model = whisper.load_model("medium")

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

def transcribe(audio):
    
    print("""
    β€”
    Sending audio to Whisper ...
    β€”
    """)
    
    #audio = whisper.load_audio(audio)
    #audio = whisper.pad_or_trim(audio)
    
    #mel = whisper.log_mel_spectrogram(audio).to(whisper_model.device)
    
    #_, probs = whisper_model.detect_language(mel)
    
    #transcript_options = whisper.DecodingOptions(task="transcribe", fp16 = False)
    #translate_options = whisper.DecodingOptions(task="translate", fp16 = False)
    
    #transcription = whisper.decode(whisper_model, mel, transcript_options)
    #translation = whisper.decode(whisper_model, mel, translate_options)
    result = whisper_model.transcribe(audio)
    #print("Language Spoken: " + transcription.language)
    #print("Transcript: " + transcription.text)  
    #print("Translated: " + translation.text)
    with open('sub.vtt', "w") as f:
        write_vtt(result["segments"], file=f)

 
    return result["text"], "sub.vtt"

def transcribe_upload(audio):
    return transcribe(audio)

def transcribe_yt(link):
    yt = YouTube(link)
    path = yt.streams.filter(only_audio=True)[0].download(filename="audio.mp3")
    return transcribe(path)

css = """
        .gradio-container {
            font-family: 'IBM Plex Sans', sans-serif;
        }
        .gr-button {
            color: white;
            border-color: black;
            background: black;
        }
        input[type='range'] {
            accent-color: black;
        }
        .dark input[type='range'] {
            accent-color: #dfdfdf;
        }
        .container {
            max-width: 880px;
            margin: auto;
            padding-top: 1.5rem;
        }
        #gallery {
            min-height: 22rem;
            margin-bottom: 15px;
            margin-left: auto;
            margin-right: auto;
            border-bottom-right-radius: .5rem !important;
            border-bottom-left-radius: .5rem !important;
        }
        #gallery>div>.h-full {
            min-height: 20rem;
        }
        .details:hover {
            text-decoration: underline;
        }
        .gr-button {
            white-space: nowrap;
        }
        .gr-button:focus {
            border-color: rgb(147 197 253 / var(--tw-border-opacity));
            outline: none;
            box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
            --tw-border-opacity: 1;
            --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
            --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px var(--tw-ring-offset-width)) var(--tw-ring-color);
            --tw-ring-color: rgb(191 219 254 / var(--tw-ring-opacity));
            --tw-ring-opacity: .5;
        }
        #advanced-btn {
            font-size: .7rem !important;
            line-height: 19px;
            margin-top: 12px;
            margin-bottom: 12px;
            padding: 2px 8px;
            border-radius: 14px !important;
        }
        #advanced-options {
            display: none;
            margin-bottom: 20px;
        }
        .footer {
            margin-bottom: 45px;
            margin-top: 35px;
            text-align: center;
            border-bottom: 1px solid #e5e5e5;
        }
        .footer>p {
            font-size: .8rem;
            display: inline-block;
            padding: 0 10px;
            transform: translateY(10px);
            background: white;
        }
        .dark .footer {
            border-color: #303030;
        }
        .dark .footer>p {
            background: #0b0f19;
        }
"""

with gr.Blocks(css = css) as demo:
    gr.Markdown("""
                ## Transcript Generator
            """)
    gr.HTML('''
     <p style="margin-bottom: 10px">
                Save Transcripts of videos as PDF with the help of Whisper, which is a general-purpose speech recognition model released by OpenAI that can perform multilingual speech recognition as well as speech translation and language identification. 
              </p>
              ''')
    with gr.Column():
            #gr.Markdown(""" ### Record audio """)
        with gr.Tab("Youtube Link"):
            yt_input = gr.Textbox(label = 'Youtube Link')
            transcribe_audio_yt = gr.Button('Transcribe')
        
        with gr.Tab("Upload as File"):
            audio_input_u = gr.Audio(label = 'Upload Audio',source="upload",type="filepath")
            transcribe_audio_u = gr.Button('Transcribe')

        with gr.Row():
            transcript_output = gr.Textbox(label="Transcript", lines = 20)
            transcript_file = gr.File()
    
    transcribe_audio_yt.click(transcribe_yt, inputs = yt_input, outputs = [transcript_output, transcript_file])
    transcribe_audio_u.click(transcribe_upload, inputs = audio_input_u, outputs = [transcript_output, transcript_file])   
    gr.HTML('''
        <div class="footer">
                    <p>Whisper Model by <a href="https://github.com/openai/whisper" style="text-decoration: underline;" target="_blank">OpenAI</a>
                    </p>
        </div>
        ''')
        
demo.queue()    
demo.launch()