import gradio as gr import time import numpy as np from PIL import Image from paddleocr import PaddleOCR from transformers import TrOCRProcessor, VisionEncoderDecoderModel # Initialize models paddle_ocr = PaddleOCR(lang='fa', use_textline_orientation=True) trocr_processor = TrOCRProcessor.from_pretrained("microsoft/trocr-base-printed") trocr_model = VisionEncoderDecoderModel.from_pretrained("microsoft/trocr-base-printed") def run_paddleocr(image): """Run PaddleOCR on image""" # Convert to numpy array if needed if isinstance(image, Image.Image): image = np.array(image) result = paddle_ocr.ocr(image, cls=True) text = ' '.join([line[1][0] for line in result[0]]) if result else '' return text def run_trocr(image): """Run TrOCR on image""" # Convert to PIL Image if needed if isinstance(image, np.ndarray): image = Image.fromarray(image) pixel_values = trocr_processor(image, return_tensors="pt").pixel_values generated_ids = trocr_model.generate(pixel_values) return trocr_processor.batch_decode(generated_ids, skip_special_tokens=True)[0] def compare_models(image): """Compare PaddleOCR and TrOCR models""" # Convert to RGB if needed if isinstance(image, np.ndarray): image = Image.fromarray(image) image = image.convert("RGB") results = {} times = {} # Run PaddleOCR start = time.time() results['PaddleOCR'] = run_paddleocr(image) times['PaddleOCR'] = time.time() - start # Run TrOCR start = time.time() results['TrOCR'] = run_trocr(image) times['TrOCR'] = time.time() - start # Create comparison table comparison = f"""
مدل | متن استخراج شده | زمان پردازش (ثانیه) |
---|---|---|
PaddleOCR | {results['PaddleOCR']} | {times['PaddleOCR']:.3f} |
TrOCR | {results['TrOCR']} | {times['TrOCR']:.3f} |