122 lines
3.7 KiB
Python
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())
|
|
|
|
|