import sys import os import logging import asyncio # 루트 디렉토리 설정 (img_worker/) current_dir = os.path.dirname(os.path.abspath(__file__)) # modules/test/.. -> modules/.. -> img_worker/ root_dir = os.path.abspath(os.path.join(current_dir, "../../")) sys.path.append(root_dir) from modules.image_processor3 import ImageProcessor3 from loggerModule import Logger # 더미 클래스 정의 class MockPage: pass class MockTranslator: async def translate(self, text, source_lang, target_lang): # ImageProcessor3 내부적으로 GoogleTranslate를 사용하므로 이 메서드는 거의 호출되지 않음 # 하지만 호출될 경우를 대비해 구현 return text async def main(): # 1. 로거 초기화 logger = Logger() # 2. 경로 설정 # base_dir는 modules 폴더여야 리소스(onnx_ocr_module, fonts 등)를 찾을 수 있음 base_dir = os.path.join(root_dir, "modules") font_file_name = "Pretendard-Regular.ttf" font_path = os.path.join(base_dir, "fonts", font_file_name) # original_image_path = os.path.join(base_dir, "fonts", "ori.jpg") original_image_path = os.path.join(base_dir, "test", "2.jpg") # 결과 저장 경로: modules/test preview_output_dir = os.path.join(base_dir, "test") if not os.path.exists(preview_output_dir): os.makedirs(preview_output_dir, exist_ok=True) if not os.path.exists(font_path): logger.log(f"폰트 파일이 없습니다: {font_path}", level=logging.ERROR) return if not os.path.exists(original_image_path): logger.log(f"원본 이미지가 없습니다: {original_image_path}", level=logging.ERROR) return # 3. Toggle States 설정 (서버 환경과 최대한 동일하게 구성) # modules/image_processor3.py의 MIGAN 초기화 조건: # migan_onnx_path 존재 AND (inpaint_method == "migan" OR local_inpaint_method == "migan") migan_onnx_path = os.path.join(base_dir, "migan_onnx", "migan_pipeline_v2.onnx") toggle_states = { "font_type": "폰트8", "image_font_path": font_path, "ocr": True, "force_cpu_ocr": True, # CPU 사용 "use_cuda": False, # 인페인팅 설정 (MIGAN 사용) "inpaint_model": "migan", "local_inpaint_method": "migan", "migan_onnx_path": migan_onnx_path, "migan_use_accel": False, # CPU 모드 "migan_provider_override": "cpu", # CPU 명시 # 인페인팅 상세 설정 "detail_IMGTrans_type": "GPU", # MIGAN 모듈 내부에서 GPU/CPU 판단 (여기서는 이름만 GPU일 수 있음) "optionIMGTrans_type": "GPU", "thumb_trans_type": "GPU", "TEMP_IMAGE_DIR": preview_output_dir, "output_image_format": "jpg", "watermark_toggle": False, "store_ocr_data_to_db": False, "ocr_engine": "onnx", } # 4. ImageProcessor3 초기화 try: processor = ImageProcessor3( logger=logger, page=MockPage(), toggle_states=toggle_states, unwanted_words={}, # 딕셔너리로 전달해야 함 authenticated_by_admin=True, base_dir=base_dir, papago_translator=MockTranslator() ) except Exception as e: logger.log(f"프로세서 초기화 실패: {e}", level=logging.ERROR) return # 5. 이미지 처리 (프리뷰 생성) logger.log(f"프리뷰 생성 시작: {font_file_name}", level=logging.INFO) logger.log(f"저장 경로: {preview_output_dir}", level=logging.INFO) try: # process_single_image 사용 # 파일명 프리픽스로 폰트 이름 사용 file_prefix = f"preview_{os.path.splitext(font_file_name)[0]}" # process_single_image는 내부적으로 GoogleTranslate를 사용하여 실제 번역을 수행함 result = await processor.process_single_image( original_image_url=original_image_path, index=0, delay=0, file_prefix=file_prefix ) if result['status'] == 'translated': logger.log(f"프리뷰 생성 성공: {result['path']}", level=logging.INFO) print(f"Preview created at: {result['path']}") else: logger.log(f"프리뷰 생성 실패: {result}", level=logging.ERROR) except Exception as e: logger.log(f"처리 중 오류 발생: {e}", level=logging.ERROR) finally: if processor: processor.cleanup() if __name__ == "__main__": asyncio.run(main())