File size: 1,268 Bytes
f41fc03
42a199f
5d5d49d
42a199f
 
 
00cb073
42a199f
f41fc03
00cb073
9bfc28a
 
 
00cb073
42a199f
5d5d49d
00cb073
a805da0
5d5d49d
 
 
 
00cb073
5d5d49d
 
00cb073
5d5d49d
 
 
00cb073
5d5d49d
 
00cb073
42a199f
00cb073
42a199f
 
 
5d5d49d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
from __future__ import annotations
from fastapi import FastAPI, File, UploadFile
from fastapi.responses import FileResponse, StreamingResponse
from fastapi.staticfiles import StaticFiles
import shutil
from io import BytesIO
import torch
from PIL import Image


import argparse
import pathlib
from vtoonify_model import Model

app = FastAPI()
model = Model(device='cuda' if torch.cuda.is_available() else 'cpu')

@app.post("/upload/")
async def process_image(file: UploadFile = File(...)):
    # Save the uploaded image locally
    with open("uploaded_image.jpg", "wb") as buffer:
        shutil.copyfileobj(file.file, buffer)

    # Load the model (assuming 'cartoon1' is always used)
    exstyle, load_info = model.load_model('cartoon1')

    # Process the uploaded image
    aligned_face, _, input_info = model.detect_and_align_image("uploaded_image.jpg", padding_params=[200, 200, 200, 200])
    result_face, output_info = model.image_toonify(aligned_face, exstyle, 'cartoon1', style_degree=0.5)

    # Return the processed image
    return FileResponse("result_image.jpg")

app.mount("/", StaticFiles(directory="AB", html=True), name="static")

@app.get("/")
def index() -> FileResponse:
    return FileResponse(path="/app/AB/index.html", media_type="text/html")