Summarizer / app.py
ela-sarhani's picture
Update app.py
dcaa980 verified
Raw
History Blame Contribute Delete
3.3 kB
import gradio as gr
import easyocr
from transformers import pipeline
import numpy as np
from PIL import Image
# Initialize EasyOCR reader (English by default, can add more languages)
reader = easyocr.Reader(['en'], gpu=False)
# Initialize summarization pipeline from Hugging Face
summarizer = pipeline("summarization", model="facebook/bart-large-cnn")
def extract_and_summarize(image):
"""
Extract text from image using EasyOCR and summarize using BART
Args:
image: PIL Image or numpy array
Returns:
tuple: (extracted_text, summary)
"""
try:
# Convert PIL Image to numpy array if needed
if isinstance(image, Image.Image):
image = np.array(image)
# Extract text using EasyOCR
results = reader.readtext(image)
# Combine all extracted text
extracted_text = " ".join([result[1] for result in results])
if not extracted_text.strip():
return "No text detected in the image.", "No text to summarize."
# Check if text is long enough to summarize
word_count = len(extracted_text.split())
if word_count < 30:
return extracted_text, "Text is too short to summarize. Minimum 30 words required."
# Summarize the extracted text
# Adjust max_length and min_length based on input length
max_length = min(150, word_count)
min_length = min(30, word_count // 2)
summary = summarizer(
extracted_text,
max_length=max_length,
min_length=min_length,
do_sample=False
)
summary_text = summary[0]['summary_text']
return extracted_text, summary_text
except Exception as e:
return f"Error: {str(e)}", "Could not generate summary due to error."
# Create Gradio interface
with gr.Blocks(title="OCR & Text Summarizer") as demo:
gr.Markdown(
"""
# 📝 OCR & Text Summarizer
Upload an image containing text, and this app will:
1. Extract the text using EasyOCR
2. Summarize the extracted text using AI (BART model)
**Note:** Works best with clear, readable text. Minimum 30 words required for summarization.
"""
)
with gr.Row():
with gr.Column():
image_input = gr.Image(
type="pil",
label="Upload Image"
)
submit_btn = gr.Button("Extract & Summarize", variant="primary")
with gr.Column():
extracted_output = gr.Textbox(
label="Extracted Text",
lines=10,
placeholder="Extracted text will appear here..."
)
summary_output = gr.Textbox(
label="Summary",
lines=5,
placeholder="Summary will appear here..."
)
gr.Examples(
examples=[],
inputs=image_input,
label="Example Images (Add your own)"
)
submit_btn.click(
fn=extract_and_summarize,
inputs=image_input,
outputs=[extracted_output, summary_output]
)
# Launch the app
if __name__ == "__main__":
demo.launch()