| import gradio as gr | |
| from pathlib import Path | |
| from pypdf import PdfReader | |
| from transformers.utils import logging | |
| logging.set_verbosity_error() | |
| from transformers import pipeline | |
| import torch | |
| device = "cuda:0" if torch.cuda.is_available() else "cpu" | |
| summarizer = pipeline( | |
| task="summarization", | |
| model="facebook/bart-large-cnn", | |
| torch_dtype=torch.bfloat16, | |
| device=device | |
| ) | |
| narrator = pipeline("text-to-speech", model="suno/bark-small", device=device) | |
| def upload_file(filepath): | |
| file_path = Path(filepath).name | |
| return file_path | |
| def pdf_to_audio(file_output): | |
| pdf_summary = "" | |
| pdf_reader = PdfReader(file_output) | |
| for page in pdf_reader.pages: | |
| page_summary = summarizer(page.extract_text(), min_length=10, max_length=100) | |
| pdf_summary = pdf_summary + page_summary[0]["summary_text"] + " " | |
| narrated_text = narrator(pdf_summary) | |
| return gr.Audio((narrated_text["sampling_rate"], narrated_text["audio"].T)) | |
| with gr.Blocks() as demo: | |
| file_output = gr.File() | |
| upload_button = gr.UploadButton( | |
| "Click to upload your PDF file", file_types=["file"], file_count="single" | |
| ) | |
| upload_button.upload(upload_file, upload_button, file_output) | |
| audio = gr.Interface( | |
| fn=pdf_to_audio, | |
| inputs=file_output, | |
| outputs="audio", | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch(debug=True) | |