from modules.loggerModule import Logger1 from modules.image_processor3 import ImageProcessor3 import os, sys from fastapi import FastAPI, Request from fastapi.responses import JSONResponse import uvicorn from typing import Dict, Any import asyncio app = FastAPI() def get_base_dir(): """ 실행 환경에 따라 base_dir을 설정하는 메서드. cx_Freeze로 패키징된 경우 실행 파일의 경로, 일반 Python 환경일 경우 __file__을 기준으로 설정. """ if getattr(sys, 'frozen', False): # 패키징된 경우 base_dir = os.path.dirname(sys.executable) internal_dir = os.path.join(base_dir, 'lib') # lib 디렉토리 포함 if os.path.exists(internal_dir): # lib 디렉토리가 존재하면 base_dir로 설정 return internal_dir else: # 일반 Python 실행 환경 base_dir = os.path.dirname(os.path.abspath(__file__)) debug_dir = os.path.join(base_dir) # lib 디렉토리 포함 return debug_dir # --- 여기서 한 번만 생성 --- logger = Logger1() base_dir = get_base_dir() image_processor = ImageProcessor3(logger=logger, base_dir=base_dir) @app.post("/translate_me") async def translate_me(request: Request): data = await request.json() local_image_path: str = data.get("local_image_path") unwanted_words: Dict[str, str] = data.get("unwanted_words", {}) method: str = data.get("method", "") index: int = data.get("index", 0) delay: float = data.get("delay", 1.0) output_image_path: str = data.get("output_image_path", "") toggle_states: Dict[str, bool] = data.get("toggle_states", {}) image_processor.update_unwanted_words(unwanted_words) # toggle_states는 예시로 모두 True로 설정 # image_processor.toggle_states = {"ocr": True, "watermark_text": "이미지 저작권 보유", "remove_background_white": True} # page 인자는 None으로 전달 (Playwright 미사용) result = await image_processor.process_single_image( original_image_url=local_image_path, unwanted_words=unwanted_words, method=method, toggle_states=toggle_states, index=index, delay=delay, output_image_path=output_image_path, ) return JSONResponse(content=result) @app.post("/remove_bg_me") async def remove_bg_me(request: Request): data = await request.json() local_image_path: str = data.get("local_image_path") index: int = data.get("index", 0) output_image_path: str = data.get("output_image_path", "") toggle_states: Dict[str, bool] = data.get("toggle_states", {}) # 기타 옵션 파라미터는 모두 kwargs로 전달 kwargs = {k: v for k, v in data.items() if k not in ["local_image_path", "index", "output_image_path", "toggle_states"]} # toggle_states는 예시로 모두 True로 설정 # image_processor.toggle_states = {"ocr": True, "watermark_text": "이미지 저작권 보유", "remove_background_white": True} result = await image_processor.remove_background( image_path=local_image_path, index=index, output_image_path=output_image_path, toggle_states=toggle_states, **kwargs ) return JSONResponse(content=result) if __name__ == "__main__": uvicorn.run("main:app", host="127.0.0.1", port=8008, reload=True)