Spaces:
Runtime error
Runtime error
| import os | |
| import streamlit as st | |
| from PyPDF2 import PdfReader | |
| from TTS.api import TTS | |
| # Function to extract text from PDF | |
| def extract_text_from_pdf(pdf_path): | |
| reader = PdfReader(pdf_path) | |
| text = "" | |
| for page in reader.pages: | |
| if page.extract_text(): # Avoid NoneType errors for empty pages | |
| text += page.extract_text() | |
| return text | |
| # Function to convert text to audio | |
| def text_to_audio(text, output_path, speaker=None, language=None): | |
| # Initialize the TTS model | |
| model_name = TTS.list_models()[0] # Use the first available model | |
| tts = TTS(model_name) | |
| # Set default speaker and language if not provided | |
| if speaker is None and hasattr(tts, "speakers"): | |
| speaker = tts.speakers[0] # Default to the first speaker | |
| if language is None and hasattr(tts, "languages"): | |
| language = tts.languages[0] # Default to the first language | |
| tts.tts_to_file(text=text, file_path=output_path, speaker=speaker, language=language) | |
| # Streamlit app | |
| st.title("PDF to Audio Converter") | |
| st.write("Upload a PDF file, and we'll convert its content to an audio file.") | |
| uploaded_file = st.file_uploader("Choose a PDF file", type="pdf") | |
| if uploaded_file is not None: | |
| with st.spinner("Processing the PDF..."): | |
| try: | |
| # Save the uploaded file | |
| temp_pdf_path = "temp.pdf" | |
| with open(temp_pdf_path, "wb") as f: | |
| f.write(uploaded_file.read()) | |
| # Extract text | |
| text = extract_text_from_pdf(temp_pdf_path) | |
| if not text.strip(): | |
| st.error("The uploaded PDF is empty or does not contain readable text.") | |
| else: | |
| # Get speaker and language options if available | |
| model_name = TTS.list_models()[0] | |
| tts = TTS(model_name) | |
| speakers = tts.speakers if hasattr(tts, "speakers") else None | |
| languages = tts.languages if hasattr(tts, "languages") else None | |
| # Allow user to select a speaker and language if available | |
| speaker = None | |
| if speakers: | |
| speaker = st.selectbox("Choose a speaker:", speakers) | |
| language = None | |
| if languages: | |
| language = st.selectbox("Choose a language:", languages) | |
| # Save audio | |
| temp_audio_path = "output_audio.wav" | |
| text_to_audio(text, temp_audio_path, speaker, language) | |
| st.success("Conversion complete!") | |
| # Allow user to download the audio file | |
| with open(temp_audio_path, "rb") as f: | |
| st.download_button( | |
| label="Download Audio", | |
| data=f, | |
| file_name="output_audio.wav", | |
| mime="audio/wav" | |
| ) | |
| except Exception as e: | |
| st.error(f"An error occurred: {e}") | |
| finally: | |
| # Clean up temporary files | |
| if os.path.exists(temp_pdf_path): | |
| os.remove(temp_pdf_path) | |
| if os.path.exists("output_audio.wav"): | |
| os.remove("output_audio.wav") | |