Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
4.0 kB
1
Indexable
import streamlit as st
import requests
from PIL import Image   

# Title
st.title("TEXT TO IMAGE")
# Text Input

# save the input text in the variable 'name'
# first argument shows the title of the text input box
# second argument displays a default text inside the text input area
prompt = st.text_input("Enter Your Prompt", "")

# slider

# first argument takes the title of the slider
# second argument takes the starting of the slider
# last argument takes the end number
grid_size = st.slider("Select the grid_size", 1, 3)

# print the level
# format() is used to print value 
# of a variable at a specific position

# Dữ liệu cần gửi dưới dạng dictionary
data = {
    'prompt': prompt.title(),
    'grid_size': grid_size
}


if(st.button('Draw')):
    # Gửi POST request
    response = requests.post('http://127.0.0.1:5000/api', json=data)
    # Kiểm tra xem request có thành công không
    if response.status_code == 200:
        result = response.json()
        if(result['message']=="Success"):
            st.success("Thành công")
            image = Image.open("D:/text2image/generated.png")
            st.image(image,caption=prompt.title())
        else:
            st.error("Lỗi khi sinh ảnh")
    else:
        st.error("Lỗi khi gửi POST request")

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')
    image = generate_image(prompt,grid_size)
    # img_link = create_link()
    response = {
        'message': 'Success',
        # 'output': img_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 jsonify(response)

#


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