cleancut-api / app.py
yeonjin98's picture
Upload 2 files
91a9be1 verified
"""
Gradio 인터페이스가 포함된 Hugging Face Spaces용 앱
FastAPI와 Gradio를 함께 실행
"""
import gradio as gr
from PIL import Image
import numpy as np
import io
from server_birefnet import process_image, simple_background_removal, load_model
import torch
# 모델 로드
print("Loading BiRefNet model...")
model_loaded = load_model()
def remove_background_gradio(input_image):
"""Gradio 인터페이스용 배경 제거 함수"""
if input_image is None:
return None
# PIL Image로 변환
if isinstance(input_image, np.ndarray):
image = Image.fromarray(input_image)
else:
image = input_image
# RGB로 변환
if image.mode != 'RGB':
image = image.convert('RGB')
# 배경 제거
try:
if model_loaded:
result = process_image(image)
else:
result = simple_background_removal(image)
return result
except Exception as e:
print(f"Error: {e}")
return image.convert("RGBA")
# Gradio 인터페이스 생성
with gr.Blocks(title="CleanCut - AI 배경 제거") as demo:
gr.Markdown(
"""
# 🎨 CleanCut - AI 배경 제거
BiRefNet 모델을 사용한 고품질 배경 제거 서비스입니다.
### 사용 방법:
1. 이미지를 업로드하거나 드래그 앤 드롭하세요
2. '배경 제거' 버튼을 클릭하세요
3. 결과 이미지를 다운로드하세요
### API 엔드포인트:
- POST `/remove-background` - 프로그래매틱 액세스용
"""
)
with gr.Row():
with gr.Column():
input_image = gr.Image(
label="원본 이미지",
type="pil",
height=400
)
process_btn = gr.Button(
"🚀 배경 제거",
variant="primary",
size="lg"
)
with gr.Column():
output_image = gr.Image(
label="결과 이미지",
type="pil",
height=400
)
download_btn = gr.Button(
"💾 다운로드",
variant="secondary",
size="lg"
)
# 예제 이미지들 (파일이 있을 때만 활성화)
# gr.Examples(
# examples=[
# ["examples/person.jpg"],
# ["examples/product.jpg"],
# ["examples/pet.jpg"],
# ],
# inputs=input_image,
# label="예제 이미지"
# )
# 이벤트 연결
process_btn.click(
fn=remove_background_gradio,
inputs=input_image,
outputs=output_image
)
# Footer
gr.Markdown(
"""
---
💡 **Tips**:
- 최상의 결과를 위해 고해상도 이미지를 사용하세요
- 복잡한 배경의 경우 처리 시간이 더 걸릴 수 있습니다
🔗 [GitHub](https://github.com/yourusername/cleancut) |
📱 [Flutter App](https://play.google.com/store/apps/details?id=com.cleancut)
"""
)
# FastAPI 앱도 함께 실행 (선택사항)
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
import uvicorn
from threading import Thread
# FastAPI 설정
from server_birefnet import app as fastapi_app
def run_fastapi():
"""FastAPI 서버를 별도 스레드에서 실행"""
uvicorn.run(fastapi_app, host="0.0.0.0", port=7861)
# FastAPI를 백그라운드에서 실행
# api_thread = Thread(target=run_fastapi, daemon=True)
# api_thread.start()
if __name__ == "__main__":
# Gradio 앱 실행
demo.launch(
server_name="0.0.0.0",
server_port=7860,
share=False
)