Pill_Identification / app /utils /ocr_utils.py
Rushikesh-Sontakke
Complete project
4adc200
Raw
History Blame Contribute Delete
1.28 kB
import cv2
import json
import re
import os
def recognize_with_openocr(img, name="default", min_score=0.8, ocr_engine=None):
"""
使用 OpenOCR 執行辨識
- img: OpenCV 影像
- name: 儲存暫存圖用的名稱
- min_score: 過濾最低信心分數
- ocr_engine: 必須傳入已初始化的 OpenOCR 引擎
"""
if ocr_engine is None:
raise ValueError("ocr_engine is required")
TEMP_FOLDER = "./temp_imgs"
os.makedirs(TEMP_FOLDER, exist_ok=True)
temp_path = os.path.join(TEMP_FOLDER, f"temp_{name}.jpg")
cv2.imwrite(temp_path, img)
result, _ = ocr_engine(temp_path)
if result is None:
return [], 0.0
try:
result_json = json.loads(result[0].split('\t')[1])
valid = [r for r in result_json if r.get("score", 0) >= min_score]
texts = [
re.sub(r'[^A-Z0-9\\-]', '', r["transcription"].strip().upper())
for r in valid if r["transcription"].strip()
]
avg_score = sum(r["score"] for r in valid) / len(valid) if valid else 0.0
# print(f"[{name}] OCR 結果:{texts} (Avg Score: {avg_score:.2f})")
return texts, avg_score
except Exception as e:
print(f"[{name}] JSON 解析失敗:{e}")
return [], 0.0