IMG_Worker/modules/test/create_font_preview.py

128 lines
4.5 KiB
Python

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")
# 결과 저장 경로: 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())