File size: 3,518 Bytes
e218393 a582605 2753e83 a582605 2753e83 a582605 d740958 e218393 4563676 a582605 e218393 a582605 1647f6a a582605 e218393 a582605 120d786 a582605 9447b9b e218393 5f6f8b5 e218393 bc1bad1 9e0447a 9447b9b 23fa73c cc6af15 23fa73c 9447b9b 23fa73c e218393 eca9970 e218393 5ef8eae 2d7e30f 9447b9b a582605 e218393 4ab059a a582605 4563676 e218393 6b965e4 4ab059a c3c915d 4563676 a582605 e218393 4c3923d a582605 5e46dcf a582605 e218393 a582605 37c818f 5e46dcf a582605 4c3923d a582605 5025ff4 9ce669c 2d4f77c 9044f0e c2e2b8a a582605 e218393 |
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 |
# Import libraries
import gradio as gr
import torch
import PyPDF2
from transformers import pipeline
import numpy
import scipy
from gtts import gTTS
from io import BytesIO
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
from bark import SAMPLE_RATE, generate_audio, preload_models
# Function to extract text from PDF
# Defines a function to extract raw text from a PDF file
def extract_text(pdf_file):
pdfReader = PyPDF2.PdfReader(pdf_file)
pageObj = pdfReader.pages[0]
return pageObj.extract_text()
# Function to summarize text
# Defines a function to summarize the extracted text using facebook/bart-large-cnn
def summarize_text(text):
sentences = text.split(". ")
for i, sentence in enumerate(sentences):
if "Abstract" in sentence:
start = i + 1
end = start + 6
break
if start is not None and end is not None:
abstract = ". ".join(sentences[start:end+1])
#print(abstract)
else: #if the Abstract is not found
return("Abstract section not found")
# Load BART model & tokenizer
tokenizer = AutoTokenizer.from_pretrained("pszemraj/led-base-book-summary")
model = AutoModelForSeq2SeqLM.from_pretrained("pszemraj/led-base-book-summary")
# Tokenize abstract
inputs = tokenizer(abstract,
max_length=1024,
return_tensors="pt",
truncation=True)
# Generate summary
summary_ids = model.generate(inputs['input_ids'],
max_length=50,
min_length=30,
no_repeat_ngram_size=3,
encoder_no_repeat_ngram_size=3,
repetition_penalty=3.5,
num_beams=4,
do_sample=True,
early_stopping=False)
summary = tokenizer.decode(summary_ids[0], skip_special_tokens=True)
if '.' in summary:
index = summary.rindex('.')
if index != -1:
summary = summary[:index+1]
return summary
# Function to convert text to audio
# Defines a function to convert text to an audio file using Google Text-to-Speech
def text_to_audio(text):
#tts = gTTS(text, lang='en')
#buffer = BytesIO()
#tts.write_to_fp(buffer)
#buffer.seek(0)
#return buffer.read()
#######################
#preload_models()
speech_array = generate_audio(text)
return (SAMPLE_RATE, speech_array)
### Main function
### The main function that ties everything together:
### extracts text, summarizes, and converts to audio.
def audio_pdf(pdf_file):
text = extract_text(pdf_file)
summary = summarize_text(text)
audio = text_to_audio(summary)
return summary, audio
# Define Gradio interface
# Gradio web interface with a file input, text output to display the summary
# and audio output to play the audio file. # Launches the interface
inputs = gr.File()
summary_text = gr.Text()
audio_summary = gr.Audio()
iface = gr.Interface(
fn=audio_pdf,
inputs=inputs,
outputs=[summary_text,audio_summary],
title="PDF Audio Summarizer 📻",
description="App that converts an abstract into audio",
examples=["Attention_is_all_you_need.pdf",
"ImageNet_Classification.pdf"
]
)
iface.launch() # Launch the interface |