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()