-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmodifier.py
More file actions
59 lines (49 loc) · 2.05 KB
/
modifier.py
File metadata and controls
59 lines (49 loc) · 2.05 KB
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import torch
import subprocess
import argparse
import sys
import io
import time
from PIL import Image
from diffusers import StableDiffusionInpaintPipeline
parser = argparse.ArgumentParser()
parser.add_argument("-p", "--prompt", default = "greeb dress, high resolution", help = "text description")
parser.add_argument("-i", "--image", help = "path to original photo")
parser.add_argument("-m", "--mask", help = "path to mask photo")
parser.add_argument("-o", "--outdir", default = './', help = "save path")
parser.add_argument("-a", "--amount", default = 1, help = "amount of generated photos")
parser.add_argument("-s", "--steps", default = 30, help = "amount of changing steps")
args = parser.parse_args()
original = Image.open(args.image)
mask_image = Image.open(args.mask)
def generate(photo, mask):
pipe = StableDiffusionInpaintPipeline.from_pretrained(
"runwayml/stable-diffusion-inpainting",
revision = "fp16",
torch_dtype = torch.float16
)
pipe.to("cuda")
pipe.safety_checker = None
pipe.requires_safety_checker = False
return pipe(
prompt = args.prompt,
image = photo,
mask_image = mask,
num_inference_steps = int(args.steps),
num_images_per_prompt = int(args.amount)
).images
for i, image in enumerate(generate(original, mask_image)):
image = image.resize(original.size)
image.save('source.jpg')
mask_image.convert('RGB').save('mask.jpg')
original.save('original.jpg')
try:
start_time = time.time()
stdout = subprocess.check_output("java -jar converter/fast-convert.jar", shell = True, stderr = subprocess.STDOUT)
if int(args.amount) == 1:
sys.stdout.buffer.write(stdout)
else:
print(f"Saving photo #{i + 1}: %s" % (time.time() - start_time))
Image.open(io.BytesIO(stdout)).save(f'{args.outdir}generated-image-{i + 1}.jpg')
except subprocess.CalledProcessError as e:
raise RuntimeError("command '{}' return with error (code {}): {}".format(e.cmd, e.returncode, e.output))