File size: 2,027 Bytes
fa61d0b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
from transformers import Wav2Vec2ForCTC, Wav2Vec2Tokenizer
import torchaudio
import torch
import spacy
from transformers import pipeline

nlp_ner = spacy.load("en_core_web_sm")


def ner(text):
    doc = nlp_ner(text)
    entities = [(ent.text, ent.label_) for ent in doc.ents]
    return entities


def main():
    st.title("Text and Speech Analysis")

    option = st.radio("Choose an option:", ("Upload Audio", "Enter Text"))

    if option == "Upload Audio":
        audio_file = st.file_uploader("Upload an audio file", type=["mp3", "wav"])

        if audio_file is not None:
            text_result = process_input(audio_file)
            st.success("Audio processed successfully!")
            st.text(text_result)
            process_and_display_text(text_result)

    elif option == "Enter Text":
        text_input = st.text_area("Enter your text here:")

        if st.button("Submit"):
            if text_input:
                process_and_display_text(text_input)


def process_input(audio_input):
    model = Wav2Vec2ForCTC.from_pretrained("facebook/wav2vec2-base-960h")
    tokenizer = Wav2Vec2Tokenizer.from_pretrained("facebook/wav2vec2-base-960h")
    audio_input, _ = torchaudio.load(audio_input)
    input_values = tokenizer(audio_input.squeeze().numpy(), return_tensors="pt").input_values

    with torch.no_grad():
        logits = model(input_values).logits

    prediction_ids = torch.argmax(logits, dim=-1)
    transcription = tokenizer.batch_decode(prediction_ids)[0]
    return transcription


def process_and_display_text(input_text):
    summarization_pipeline = pipeline("summarization", model="facebook/bart-large-cnn")
    ner_results = dict(set(ner(input_text)))
    summary = summarization_pipeline(
        input_text, max_length=150, min_length=50, length_penalty=2.0, num_beams=4, temperature=0.7
    )
    st.write("Named Entities")
    st.table(ner_results)
    st.write("Summary")
    st.write(summary[0]["summary_text"])


if __name__ == "__main__":
    main()