File size: 3,777 Bytes
a9eb918
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import yt_dlp
import whisper
import os
import transformers
from transformers import pipeline
import torch
from summarizer import Summarizer

#Download youtube video
def download_audio(link):
    with yt_dlp.YoutubeDL({'extract_audio': True, 'format': 'bestaudio', 'outtmpl': 'video.mp3'}) as video:
        info_dict = video.extract_info(link, download = True)
        video_title = info_dict['title']
        video.download(link)
        return video_title

#def portuguese_sum_pipeline(link):
#    video_title = download_audio(link)

def english_sum_pipeline(link):
    video_title = download_audio(link)

    #audio-to-text
    transcriptor = whisper.load_model("base.en")
    directory = os.getcwd()
    result = model.transcribe(os.path.join(directory, "video.mp3"))
    transcript_text = result["text"]

    #extractive summarization
    extractive_model = Summarizer()
    extractive = extractive_model(transcript_text, num_sentences=15)

    #abstractive summarization
    device_num = 0 if torch.cuda.is_available() else -1
    abstractive_summarizer = pipeline("summarization", model="facebook/bart-large-cnn", tokenizer="facebook/bart-large-cnn", device=device_num)
    output_text = abstractive_summarizer(extractive)[0]["summary_text"]

    return transcript_text, output_text

def english_qa_pipeline(question, context):
    nlp = pipeline("question-answering", model='distilbert-base-uncased-distilled-squad')
    result = nlp(question=question, context=context)
    return result["answer"]
    
    
                    
#Collect inputs and create the interface
def main():
    header = st.container()
    model = st.container()
    model_1, model_2 = st.columns(2)
    qa = st.container
    qa_1, qa_2 = st.columns(2)

    with header:
        st.title("TuringVideos")
        st.write("Este trabalho visa a criação de uma interface capaz de sumarizar e responder perguntas sobre um determinado vídeo em português ou inglês!")

    with model:
        st.header("Modelo para sumarização")
        
        with model_1:
            language = st.selectbox('Qual a linguagem do seu modelo?', ('Português (pt)', 'Inglês (en)', 'Outra'))
            link = st.text_area(label="Coloque o link do seu vídeo do YouTube!", height=25, placeholder="Digite seu link...")
            submit_1 = st.button('Gerar sumário!')

        with model_2:
            if submit_1:
                if language == 'Português (pt)':
                    #outputs = portuguese_sum_pipeline(link)
                    st.write("Modelo ainda não implementado.")

                elif language == 'Inglês (en)':
                    outputs = english_sum_pipeline(link)
                
                else:
                    st.write("Erro na seleção de linguagem.")

                st.write("Sumário.....................................................................: \n {} \n \n".format(outputs[1]))

    with qa:
        st.header("Modelo para resposta de perguntas")
        
        with model_1:
            question = st.text_area(label="Digite sua pergunta para o modelo", height=25, placeholder="Digite sua pergunta...")
            submit = st.button('Gerar resposta!')

        with model_2:
            if submit_2:
                if language == 'Português (pt)':
                    #answer = portuguese_qa_pipeline(link)
                    st.write("Modelo ainda não implementado.")

                elif language == 'Inglês (en)':
                    answer = english_qa_pipeline(question, outputs[0])
                
                else:
                    st.write("Erro na seleção de linguagem.")

                st.write("Resposta.....................................................................: \n {} \n \n".format(answer))

main()