import gradio as gr from PIL import Image import os from IndicPhotoOCR.ocr import OCR # Ensure OCR class is saved in a file named ocr.py from IndicPhotoOCR.theme import Seafoam from IndicPhotoOCR.utils.helper import detect_para # Possible values for identifier_lang VALID_IDENTIFIER_LANGS = ["hindi", "assamese", "bengali", "gujarati", "kannada", "malayalam","odia", "punjabi", "tamil", "telugu", "auto"] # Add more as needed def process_image(image, identifier_lang): """ Processes the uploaded image for text detection and recognition. - Detects bounding boxes in the image - Draws bounding boxes on the image and identifies script in each detected area - Recognizes text in each cropped region and returns the annotated image and recognized text Parameters: image (PIL.Image): The input image to be processed. identifier_lang (str): The script identifier model to use. Returns: tuple: A PIL.Image with bounding boxes and a string of recognized text. """ # Save the input image temporarily image_path = "input_image.jpg" image.save(image_path) # Initialize OCR with the selected identifier language ocr = OCR(device="cpu", identifier_lang=identifier_lang, verbose=False) # Detect bounding boxes on the image using OCR detections = ocr.detect(image_path) # Draw bounding boxes on the image and save it as output ocr.visualize_detection(image_path, detections, save_path="output_image.png") # Load the annotated image with bounding boxes drawn output_image = Image.open("output_image.png") # Recognize text from the detected areas recognized_text = ocr.ocr(image_path) recognized_text = '\n'.join([' '.join(line) for line in recognized_text]) return output_image, recognized_text # Custom HTML for interface header with logos and alignment interface_html = """