-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathStreamlit_application.py
62 lines (44 loc) · 1.84 KB
/
Streamlit_application.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
from google.cloud import texttospeech
import streamlit as st
import PyPDF2
import os
import json
#google_application_credentials = st.secrets["GOOGLE_APPLICATION_CREDENTIALS"]
#os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = google_application_credentials
def pdf_to_text(pdf_path):
pdf_reader = PyPDF2.PdfReader(pdf_path)
num_pages = len(pdf_reader.pages)
extracted_text = ""
for page_index in range(num_pages):
page = pdf_reader.pages[page_index]
page_text = page.extract_text()
extracted_text += page_text
return extracted_text.strip()
def text_to_audio(text, language='en', gender='neutral', save_path='output.mp3'):
client = texttospeech.TextToSpeechClient()
synthesis_input = texttospeech.SynthesisInput(text=text)
voice = texttospeech.VoiceSelectionParams(
language_code=language,
ssml_gender=gender.upper() if gender in ['neutral', 'male', 'female'] else 'NEUTRAL',
)
audio_config = texttospeech.AudioConfig(
audio_encoding=texttospeech.AudioEncoding.MP3
)
response = client.synthesize_speech(
input=synthesis_input, voice=voice, audio_config=audio_config
)
with open(save_path, "wb") as out_file:
out_file.write(response.audio_content)
st.audio(save_path, format="audio/mp3")
st.title("Audiobook Generator")
uploaded_file = st.file_uploader("Upload a PDF file", type="pdf")
if uploaded_file is not None:
st.write("PDF file uploaded successfully!")
# Extract text from the PDF
extracted_text = pdf_to_text(uploaded_file)
# Language selection
language = st.selectbox("Select Language", ['en', 'de', 'fr', 'es'])
# Gender selection
gender = st.selectbox("Select Gender", ['neutral', 'male', 'female'])
# Convert text to audio and display
text_to_audio(extracted_text, language=language, gender=gender)