Spaces:
Runtime error
Runtime error
Vivien Chappelier
commited on
Commit
Β·
2342c94
1
Parent(s):
e9d8edd
add crop
Browse files
app.py
CHANGED
|
@@ -19,6 +19,8 @@ import json
|
|
| 19 |
from PIL import Image, ImageEnhance
|
| 20 |
import base64
|
| 21 |
import io
|
|
|
|
|
|
|
| 22 |
|
| 23 |
class BZHStableSignatureDemo(object):
|
| 24 |
|
|
@@ -53,7 +55,7 @@ class BZHStableSignatureDemo(object):
|
|
| 53 |
output = self.pipe(prompt, num_inference_steps=4, guidance_scale=0.0, output_type="pil")
|
| 54 |
return output.images[0] #{ "background": output.images[0], "layers": [], "composite": None }
|
| 55 |
|
| 56 |
-
def attack_detect(self, img, jpeg_compression, downscale, saturation):
|
| 57 |
|
| 58 |
#img = img_edit["composite"]
|
| 59 |
img = img.convert("RGB")
|
|
@@ -63,6 +65,21 @@ class BZHStableSignatureDemo(object):
|
|
| 63 |
size = img.size
|
| 64 |
size = (int(size[0] / downscale), int(size[1] / downscale))
|
| 65 |
img = img.resize(size, Image.BICUBIC)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 66 |
|
| 67 |
converter = ImageEnhance.Color(img)
|
| 68 |
img = converter.enhance(saturation)
|
|
@@ -119,15 +136,17 @@ def interface():
|
|
| 119 |
with gr.Row():
|
| 120 |
watermarked_image = gr.Image(type="pil", width=512, height=512)
|
| 121 |
with gr.Column():
|
|
|
|
| 122 |
downscale = gr.Slider(1, 3, value=1, step=0.1, label="Downscale ratio")
|
|
|
|
| 123 |
saturation = gr.Slider(0, 2, value=1, step=0.1, label="Color saturation")
|
| 124 |
jpeg_compression = gr.Slider(value=100, step=5, label="JPEG quality")
|
| 125 |
-
btn2 = gr.Button("
|
| 126 |
with gr.Row():
|
| 127 |
attacked_image = gr.Image(type="pil", width=256)
|
| 128 |
detection_label = gr.Label(label="Detection info")
|
| 129 |
btn1.click(fn=backend.generate, inputs=[mode, seed, inp], outputs=[watermarked_image], api_name="generate")
|
| 130 |
-
btn2.click(fn=backend.attack_detect, inputs=[watermarked_image, jpeg_compression, downscale, saturation], outputs=[attacked_image, detection_label], api_name="detect")
|
| 131 |
|
| 132 |
return demo
|
| 133 |
|
|
|
|
| 19 |
from PIL import Image, ImageEnhance
|
| 20 |
import base64
|
| 21 |
import io
|
| 22 |
+
import random
|
| 23 |
+
import math
|
| 24 |
|
| 25 |
class BZHStableSignatureDemo(object):
|
| 26 |
|
|
|
|
| 55 |
output = self.pipe(prompt, num_inference_steps=4, guidance_scale=0.0, output_type="pil")
|
| 56 |
return output.images[0] #{ "background": output.images[0], "layers": [], "composite": None }
|
| 57 |
|
| 58 |
+
def attack_detect(self, img, jpeg_compression, downscale, crop, saturation):
|
| 59 |
|
| 60 |
#img = img_edit["composite"]
|
| 61 |
img = img.convert("RGB")
|
|
|
|
| 65 |
size = img.size
|
| 66 |
size = (int(size[0] / downscale), int(size[1] / downscale))
|
| 67 |
img = img.resize(size, Image.BICUBIC)
|
| 68 |
+
if crop != 0:
|
| 69 |
+
width, height = img.size
|
| 70 |
+
area = width * height
|
| 71 |
+
log_rmin = math.log(0.5)
|
| 72 |
+
log_rmax = math.log(2.0)
|
| 73 |
+
for _ in range(10):
|
| 74 |
+
target_area = area * (1 - crop)
|
| 75 |
+
aspect_ratio = math.exp(random.random() * (log_rmax - log_rmin) + log_rmin)
|
| 76 |
+
w = int(round(math.sqrt(target_area * aspect_ratio)))
|
| 77 |
+
h = int(round(math.sqrt(target_area / aspect_ratio)))
|
| 78 |
+
if 0 < w <= width and 0 < h <= height:
|
| 79 |
+
top = random.randint(0, height - h + 1)
|
| 80 |
+
left = random.randint(0, width - w + 1)
|
| 81 |
+
img = img.crop((left, top, left+w, top+h))
|
| 82 |
+
break
|
| 83 |
|
| 84 |
converter = ImageEnhance.Color(img)
|
| 85 |
img = converter.enhance(saturation)
|
|
|
|
| 136 |
with gr.Row():
|
| 137 |
watermarked_image = gr.Image(type="pil", width=512, height=512)
|
| 138 |
with gr.Column():
|
| 139 |
+
gr.Markdown("""With these controls you may alter the generated image before detection. You may also upload your own edited image instead.""")
|
| 140 |
downscale = gr.Slider(1, 3, value=1, step=0.1, label="Downscale ratio")
|
| 141 |
+
crop = gr.Slider(0, 0.9, value=0, step=0.01, label="Random crop ratio")
|
| 142 |
saturation = gr.Slider(0, 2, value=1, step=0.1, label="Color saturation")
|
| 143 |
jpeg_compression = gr.Slider(value=100, step=5, label="JPEG quality")
|
| 144 |
+
btn2 = gr.Button("Modify & Detect")
|
| 145 |
with gr.Row():
|
| 146 |
attacked_image = gr.Image(type="pil", width=256)
|
| 147 |
detection_label = gr.Label(label="Detection info")
|
| 148 |
btn1.click(fn=backend.generate, inputs=[mode, seed, inp], outputs=[watermarked_image], api_name="generate")
|
| 149 |
+
btn2.click(fn=backend.attack_detect, inputs=[watermarked_image, jpeg_compression, downscale, crop, saturation], outputs=[attacked_image, detection_label], api_name="detect")
|
| 150 |
|
| 151 |
return demo
|
| 152 |
|