_demo42 / app.py
varl42's picture
Update app.py
1bd3a8d
raw
history blame
1.94 kB
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
def extract_text(pdf_file):
pdfReader = PyPDF2.PdfReader(pdf_file)
pageObj = pdfReader.pages[0]
return pageObj.extract_text()
def summarize_text(text):
sentences = text.split(". ")
# Find abstract section
for i, sentence in enumerate(sentences):
if "Abstract" in sentence:
start = i + 1
end = start + 3
break
# Extract abstract
abstract = ". ".join(sentences[start:end+1])
# Load BART model & tokenizer
tokenizer = AutoTokenizer.from_pretrained("facebook/bart-large-cnn")
model = AutoModelForSeq2SeqLM.from_pretrained("facebook/bart-large-cnn", low_cpu_mem_usage=True)
# Tokenize abstract
inputs = tokenizer(abstract, return_tensors="pt", truncation=True)
# Generate summary
summary_ids = model.generate(inputs['input_ids'], num_beams=5, max_length=45, min_length=30, early_stopping=True)
summary = tokenizer.decode(summary_ids[0], skip_special_tokens=True)
return summary
def text_to_audio(text):
tts = gTTS(text, lang='en')
buffer = BytesIO()
tts.write_to_fp(buffer)
buffer.seek(0)
return buffer.read()
def audio_pdf(pdf_file):
text = extract_text(pdf_file)
summary = summarize_text(text)
audio = text_to_audio(summary)
return summary, audio
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()