|
from typing import List |
|
import io |
|
from PIL import Image |
|
from pydantic import BaseModel |
|
from lama_cleaner.server import process |
|
from lama_cleaner.server import main |
|
from fastapi import FastAPI |
|
import uvicorn |
|
|
|
class FakeArgs(BaseModel): |
|
host: str = "0.0.0.0" |
|
port: int = 7860 |
|
model: str = 'lama' |
|
hf_access_token: str = "" |
|
sd_enable_xformers: bool = False |
|
sd_disable_nsfw: bool = False |
|
sd_cpu_textencoder: bool = True |
|
sd_controlnet: bool = False |
|
sd_controlnet_method: str = "control_v11p_sd15_canny" |
|
sd_local_model_path: str = "" |
|
sd_run_local: bool = False |
|
local_files_only: bool = False |
|
cpu_offload: bool = False |
|
device: str = "cpu" |
|
gui: bool = False |
|
gui_size: List[int] = [1000, 1000] |
|
input: str = '' |
|
disable_model_switch: bool = True |
|
debug: bool = False |
|
no_half: bool = False |
|
disable_nsfw: bool = False |
|
enable_xformers: bool = False |
|
enable_interactive_seg: bool = True |
|
interactive_seg_model: str = "vit_b" |
|
interactive_seg_device: str = "cpu" |
|
enable_remove_bg: bool = False |
|
enable_anime_seg: bool = False |
|
enable_realesrgan: bool = False |
|
enable_gfpgan: bool = False |
|
gfpgan_device: str = "cpu" |
|
enable_restoreformer: bool = False |
|
enable_gif: bool = False |
|
quality: int = 95 |
|
model_dir: str = None |
|
output_dir: str = None |
|
|
|
|
|
main(FakeArgs()) |
|
|
|
|
|
app = FastAPI() |
|
@app.on_event("startup") |
|
async def app_start(): |
|
image_bytes = open('image.jpg', 'rb') |
|
mask_bytes = open('mask.jpg', 'rb') |
|
|
|
|
|
files = { |
|
"image": image_bytes, |
|
"mask":mask_bytes |
|
} |
|
payload = { |
|
"ldmSteps": 25, |
|
"ldmSampler": "plms", |
|
"zitsWireframe": True, |
|
"hdStrategy": "Crop", |
|
"hdStrategyCropMargin": 196, |
|
"hdStrategyCropTrigerSize": 800, |
|
"hdStrategyResizeLimit": 2048, |
|
"prompt": "", |
|
"negativePrompt": "", |
|
"croperX": 307, |
|
"croperY": 544, |
|
"croperHeight": 512, |
|
"croperWidth": 512, |
|
"useCroper": False, |
|
"sdMaskBlur": 5, |
|
"sdStrength": 0.75, |
|
"sdSteps": 50, |
|
"sdGuidanceScale": 7.5, |
|
"sdSampler": "uni_pc", |
|
"sdSeed": -1, |
|
"sdMatchHistograms": False, |
|
"sdScale": 1, |
|
"cv2Radius": 5, |
|
"cv2Flag": "INPAINT_NS", |
|
"paintByExampleSteps": 50, |
|
"paintByExampleGuidanceScale": 7.5, |
|
"paintByExampleSeed": -1, |
|
"paintByExampleMaskBlur": 5, |
|
"paintByExampleMatchHistograms": False, |
|
"p2pSteps": 50, |
|
"p2pImageGuidanceScale": 1.5, |
|
"p2pGuidanceScale": 7.5, |
|
"controlnet_conditioning_scale": 0.4, |
|
"controlnet_method": "control_v11p_sd15_canny" |
|
} |
|
|
|
resp = process(files=files,payload=payload) |
|
|
|
|
|
resp_bytes = resp.read() |
|
|
|
img = Image.open(io.BytesIO(resp_bytes)) |
|
img.show() |
|
|
|
if __name__ == '__main__': |
|
uvicorn.run(app, host='0.0.0.0', port=7860) |
|
|