IMG_Worker/modules/onnx_ocr_module/run_ocr_test.py

122 lines
3.7 KiB
Python

# -*- coding: utf-8 -*-
import os
import sys
import logging
class _MockLogger:
def log(self, message, level=logging.INFO, exc_info=False):
level_name = {
logging.DEBUG: "DEBUG",
logging.INFO: "INFO",
logging.WARNING: "WARNING",
logging.ERROR: "ERROR",
}.get(level, "INFO")
print(f"[{level_name}] {message}")
class _MockGPUManager:
def __init__(self, can_use_cuda=False):
self.can_use_cuda = can_use_cuda
def main():
# 실행 컨텍스트별 베이스 디렉터리 계산
if getattr(sys, "frozen", False):
# cx_Freeze 실행 파일 기준 (exe 디렉터리)
base_dir = os.path.dirname(sys.executable)
else:
base_dir = os.path.dirname(os.path.abspath(__file__))
# 호스트 환경의 site-packages 경로를 우선 추가 (numpy/cv2 로드용)
candidates = []
try:
root_dir = os.path.abspath(os.path.join(base_dir, "..", "..", "..", ".."))
candidates.append(os.path.join(root_dir, "Lib", "site-packages"))
except Exception:
pass
try:
exe_dir = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), "..", "..", "..", ".."))
candidates.append(os.path.join(exe_dir, "Lib", "site-packages"))
except Exception:
pass
# 워크스페이스 고정 경로 (테스트 편의)
candidates.append(r"D:\py\AutoPercenty3_311\Lib\site-packages")
for sp in candidates:
if os.path.isdir(sp) and sp not in sys.path:
sys.path.insert(0, sp)
src_dir = os.path.join(base_dir, "src")
if os.path.isdir(src_dir):
sys.path.insert(0, src_dir)
# 우선 numpy/cv2 임포트 경로 진단
try:
import numpy as _np # type: ignore
print(f"[INFO] numpy loaded from: {_np.__file__}")
except Exception as e:
print("OpenCV bindings requires \"numpy\" package.\nInstall it via command:\n pip install numpy")
print(f"❌ numpy 임포트 실패: {e}")
return 2
try:
import cv2 as _cv2 # type: ignore
print(f"[INFO] cv2 loaded from: {_cv2.__file__}")
except Exception as e:
print("OpenCV bindings requires \"numpy\" package.")
print(f"❌ cv2 임포트 실패: {e}")
return 2
try:
# 번들된 src 내부 경로로 임포트 시도
try:
from onnx_ocr_module import ONNXOCRModule # type: ignore
except Exception:
# 패키지식 경로 (src.onnx_ocr_module)
from src.onnx_ocr_module import ONNXOCRModule # type: ignore
except Exception as e:
print(f"❌ onnx_ocr_module 임포트 실패: {e}")
return 2
logger = _MockLogger()
gpu_manager = _MockGPUManager(can_use_cuda=False)
try:
ocr = ONNXOCRModule(
logger=logger,
base_dir=base_dir,
gpu_manager=gpu_manager,
execution_provider="auto",
)
except Exception as e:
print(f"❌ ONNXOCRModule 초기화 실패: {e}")
return 3
test_img = os.path.join(base_dir, "test", "1.jpg")
if not os.path.exists(test_img):
print(f"❌ 테스트 이미지가 없습니다: {test_img}")
return 4
try:
results = ocr.detect_text(test_img, method="polygon")
except Exception as e:
print(f"❌ OCR 실행 실패: {e}")
return 5
count = len(results) if results else 0
print(f"RESULT_COUNT {count}")
if count:
sample = results[0]
print(
f"SAMPLE '{sample.get('text','')}' conf={sample.get('confidence', 0.0):.3f}"
)
return 0
else:
print("⚠️ 결과가 비어있습니다")
return 6
if __name__ == "__main__":
raise SystemExit(main())