Switch OCR engine to PaddleOCR
Browse files
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
|
| 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
|
| 34 |
-
OCR_READER =
|
| 35 |
-
print("โ
|
| 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 -
|
| 75 |
start_time = time.time()
|
| 76 |
img_array = np.array(image)
|
| 77 |
-
ocr_results = OCR_READER.
|
| 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 |
-
|
| 86 |
-
ocr_text = "\n".join(
|
| 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()
|