File size: 2,788 Bytes
0d04ccc
 
 
 
 
 
be48827
e2cf2b0
 
 
 
0d04ccc
 
 
 
 
e2cf2b0
ff2c2a9
 
 
e9ceefd
e2cf2b0
 
fb9f5c1
1cdd16d
fb9f5c1
 
0d04ccc
 
 
 
 
 
 
 
 
 
 
 
c1a6745
e2cf2b0
9a66c24
e2cf2b0
 
fafc0c2
8721178
 
dad6ea4
0d04ccc
 
 
 
 
 
 
 
0fc4a2a
e7df148
 
 
 
0d04ccc
 
 
 
18fd9e7
0d04ccc
 
 
 
e2cf2b0
fb9f5c1
e2cf2b0
fb9f5c1
0d04ccc
 
 
 
 
e2cf2b0
 
0d04ccc
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
74
75
76
77
78
79
80
81
82
# -*- coding: utf-8 -*-
"""
Created on Tue Apr 26 21:02:31 2022

@author: pc
"""

import pickle
import numpy as np
import torch
import gradio as gr 
import sys
import subprocess
import os
from typing import Tuple
import PIL.Image

os.system("git clone https://github.com/NVlabs/stylegan3")

sys.path.append("stylegan3")



DESCRIPTION = f'''This model generates healthy MR Brain Images.
![Example]("https://huggingface.co/spaces/SerdarHelli/Brain-MR-Image-Generation-GAN/blob/main/ex.png")
'''

def make_transform(translate: Tuple[float,float], angle: float):
    m = np.eye(3)
    s = np.sin(angle/360.0*np.pi*2)
    c = np.cos(angle/360.0*np.pi*2)
    m[0][0] = c
    m[0][1] = s
    m[0][2] = translate[0]
    m[1][0] = -s
    m[1][1] = c
    m[1][2] = translate[1]
    return m



network_pkl='braingan-400.pkl'
with open(network_pkl, 'rb') as f:
    G = pickle.load(f)['G_ema'] 
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
G.eval()
G.to(device)

def predict(Seed,noise_mode,truncation_psi,trans_x,trans_y,angle):

  # Generate images.
    z = torch.from_numpy(np.random.RandomState(Seed).randn(1, G.z_dim)).to(device)
    label = torch.zeros([1, G.c_dim], device=device)
    # Construct an inverse rotation/translation matrix and pass to the generator.  The
    # generator expects this matrix as an inverse to avoid potentially failing numerical
    # operations in the network.
    
    if hasattr(G.synthesis, 'input'):
        m = make_transform((trans_x,trans_y), angle)
        m = np.linalg.inv(m)
        G.synthesis.input.transform.copy_(torch.from_numpy(m))

    img = G(z, label, truncation_psi=truncation_psi, noise_mode=noise_mode)
    img = (img.permute(0, 2, 3, 1) * 127.5 + 128).clamp(0, 255).to(torch.uint8)
      
    return (PIL.Image.fromarray(img[0].cpu().numpy()[:,:,0])).resize((512,512))



noises=['const', 'random', 'none']
interface=gr.Interface(fn=predict, title="Brain MR Image Generation with StyleGAN-2",
                       description = DESCRIPTION,
                       article = "Author: S.Serdar Helli",
                       inputs=[gr.inputs.Slider( minimum=0, maximum=2**12,label='Seed'),gr.inputs.Radio( choices=noises,  default='const',label='Noise Mods'),
                                           gr.inputs.Slider(0, 2, step=0.05, default=1, label='Truncation psi'),
                                           gr.inputs.Slider(-1, 1, step=0.05, default=0, label='Translate X'),
                                           gr.inputs.Slider(-1, 1, step=0.05, default=0, label='Translate Y'),
                                           gr.inputs.Slider(-180, 180, step=5, default=0, label='Angle'),],
                       outputs=gr.outputs.Image( type="numpy", label="Output"))


interface.launch(debug=True)