OmidSakaki commited on
Commit
5c3f634
·
verified ·
1 Parent(s): 2d23095

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +55 -33
app.py CHANGED
@@ -2,16 +2,13 @@ import gradio as gr
2
  import time
3
  import numpy as np
4
  from PIL import Image
5
-
6
- try:
7
- from paddleocr import PaddleOCR
8
- paddle_ocr = PaddleOCR(lang='fa') # حذف پارامتر cls
9
- except ImportError:
10
- raise ImportError("لطفا ابتدا paddlepaddle و paddleocr را نصب کنید: pip install paddlepaddle paddleocr")
11
-
12
  from transformers import TrOCRProcessor, VisionEncoderDecoderModel
 
13
 
14
- # Initialize TrOCR
 
 
15
  trocr_processor = TrOCRProcessor.from_pretrained("microsoft/trocr-base-printed")
16
  trocr_model = VisionEncoderDecoderModel.from_pretrained("microsoft/trocr-base-printed")
17
 
@@ -21,10 +18,21 @@ def run_paddleocr(image):
21
  image = np.array(image)
22
 
23
  try:
24
- result = paddle_ocr.ocr(image) # حذف پارامتر cls
25
  return ' '.join([line[1][0] for line in result[0]]) if result else ''
26
  except Exception as e:
27
- return f"خطا در PaddleOCR: {str(e)}"
 
 
 
 
 
 
 
 
 
 
 
28
 
29
  def run_trocr(image):
30
  """Run TrOCR on image"""
@@ -36,10 +44,10 @@ def run_trocr(image):
36
  generated_ids = trocr_model.generate(pixel_values)
37
  return trocr_processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
38
  except Exception as e:
39
- return f"خطا در TrOCR: {str(e)}"
40
 
41
  def compare_models(image):
42
- """Compare PaddleOCR and TrOCR models"""
43
  if isinstance(image, np.ndarray):
44
  image = Image.fromarray(image)
45
  image = image.convert("RGB")
@@ -52,56 +60,70 @@ def compare_models(image):
52
  results['PaddleOCR'] = run_paddleocr(image)
53
  times['PaddleOCR'] = time.time() - start
54
 
 
 
 
 
 
55
  # Run TrOCR
56
  start = time.time()
57
  results['TrOCR'] = run_trocr(image)
58
  times['TrOCR'] = time.time() - start
59
 
 
60
  comparison = f"""
61
- <table style="width:100%">
 
 
 
 
 
62
  <tr>
63
- <th style="text-align:center">مدل</th>
64
- <th style="text-align:center">متن استخراج شده</th>
65
- <th style="text-align:center">زمان پردازش (ثانیه)</th>
66
  </tr>
67
  <tr>
68
- <td style="text-align:center">PaddleOCR</td>
69
- <td style="text-align:right; direction:rtl">{results['PaddleOCR']}</td>
70
- <td style="text-align:center">{times['PaddleOCR']:.3f}</td>
71
  </tr>
72
  <tr>
73
- <td style="text-align:center">TrOCR</td>
74
- <td style="text-align:right; direction:rtl">{results['TrOCR']}</td>
75
- <td style="text-align:center">{times['TrOCR']:.3f}</td>
76
  </tr>
77
  </table>
78
  """
79
 
80
- return comparison, results['PaddleOCR'], results['TrOCR']
81
 
82
  # Create Gradio interface
83
- with gr.Blocks(title="مقایسه مدل‌های OCR فارسی") as demo:
84
  gr.Markdown("""
85
- ## مقایسه عملکرد مدل‌های OCR ب��ای زبان فارسی
86
- این برنامه دو مدل مختلف OCR را روی تصاویر فارسی مقایسه می‌کند:
87
  1. PaddleOCR
88
- 2. TrOCR (مایکروسافت)
 
89
  """)
90
 
91
  with gr.Row():
92
  with gr.Column():
93
- image_input = gr.Image(label="تصویر ورودی", type="pil")
94
- submit_btn = gr.Button("مقایسه مدل‌ها", variant="primary")
95
 
96
  with gr.Column():
97
- comparison_output = gr.HTML(label="نتایج مقایسه")
98
- paddle_output = gr.Textbox(label="PaddleOCR")
99
- trocr_output = gr.Textbox(label="TrOCR")
 
 
100
 
101
  submit_btn.click(
102
  fn=compare_models,
103
  inputs=image_input,
104
- outputs=[comparison_output, paddle_output, trocr_output]
105
  )
106
 
107
  if __name__ == "__main__":
 
2
  import time
3
  import numpy as np
4
  from PIL import Image
5
+ from paddleocr import PaddleOCR
 
 
 
 
 
 
6
  from transformers import TrOCRProcessor, VisionEncoderDecoderModel
7
+ import easyocr
8
 
9
+ # Initialize models
10
+ paddle_ocr = PaddleOCR(lang='en') # PaddleOCR برای انگلیسی
11
+ easy_ocr = easyocr.Reader(['en']) # EasyOCR برای انگلیسی
12
  trocr_processor = TrOCRProcessor.from_pretrained("microsoft/trocr-base-printed")
