File size: 3,088 Bytes
415d841
ba7275c
4ba0e70
 
cf05ed1
 
415d841
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11528d1
415d841
11528d1
 
415d841
 
f053222
415d841
 
 
 
 
f053222
11528d1
f053222
415d841
 
 
 
11528d1
 
 
 
 
 
 
 
 
 
 
 
415d841
 
 
 
 
 
 
 
 
 
 
f053222
11528d1
f053222
11528d1
415d841
 
 
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import os
os.system("pip install --upgrade pip")
os.system("pip install ftfy regex tqdm")
os.system("pip install git+https://github.com/openai/CLIP.git")
os.system("pip install git+https://github.com/facebookresearch/detectron2@96c752ce821a3340e27edd51c28a00665dd32a30#subdirectory=projects/DensePose")
os.system("pip install git+https://github.com/hukkelas/DSFD-Pytorch-Inference")
import gradio
import numpy as np
import torch
from PIL import Image
from dp2 import utils
from tops.config import instantiate
import tops
import gradio.inputs


cfg_body = utils.load_config("configs/anonymizers/FB_cse.py")
anonymizer_body = instantiate(cfg_body.anonymizer, load_cache=False)
anonymizer_body.initialize_tracker(fps=1)
cfg_face = utils.load_config("configs/anonymizers/face.py")
anonymizer_face = instantiate(cfg_face.anonymizer, load_cache=False)
anonymizer_face.initialize_tracker(fps=1)


class ExampleDemo:

    def __init__(self, anonymizer, multi_modal_truncation=False) -> None:
        self.multi_modal_truncation = multi_modal_truncation
        self.anonymizer = anonymizer
        with gradio.Row():
            input_image = gradio.Image(type="pil", label="Upload your image or try the example below!")
            output_image = gradio.Image(type="numpy", label="Output")
        with gradio.Row():
            update_btn = gradio.Button("Update Anonymization").style(full_width=True)
        visualize_det = gradio.Checkbox(value=False, label="Show Detections")
        visualize_det.change(self.anonymize, inputs=[input_image, visualize_det], outputs=[output_image])
        gradio.Examples(
            ["erling.jpg", "g7-summit-leaders-distraction.jpg"], inputs=[input_image]
        )
        update_btn.click(self.anonymize, inputs=[input_image, visualize_det], outputs=[output_image])
        input_image.change(self.anonymize, inputs=[input_image, visualize_det], outputs=[output_image])
        self.track = False

    def anonymize(self, img: Image, visualize_detection: bool):
        img, cache_id = pil2torch(img)
        img = tops.to_cuda(img)
        if visualize_detection:
            img = self.anonymizer.visualize_detection(img, cache_id=cache_id)
        else:
            img = self.anonymizer(
                img, truncation_value=0 if self.multi_modal_truncation else 1, multi_modal_truncation=self.multi_modal_truncation, amp=True,
                cache_id=cache_id, track=self.track)
        img = utils.im2numpy(img)
        return img


def pil2torch(img: Image.Image):
    img = img.convert("RGB")
    img = np.array(img)
    img = np.rollaxis(img, 2)
    return torch.from_numpy(img), None


with gradio.Blocks() as demo:
    gradio.Markdown("# <center> DeepPrivacy2 - Realistic Image Anonymization </center>")
    gradio.Markdown("### <center> Håkon Hukkelås, Rudolf Mester, Frank Lindseth </center>")
    with gradio.Tab("Full-Body Anonymization"):
        ExampleDemo(anonymizer_body, multi_modal_truncation=True)
    with gradio.Tab("Face Anonymization"): 
        ExampleDemo(anonymizer_face, multi_modal_truncation=False)


demo.launch()