File size: 1,277 Bytes
4adc200
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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