13
  trocr_model = VisionEncoderDecoderModel.from_pretrained("microsoft/trocr-base-printed")
14
 
 
18
  image = np.array(image)
19
 
20
  try:
21
+ result = paddle_ocr.ocr(image)
22
  return ' '.join([line[1][0] for line in result[0]]) if result else ''
23
  except Exception as e:
24
+ return f"PaddleOCR Error: {str(e)}"
25
+
26
+ def run_easyocr(image):
27
+ """Run EasyOCR on image"""
28
+ if isinstance(image, Image.Image):
29
+ image = np.array(image)
30
+
31
+ try:
32
+ result = easy_ocr.readtext(image, detail=0)
33
+ return ' '.join(result) if result else ''
34
+ except Exception as e:
35
+ return f"EasyOCR Error: {str(e)}"
36
 
37
  def run_trocr(image):
38
  """Run TrOCR on image"""
 
44
  generated_ids = trocr_model.generate(pixel_values)
45
  return trocr_processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
46
  except Exception as e:
47
+ return f"TrOCR Error: {str(e)}"
48
 
49
  def compare_models(image):
50
+ """Compare all three OCR models"""
51
  if isinstance(image, np.ndarray):
52
  image = Image.fromarray(image)
53
  image = image.convert("RGB")
 
60
  results['PaddleOCR'] = run_paddleocr(image)
61
  times['PaddleOCR'] = time.time() - start
62
 
63
+ # Run EasyOCR
64
+ start = time.time()
65
+ results['EasyOCR'] = run_easyocr(image)
66
+ times['EasyOCR'] = time.time() - start
67
+
68
  # Run TrOCR
69
  start = time.time()
70
  results['TrOCR'] = run_trocr(image)
71
  times['TrOCR'] = time.time() - start
72
 
73
+ # Create comparison table
74
  comparison = f"""
75
+ <table style="width:100%; border-collapse: collapse;">
76
+ <tr style="background-color: #f2f2f2;">
77
+ <th style="padding: 8px; border: 1px solid #ddd; text-align: center;">Model</th>
78
+ <th style="padding: 8px; border: 1px solid #ddd; text-align: center;">Extracted Text</th>
79
+ <th style="padding: 8px; border: 1px solid #ddd; text-align: center;">Processing Time (s)</th>
80
+ </tr>
81
  <tr>
82
+ <td style="padding: 8px; border: 1px solid #ddd; text-align: center;">PaddleOCR</td>
83
+ <td style="padding: 8px; border: 1px solid #ddd;">{results['PaddleOCR']}</td>
84
+ <td style="padding: 8px; border: 1px solid #ddd; text-align: center;">{times['PaddleOCR']:.3f}</td>
85
  </tr>
86
  <tr>
87
+ <td style="padding: 8px; border: 1px solid #ddd; text-align: center;">EasyOCR</td>
88
+ <td style="padding: 8px; border: 1px solid #ddd;">{results['EasyOCR']}</td>
89
+ <td style="padding: 8px; border: 1px solid #ddd; text-align: center;">{times['EasyOCR']:.3f}</td>
90
  </tr>
91
  <tr>
92
+ <td style="padding: 8px; border: 1px solid #ddd; text-align: center;">TrOCR</td>
93
+ <td style="padding: 8px; border: 1px solid #ddd;">{results['TrOCR']}</td>
94
+ <td style="padding: 8px; border: 1px solid #ddd; text-align: center;">{times['TrOCR']:.3f}</td>
95
  </tr>
96
  </table>
97
  """
98
 
99
+ return comparison, results['PaddleOCR'], results['EasyOCR'], results['TrOCR']
100
 
101
  # Create Gradio interface
102
+ with gr.Blocks(title="English OCR Comparison Tool") as demo:
103
  gr.Markdown("""
104
+ ## English OCR Models Comparison
105
+ This tool compares three OCR models for English text:
106
  1. PaddleOCR
107
+ 2. EasyOCR
108
+ 3. TrOCR (Microsoft)
109
  """)
110
 
111
  with gr.Row():
112
  with gr.Column():
113
+ image_input = gr.Image(label="Input Image", type="pil")
114
+ submit_btn = gr.Button("Compare Models", variant="primary")
115
 
116
  with gr.Column():
117
+ comparison_output = gr.HTML(label="Comparison Results")
118
+ with gr.Accordion("Individual Results", open=False):
119
+ paddle_output = gr.Textbox(label="PaddleOCR Result")
120
+ easy_output = gr.Textbox(label="EasyOCR Result")
121
+ trocr_output = gr.Textbox(label="TrOCR Result")
122
 
123
  submit_btn.click(
124
  fn=compare_models,
125
  inputs=image_input,
126
+ outputs=[comparison_output, paddle_output, easy_output, trocr_output]
127
  )
128
 
129
  if __name__ == "__main__":