# -*- 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())