Spaces:
Sleeping
Sleeping
File size: 4,860 Bytes
9453eac 2bf547d 24f0403 9453eac 2bf547d 5c3f634 768d260 9453eac db9549c 768d260 1f0a2e7 768d260 9453eac 5c3f634 1f0a2e7 5c3f634 768d260 5c3f634 1f0a2e7 9453eac 2bf547d 1f0a2e7 dd4c7df 768d260 1f0a2e7 768d260 1f0a2e7 768d260 dd4c7df 1f0a2e7 2bf547d 1f0a2e7 2bf547d 24f0403 2bf547d 1f0a2e7 db9549c 768d260 2bf547d 1f0a2e7 768d260 db9549c 1f0a2e7 768d260 2bf547d db9549c 1f0a2e7 2bf547d 768d260 2bf547d db9549c 2bf547d db9549c 9453eac 1f0a2e7 db9549c 1f0a2e7 db9549c 9453eac 1f0a2e7 768d260 1f0a2e7 768d260 1f0a2e7 768d260 1f0a2e7 279ab91 1f0a2e7 db9549c 2bf547d 768d260 db9549c 9453eac 2bf547d |
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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
import gradio as gr
import time
import numpy as np
from PIL import Image
from transformers import TrOCRProcessor, VisionEncoderDecoderModel
import easyocr
from doctr.models import ocr_predictor
# Initialize models
models = {
"EasyOCR": easyocr.Reader(['fa']), # تنظیم زبان فارسی
"TrOCR": {
"processor": TrOCRProcessor.from_pretrained("microsoft/trocr-base-printed"),
"model": VisionEncoderDecoderModel.from_pretrained("microsoft/trocr-base-printed")
},
"DocTR": ocr_predictor(det_arch='db_resnet50', reco_arch='crnn_vgg16_bn', pretrained=True)
}
def run_easyocr(image):
"""تابع پردازش تصویر با EasyOCR برای فارسی"""
try:
result = models["EasyOCR"].readtext(np.array(image), detail=0)
return ' '.join(result) if result else ''
except Exception as e:
return f"خطا: {str(e)}"
def run_trocr(image):
"""تابع پردازش تصویر با TrOCR برای فارسی"""
try:
pixel_values = models["TrOCR"]["processor"](image, return_tensors="pt").pixel_values
generated_ids = models["TrOCR"]["model"].generate(pixel_values)
return models["TrOCR"]["processor"].batch_decode(generated_ids, skip_special_tokens=True)[0]
except Exception as e:
return f"خطا: {str(e)}"
def run_doctr(image):
"""تابع پردازش تصویر با DocTR برای فارسی"""
try:
if isinstance(image, Image.Image):
image = np.array(image)
result = models["DocTR"]([image])
return ' '.join([word[0] for page in result.pages for block in page.blocks
for line in block.lines for word in line.words])
except Exception as e:
return f"خطا: {str(e)}"
def compare_models(image):
"""تابع اصلی مقایسه مدلها"""
if isinstance(image, np.ndarray):
image = Image.fromarray(image)
image = image.convert("RGB")
results = {}
times = {}
# اجرای تمام مدلهای OCR
for name, func in [("EasyOCR", run_easyocr),
("TrOCR", run_trocr),
("DocTR", run_doctr)]:
start = time.time()
results[name] = func(image)
times[name] = time.time() - start
# ایجاد جدول مقایسه
table_rows = []
for name in results:
table_rows.append(f"""
<tr>
<td style="padding: 8px; border: 1px solid #ddd; text-align: center; font-weight: bold;">{name}</td>
<td style="padding: 8px; border: 1px solid #ddd; text-align: right; direction: rtl;">{results[name]}</td>
<td style="padding: 8px; border: 1px solid #ddd; text-align: center;">{times[name]:.3f} ثانیه</td>
</tr>
""")
comparison = f"""
<div style="overflow-x: auto;">
<table style="width:100%; border-collapse: collapse; margin: 15px 0; font-family: Arial, sans-serif;">
<tr style="background-color: #4CAF50; color: white;">
<th style="padding: 12px; border: 1px solid #ddd; text-align: center;">مدل</th>
<th style="padding: 12px; border: 1px solid #ddd; text-align: center;">متن استخراج شده</th>
<th style="padding: 12px; border: 1px solid #ddd; text-align: center;">زمان پردازش</th>
</tr>
{''.join(table_rows)}
</table>
</div>
"""
return comparison, results['EasyOCR'], results['TrOCR'], results['DocTR']
# رابط کاربری Gradio
with gr.Blocks(title="مقایسه مدلهای OCR فارسی", theme=gr.themes.Soft()) as demo:
gr.Markdown("""
# 🚀 مقایسه مدلهای تشخیص متن فارسی
مقایسه عملکرد مدلهای مختلف OCR برای استخراج متن از تصاویر فارسی
""")
with gr.Row():
with gr.Column():
img_input = gr.Image(label="تصویر ورودی", type="pil")
gr.Examples(
examples=["sample_fa1.jpg", "sample_fa2.png"],
inputs=img_input,
label="تصاویر نمونه"
)
submit_btn = gr.Button("مقایسه مدلها", variant="primary")
with gr.Column():
comparison = gr.HTML(label="نتایج مقایسه")
with gr.Accordion("نتایج تفکیکی", open=False):
gr.Markdown("### خروجی هر مدل")
easy_output = gr.Textbox(label="EasyOCR")
trocr_output = gr.Textbox(label="TrOCR")
doctr_output = gr.Textbox(label="DocTR")
submit_btn.click(
fn=compare_models,
inputs=img_input,
outputs=[comparison, easy_output, trocr_output, doctr_output]
)
if __name__ == "__main__":
demo.launch() |