|
import gradio as gr |
|
from gtts import gTTS |
|
from pdfplumber import open as pp_open |
|
import os |
|
|
|
def convert_pdf_to_speech(pdf, language): |
|
""" |
|
This function takes in a PDF file and converts it to speech. |
|
|
|
Parameters: |
|
pdf (str): The path to the PDF file. |
|
language (str): The language of the text. |
|
|
|
Returns: |
|
A message stating that the PDF has been converted to speech and the path to the MP3 file. |
|
""" |
|
|
|
|
|
pdf_content = "" |
|
|
|
with pp_open(pdf) as pdf_file: |
|
for page in pdf_file.pages: |
|
pdf_content += page.extract_text() |
|
|
|
|
|
output_dir = "output" |
|
if not os.path.exists(output_dir): |
|
os.makedirs(output_dir) |
|
|
|
|
|
tts = gTTS(text=pdf_content, lang=language) |
|
filename = os.path.basename(pdf) |
|
filename = f"{filename.split('.')[0]}.mp3" |
|
|
|
|
|
output_path = os.path.join(output_dir, filename) |
|
tts.save(output_path) |
|
|
|
return output_path |
|
|
|
demo = gr.Blocks(theme='gradio/soft') |
|
|
|
with demo: |
|
|
|
with gr.Column(): |
|
gr.Markdown("<b>PDF Text-to-Speech Converter</b>") |
|
gr.Markdown("Convert your PDF files to audio books") |
|
|
|
|
|
pdf_input = gr.File(label="Select a PDF", type="filepath") |
|
|
|
|
|
language_selector = gr.Dropdown( |
|
label="Language", |
|
value="en", |
|
choices=["en", "es", "de", "it", "fr"], |
|
interactive=True, |
|
) |
|
|
|
|
|
button = gr.Button("Convert PDF to Speech") |
|
|
|
|
|
output = gr.File(label="Download MP3") |
|
|
|
|
|
button.click(convert_pdf_to_speech, inputs=[pdf_input, language_selector], outputs=output) |
|
|
|
demo.launch() |
|
|