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. """ # Extract text from the PDF pdf_content = "" with pp_open(pdf) as pdf_file: for page in pdf_file.pages: pdf_content += page.extract_text() # Define the output directory and ensure it exists output_dir = "output" if not os.path.exists(output_dir): os.makedirs(output_dir) # Convert PDF to speech tts = gTTS(text=pdf_content, lang=language) filename = os.path.basename(pdf) filename = f"{filename.split('.')[0]}.mp3" # Save the file in the 'output' folder output_path = os.path.join(output_dir, filename) tts.save(output_path) return output_path demo = gr.Blocks(theme='gradio/soft') with demo: # App description with gr.Column(): gr.Markdown("PDF Text-to-Speech Converter") gr.Markdown("Convert your PDF files to audio books") # Input for the PDF pdf_input = gr.File(label="Select a PDF", type="filepath") # Language selector language_selector = gr.Dropdown( label="Language", value="en", choices=["en", "es", "de", "it", "fr"], interactive=True, ) # Button to start the conversion process button = gr.Button("Convert PDF to Speech") # Output message output = gr.File(label="Download MP3") # Button click handler button.click(convert_pdf_to_speech, inputs=[pdf_input, language_selector], outputs=output) demo.launch()