abhirajeshbhai commited on
Commit
95877f1
·
verified ·
1 Parent(s): df3934d

Upload 6 files

Browse files
Files changed (6) hide show
  1. .dockerignore +2 -0
  2. .gitignore +2 -0
  3. app.py +19 -0
  4. model.py +55 -0
  5. requirements.txt +1 -0
  6. weights/face_generator_v2.pth +3 -0
.dockerignore ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ _pycache__pycache_
2
+ *.pyc
.gitignore ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ _pycache_
2
+ *.pyc
app.py ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from flask import Flask, request, send_file
2
+ from model import load_model, generate
3
+ from io import BytesIO
4
+
5
+ app = Flask(__name__)
6
+ model = load_model()
7
+
8
+ def serve_img(pilImage):
9
+ imageIO = BytesIO()
10
+ pilImage.save(imageIO, 'JPEG', quality=70)
11
+ imageIO.seek(0)
12
+ return imageIO
13
+
14
+
15
+ @app.route("/",methods=['GET'])
16
+ def index():
17
+ image = generate(model)
18
+ g = serve_img(image)
19
+ return send_file(g, mimetype="image/jpeg")
model.py ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ import torch.nn as nn
3
+ import numpy as np
4
+
5
+ from PIL import Image
6
+
7
+ device = "cpu"
8
+ weights_path = "./weights/face_generator_v2.pth"
9
+ IN_CHANNELS = 100
10
+
11
+ class FaceGenerator(nn.Module):
12
+ def __init__(self, in_channels):
13
+ super(FaceGenerator, self).__init__()
14
+ self.main = nn.Sequential(
15
+ nn.ConvTranspose2d(in_channels, 1024, 4, 2,0, bias=False),
16
+ nn.BatchNorm2d(1024),
17
+ nn.ReLU(True), # [batch_size, 1024, 2, 2]
18
+
19
+ nn.ConvTranspose2d(1024, 512, 4, 2,1, bias=False),
20
+ nn.BatchNorm2d(512),
21
+ nn.ReLU(True), # [batch_size, 512, 7, 7]
22
+
23
+ nn.ConvTranspose2d(512, 256, 4, 2,1, bias=False),
24
+ nn.BatchNorm2d(256),
25
+ nn.ReLU(True), # [batch_size, 256, 14, 14]
26
+
27
+ nn.ConvTranspose2d(256, 128, 4, 2,1, bias=False),
28
+ nn.BatchNorm2d(128),
29
+ nn.ReLU(True), # [batch_size, 256, 28, 28]
30
+
31
+ nn.ConvTranspose2d(128,3, 4, 2,1, bias=False),
32
+ nn.Sigmoid(), # [batch_size, 1, 32, 32]
33
+ )
34
+ def forward(self, x):
35
+ return self.main(x)
36
+
37
+
38
+ def load_model():
39
+ model = FaceGenerator(IN_CHANNELS).to(device=device)
40
+ model.load_state_dict(torch.load(weights_path, map_location=torch.device(device)), strict=True)
41
+ model = model.eval()
42
+
43
+ print("[!] Model Loaded..")
44
+ return model
45
+
46
+ def generate(model):
47
+ noise = torch.randn((1,IN_CHANNELS, 1, 1)).to(device)
48
+ image_op = model(noise).squeeze()
49
+ image_op = image_op.permute(1,2,0).detach().cpu().numpy()
50
+ image_op = image_op * 255.0
51
+ image_op = image_op.astype(np.uint8)
52
+ image_op = Image.fromarray(image_op)
53
+ image_op = image_op.resize((256, 256),resample=Image.ADAPTIVE)
54
+ return image_op
55
+
requirements.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ Flask==3.0.2
weights/face_generator_v2.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3c29df350fd708de2b613136c28ca047821d53f631897cc2bd4521c97ed9c2ff
3
+ size 50657645