LLDDWW commited on
Commit
7a2cdb5
ยท
1 Parent(s): 63c2769

Switch OCR engine to PaddleOCR

Browse files
Files changed (1) hide show
  1. app.py +10 -10
app.py CHANGED
@@ -10,7 +10,7 @@ import torch
10
  from PIL import Image
11
  from transformers import AutoTokenizer, AutoModelForCausalLM
12
  from huggingface_hub import login
13
- import easyocr
14
 
15
  # Hugging Face ํ† ํฐ์œผ๋กœ ๋กœ๊ทธ์ธ (Spaces Secret์—์„œ ๊ฐ€์ ธ์˜ด)
16
  HF_TOKEN = os.getenv("HF_TOKEN")
@@ -30,9 +30,9 @@ def load_models():
30
  global OCR_READER, MED_MODEL, MED_TOKENIZER
31
 
32
  if OCR_READER is None:
33
- print("๐Ÿ”„ Loading EasyOCR (Korean + English)...")
34
- OCR_READER = easyocr.Reader(['ko', 'en'], gpu=True)
35
- print("โœ… EasyOCR loaded!")
36
 
37
  if MED_MODEL is None:
38
  print("๐Ÿ”„ Loading Gemma-2-2B for medical analysis (8bit quantization)...")
@@ -71,19 +71,19 @@ def analyze_medication_image(image: Image.Image) -> Tuple[str, str]:
71
  """์ด๋ฏธ์ง€์—์„œ OCR ์ถ”์ถœ ํ›„ ์•ฝ ์ •๋ณด ๋ถ„์„"""
72
  import time
73
  try:
74
- # Step 1: OCR - EasyOCR๋กœ ๋น ๋ฅด๊ฒŒ ํ…์ŠคํŠธ ์ถ”์ถœ
75
  start_time = time.time()
76
  img_array = np.array(image)
77
- ocr_results = OCR_READER.readtext(img_array)
78
  ocr_time = time.time() - start_time
79
  print(f"โฑ๏ธ OCR took {ocr_time:.2f}s")
80
 
81
- if not ocr_results:
82
  return "ํ…์ŠคํŠธ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", ""
83
 
84
- # ํ…์ŠคํŠธ ์ถ”์ถœ (์‹ ๋ขฐ๋„ ์ˆœ์œผ๋กœ ์ •๋ ฌ)
85
- ocr_results_sorted = sorted(ocr_results, key=lambda x: x[1], reverse=True)
86
- ocr_text = "\n".join([text for _, text, _ in ocr_results])
87
 
88
  # Step 2: ์•ฝ ์ •๋ณด ๋ถ„์„ - MedGemma๋กœ ์˜๋ฃŒ ์ •๋ณด ์ œ๊ณต
89
  analysis_start = time.time()
 
10
  from PIL import Image
11
  from transformers import AutoTokenizer, AutoModelForCausalLM
12
  from huggingface_hub import login
13
+ from paddleocr import PaddleOCR
14
 
15
  # Hugging Face ํ† ํฐ์œผ๋กœ ๋กœ๊ทธ์ธ (Spaces Secret์—์„œ ๊ฐ€์ ธ์˜ด)
16
  HF_TOKEN = os.getenv("HF_TOKEN")
 
30
  global OCR_READER, MED_MODEL, MED_TOKENIZER
31
 
32
  if OCR_READER is None:
33
+ print("๐Ÿ”„ Loading PaddleOCR (Korean)...")
34
+ OCR_READER = PaddleOCR(lang='korean', use_angle_cls=True, show_log=False)
35
+ print("โœ… PaddleOCR loaded!")
36
 
37
  if MED_MODEL is None:
38
  print("๐Ÿ”„ Loading Gemma-2-2B for medical analysis (8bit quantization)...")
 
71
  """์ด๋ฏธ์ง€์—์„œ OCR ์ถ”์ถœ ํ›„ ์•ฝ ์ •๋ณด ๋ถ„์„"""
72
  import time
73
  try:
74
+ # Step 1: OCR - PaddleOCR๋กœ ํ•œ๊ธ€ ํ…์ŠคํŠธ ์ถ”์ถœ
75
  start_time = time.time()
76
  img_array = np.array(image)
77
+ ocr_results = OCR_READER.ocr(img_array, cls=True)
78
  ocr_time = time.time() - start_time
79
  print(f"โฑ๏ธ OCR took {ocr_time:.2f}s")
80
 
81
+ if not ocr_results or not ocr_results[0]:
82
  return "ํ…์ŠคํŠธ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.", ""
83
 
84
+ # ํ…์ŠคํŠธ ์ถ”์ถœ
85
+ texts = [line[1][0] for line in ocr_results[0]]
86
+ ocr_text = "\n".join(texts)
87
 
88
  # Step 2: ์•ฝ ์ •๋ณด ๋ถ„์„ - MedGemma๋กœ ์˜๋ฃŒ ์ •๋ณด ์ œ๊ณต
89
  analysis_start = time.time()