Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
2.6 kB
2
Indexable
Never
from flask import Flask, request, jsonify
from PIL import Image
import os
from min_dalle import MinDalle
import torch
from imgurpython import ImgurClient
###########################################
model = MinDalle(
        is_mega=False, 
        models_root='min-dalle-main/pretrained',
        is_reusable=False,
        is_verbose=True,
        dtype=torch.float32
    )
client_id = '2eb62070d6c69a3'
client_secret = 'da2ccfbdf29051fe858c0c3238b76f106d37f281'

client = ImgurClient(client_id, client_secret)
image_path = 'generated.png'

def ascii_from_image(image: Image.Image, size: int = 128) -> str:
    gray_pixels = image.resize((size, int(0.55 * size))).convert('L').getdata()
    chars = list('.,;/IOX')
    chars = [chars[i * len(chars) // 256] for i in gray_pixels]
    chars = [chars[i * size: (i + 1) * size] for i in range(size // 2)]
    return '\n'.join(''.join(row) for row in chars)

def save_image(image: Image.Image, path: str):
    if os.path.isdir(path):
        path = os.path.join(path, 'generated.png')
    elif not path.endswith('.png'):
        path += '.png'
    print("saving image to", path)
    image.save(path)
    return image

def generate_image(
    text: str,
    grid_size: int,
    ):

    image = model.generate_image(
        text, 
        -1, 
        grid_size, 
        top_k=128, 
        is_verbose=True
    )
    save_image(image, 'generated')
    print(ascii_from_image(image, size=128))

def create_link():
    data = client.upload_from_path(image_path)

    image_url = data['link']
    print('output:', image_url)
    return image_url
############################################
app = Flask(__name__)
@app.route('/api', methods=['GET'])
def get_data():
    # Code xử lý cho GET request
    data = "Hello API"
    return {'data': data}

@app.route('/api', methods=['POST'])
def post_api():
    data = request.get_json()  # Lấy dữ liệu từ request dưới dạng JSON
    prompt = data.get('prompt')  # Lấy giá trị trường 'name' từ dữ liệu JSON
    grid_size = data.get('grid_size')
    generate_image(prompt,grid_size)
    img_link = create_link()

    # Thực hiện xử lý với dữ liệu nhận được
    # Ở đây chúng ta có thể lưu dữ liệu vào cơ sở dữ liệu hoặc thực hiện những tác vụ khác
    # Trong ví dụ này, chúng ta chỉ in ra tên người dùng nhận được

    return img_link

#


#
if __name__ == '__main__':
    app.run()