Spaces:
Sleeping
Sleeping
File size: 3,299 Bytes
4ce49c4 8f3c067 4ce49c4 8f3c067 4ce49c4 8f3c067 4ce49c4 91e586d 4ce49c4 8f3c067 91e586d 4ce49c4 |
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 63 64 |
"""PDF processing functionality."""
import gradio as gr
from .pdf_text_extractor import PDFTextExtractor
class PDFProcessor:
"""Handles PDF processing operations."""
def __init__(self):
self.extractor = PDFTextExtractor()
def process_pdf(self, pdf_file):
"""Process PDF and extract text, then explanations, then audio, updating UI at each step."""
if pdf_file is None:
yield "", "No PDF uploaded", "", None, gr.update(visible=False)
return
try:
# Step 1: Extract text
# Show "Extracting text..." message
yield "", gr.update(value="Extracting text..."), "", None, gr.update(visible=False)
extracted_text, status, images_data = self.extractor.extract_text_from_pdf(pdf_file)
if not extracted_text or extracted_text.strip() == "":
yield extracted_text, status, "No text available to explain.", None, gr.update(visible=False)
return
# Show extracted text immediately, explanations/audio loading
yield extracted_text, status, gr.update(value="Generating explanations..."), None, gr.update(visible=False)
# Step 2: Generate explanations
try:
explanations = self.extractor.generate_explanations(extracted_text)
# Show explanations immediately, update status for audio loading
yield extracted_text, gr.update(value="Generating audio..."), explanations, None, gr.update(visible=False) # Step 3: Generate audio
try:
from .simple_audio_processor import SimpleAudioProcessor
# Create simplified audio processor
audio_processor = SimpleAudioProcessor()
# Generate progress callback for audio processing
def audio_progress(progress, desc=""):
yield extracted_text, gr.update(value=f"Generating audio: {desc}"), explanations, None, gr.update(visible=False)
# Generate audio using the simplified processor
audio_result, _ = audio_processor.generate_audio(explanations, progress=audio_progress)
# Show everything, update status to complete
yield extracted_text, gr.update(value="All steps complete!"), explanations, audio_result, gr.update(visible=True)
except Exception as audio_error:
# Show explanations, update status with audio error
yield extracted_text, gr.update(value=f"Audio generation failed: {str(audio_error)}"), explanations, None, gr.update(visible=False)
except Exception as explanation_error:
# Show extracted text, but indicate explanation error
yield extracted_text, status, f"Error generating explanations: {str(explanation_error)}", None, gr.update(visible=False)
except Exception as e:
yield "", f"Error processing PDF: {str(e)}", "", None, gr.update(visible=False)
|