|
from flask import Flask, jsonify, request |
|
from typing import Union |
|
from PIL import Image |
|
import qrcode |
|
|
|
|
|
|
|
|
|
app = Flask(__name__) |
|
|
|
UPLOAD_FOLDER = 'uploads' |
|
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER |
|
|
|
def handle_get_request(): |
|
app.logger.info("Handling GET request") |
|
return 'Hello, World!' |
|
|
|
def allowed_file(filename): |
|
return '.' in filename and filename.rsplit('.', 1)[1].lower() in {'png', 'jpg', 'jpeg', 'gif'} |
|
|
|
def handle_post_request(): |
|
if 'file' not in request.files: |
|
return jsonify({'error': 'No file part'}) |
|
|
|
file = request.files['file'] |
|
|
|
if file.filename == '': |
|
return jsonify({'error': 'No selected file'}) |
|
|
|
return jsonify({'message': 'File uploaded successfully'}) |
|
|
|
@app.route('/', methods=['GET', 'POST']) |
|
def handle_requests(): |
|
if request.method == 'GET': |
|
return handle_get_request() |
|
elif request.method == 'POST': |
|
return handle_post_request() |
|
|
|
|
|
def resize_for_condition_image(input_image: Image.Image, resolution: int): |
|
input_image = input_image.convert("RGB") |
|
W, H = input_image.size |
|
k = float(resolution) / min(H, W) |
|
H *= k |
|
W *= k |
|
H = int(round(H / 64.0)) * 64 |
|
W = int(round(W / 64.0)) * 64 |
|
img = input_image.resize((W, H), resample=Image.LANCZOS) |
|
return img |
|
|
|
|
|
|
|
def inference( |
|
qr_code_content: str, |
|
prompt: str, |
|
negative_prompt: str, |
|
guidance_scale: float = 10.0, |
|
controlnet_conditioning_scale: float = 2.0, |
|
strength: float = 0.8, |
|
seed: int = -1, |
|
init_image: Union[Image.Image, None] = None, |
|
qrcode_image: Union[Image.Image, None] = None, |
|
use_qr_code_as_init_image = True, |
|
sampler = "DPM++ Karras SDE",): |
|
if prompt is None or prompt == "": |
|
return "Prompt is required" |
|
|
|
if qrcode_image is None and qr_code_content == "": |
|
return "QR Code Image or QR Code Content is required" |
|
|
|
if qr_code_content != "" or qrcode_image.size == (1, 1): |
|
print("Generating QR Code from content") |
|
qr = qrcode.QRCode( |
|
version=1, |
|
error_correction=qrcode.constants.ERROR_CORRECT_H, |
|
box_size=10, |
|
border=4, |
|
) |
|
qr.add_data(qr_code_content) |
|
qr.make(fit=True) |
|
|
|
qrcode_image = qr.make_image(fill_color="black", back_color="white") |
|
qrcode_image = resize_for_condition_image(qrcode_image, 768) |
|
else: |
|
print("Using QR Code Image") |
|
qrcode_image = resize_for_condition_image(qrcode_image, 768) |
|
|
|
init_image = qrcode_image |
|
return init_image |
|
|
|
def handle_post_request_test_file(): |
|
img = "https://cdn2.steamgriddb.com/icon/e22dd5dabde45eda5a1a67772c8e25dd/32/256x256.png" |
|
|
|
qr = inference( |
|
"https://www.inmersys.com/", |
|
"Dog in spaces", |
|
"ugly, disfigured, low quality, blurry, nsfw", |
|
10.0, |
|
2.0, |
|
0.8, |
|
-1, |
|
img, |
|
img, |
|
True, |
|
"DPM++ Karras SDE" |
|
) |
|
|
|
data = { |
|
'img': img, |
|
'qr': qr |
|
} |
|
|
|
return jsonify(data) |
|
|
|
|
|
@app.route('/test', methods=['GET']) |
|
def handle_get_request_test(): |
|
return handle_post_request_test_file() |
|
|
|
if __name__ == '__main__': |
|
app.run(debug=True) |
|
|