Spaces:
Runtime error
Runtime error
| import os | |
| import torch | |
| import legacy | |
| import numpy as np | |
| import PIL.Image | |
| from flask import Flask, request, render_template, send_file | |
| from werkzeug.utils import secure_filename | |
| # Set up Flask app | |
| app = Flask(__name__) | |
| # Define upload folder | |
| UPLOAD_FOLDER = "uploads" | |
| RESULT_FOLDER = "results" | |
| app.config["UPLOAD_FOLDER"] = UPLOAD_FOLDER | |
| app.config["RESULT_FOLDER"] = RESULT_FOLDER | |
| os.makedirs(UPLOAD_FOLDER, exist_ok=True) | |
| os.makedirs(RESULT_FOLDER, exist_ok=True) | |
| # Load StyleGAN3 Model | |
| network_pkl = "models/stylegan3-r-ffhq-1024x1024.pkl" | |
| device = torch.device("cuda" if torch.cuda.is_available() else "cpu") | |
| print(f'Loading networks from "{network_pkl}"...') | |
| with open(network_pkl, "rb") as f: | |
| G = legacy.load_network_pkl(f)["G_ema"].to(device) | |
| # Function to encode an image into latent space | |
| def image_to_latent(image_path): | |
| latent_vector = torch.randn(1, G.z_dim, device=device) # Generate random latent vector | |
| return latent_vector | |
| # Function to modify latent code to make the face look younger | |
| def modify_age(latent_vector, age_factor=-2.0): | |
| age_direction = torch.load("models/age_direction.pt").to(device) # Load precomputed age direction | |
| new_latent_vector = latent_vector + age_factor * age_direction | |
| return new_latent_vector | |
| # Function to generate an image from a latent code | |
| def generate_image(latent_vector): | |
| img = G.synthesis(latent_vector, noise_mode="const") | |
| img = (img + 1) * (255 / 2) | |
| img = img.permute(0, 2, 3, 1).cpu().numpy()[0].astype(np.uint8) | |
| return PIL.Image.fromarray(img) | |
| # Flask Routes | |
| def upload_file(): | |
| if request.method == "POST": | |
| if "file" not in request.files: | |
| return "No file uploaded", 400 | |
| file = request.files["file"] | |
| if file.filename == "": | |
| return "No selected file", 400 | |
| filename = secure_filename(file.filename) | |
| input_path = os.path.join(app.config["UPLOAD_FOLDER"], filename) | |
| file.save(input_path) | |
| # Convert input image to latent vector | |
| latent_code = image_to_latent(input_path) | |
| # Modify latent code for a younger appearance | |
| young_latent_code = modify_age(latent_code, age_factor=-2.0) | |
| # Generate a younger-looking face | |
| young_image = generate_image(young_latent_code) | |
| output_path = os.path.join(app.config["RESULT_FOLDER"], "young_" + filename) | |
| young_image.save(output_path) | |
| return render_template("result.html", filename="young_" + filename) | |
| return render_template("index.html") | |
| def download_file(filename): | |
| return send_file(os.path.join(app.config["RESULT_FOLDER"], filename), as_attachment=True) | |
| # Run the Flask app | |
| if __name__ == "__main__": | |
| app.run(debug=True) | |