83 lines
3.3 KiB
Python
83 lines
3.3 KiB
Python
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) |