import gradio as gr import torch import torch.nn as nn import numpy as np class Generator(nn.Module): def __init__(self): super(Generator, self).__init__() self.main = nn.Sequential( nn.ConvTranspose2d(128, 64 * 8, 4, 1, 0, bias=False), nn.BatchNorm2d(64 * 8), nn.ReLU(True), nn.ConvTranspose2d(64 * 8, 64 * 4, 4, 2, 1, bias=False), nn.BatchNorm2d(64 * 4), nn.ReLU(True), nn.ConvTranspose2d(64 * 4, 64 * 2, 4, 2, 1, bias=False), nn.BatchNorm2d(64 * 2), nn.ReLU(True), nn.ConvTranspose2d(64 * 2, 64, 4, 2, 1, bias=False), nn.BatchNorm2d(64), nn.ReLU(True), nn.ConvTranspose2d(64, 3, 4, 2, 1, bias=False), nn.Tanh() ) def forward(self, input): return self.main(input) netG = Generator() device = "cuda" if torch.cuda.is_available() else "cpu" model_file = "model.pth" netG.load_state_dict(torch.load(model_file, map_location=device)) netG.eval() def generate_image(): try: noise = torch.randn(1, 128, 1, 1, device=device) with torch.no_grad(): fake_image = netG(noise).cpu() img = fake_image.squeeze().cpu().numpy() img = np.transpose(img, (1, 2, 0)) img = (img + 1) / 2.0 img = (img * 255).astype(np.uint8) return img except Exception as e: print(f"Error generating image: {e}") def generate_images(seed, num_images, is_random): try: generated_images = [] if is_random: seed = np.random.randint(0, 99999999) else: np.random.seed(seed) torch.manual_seed(seed) noise = torch.randn(num_images, 128, 1, 1).to(device) with torch.no_grad(): fake_images = netG(noise) for img in fake_images: img = img.squeeze().cpu().numpy() img = np.transpose(img, (1, 2, 0)) img = (img + 1) / 2.0 img = (img * 255).astype(np.uint8) generated_images.append(img) print("Seed:", seed) return generated_images except Exception as e: print(f"Error generating images: {e}") title = "DCGAN Image Generator 🖌️🎨" description = "Generate non-existing images using DCGAN." content = """ ## How to Use 🎨 To generate an image, follow these steps: 1. Click \"Generate\" button to generate a image! 2. Once the image is generated, you can save it or share it to the community! """ iface = gr.Interface( fn=generate_image, inputs=None, outputs=gr.Image(label="Image", type="pil"), title=title, description=description, article=content, api_name="generate" ) iface.queue() iface.launch()