creamie-image / app.py
EmoCube's picture
Update app.py
09e6956 verified
raw
history blame
4.1 kB
import gradio as gr
import requests
import io
import random
import os
import time
import numpy as np
from PIL import Image, ImageEnhance
from deep_translator import GoogleTranslator
import json
# Project by Nymbo
alto_api= "https://api-inference.huggingface.co/models/enhanceaiteam/Flux-uncensored"
API_URL = "https://api-inference.huggingface.co/models/black-forest-labs/FLUX.1-schnell"
API_TOKEN = os.getenv("HF_READ_TOKEN")
headers = {"Authorization": f"Bearer {API_TOKEN}"}
timeout = 100
def add_noise(image, intensity=25):
"""
Добавляет цифровой шум к изображению.
:param image: Изображение (PIL.Image)
:param intensity: Интенсивность шума (от 0 до 255)
:return: Изображение с шумом (PIL.Image)
"""
# Преобразуем изображение в массив NumPy
img_array = np.array(image)
# Генерируем шум
noise = np.random.randint(-intensity, intensity, img_array.shape, dtype=np.int32)
# Добавляем шум к изображению
noisy_array = np.clip(img_array + noise, 0, 255).astype(np.uint8)
# Преобразуем массив обратно в изображение
noisy_image = Image.fromarray(noisy_array)
return noisy_image
def query(prompt):
if prompt == "" or prompt == None:
return None
key = random.randint(0, 999)
API_TOKEN = random.choice([os.getenv("HF_READ_TOKEN")])
headers = {"Authorization": f"Bearer {API_TOKEN}"}
payload = {
"inputs": prompt
}
response = requests.post(API_URL, headers=headers, json=payload, timeout=timeout)
if response.status_code != 200:
print(f"Error: Failed to get image. Response status: {response.status_code}")
print(f"Response content: {response.text}")
if response.status_code == 503:
raise gr.Error(f"{response.status_code} : The model is being loaded")
raise gr.Error(f"{response.status_code}")
try:
image_bytes = response.content
image = Image.open(io.BytesIO(image_bytes))
width, height = image.size
new_width = 480
new_height = 960
left = (width - new_width) / 2
top = (height - new_height) / 2
right = (width + new_width) / 2
bottom = (height + new_height) / 2
image = image.crop((left, top, right, bottom))
# Изменение экспозиции (яркости)
enhancer = ImageEnhance.Brightness(image)
image = enhancer.enhance(1.2) # Увеличиваем яркость на 20%
# Изменение насыщенности
enhancer = ImageEnhance.Color(image)
image = enhancer.enhance(0.8) # Увеличиваем насыщенность на 50%
# Добавление цифрового шума
image = add_noise(image, intensity=2.5) # Интенсивность шума
print(f'\033[1mGeneration {key} completed!\033[0m ({prompt})')
return image
except Exception as e:
print(f"Error when trying to open the image: {e}")
return None
css = """
#app-container {
max-width: 600px;
margin-left: auto;
margin-right: auto;
}
"""
with gr.Blocks(theme='gstaff/xkcd', css=css) as app:
gr.HTML("<center><h1>FLUX.1-Schnell</h1></center>")
with gr.Column(elem_id="app-container"):
with gr.Row():
with gr.Column(elem_id="prompt-container"):
with gr.Row():
text_prompt = gr.Textbox(label="Prompt", placeholder="Enter a prompt here", lines=2, elem_id="prompt-text-input")
with gr.Row():
text_button = gr.Button("Run", variant='primary', elem_id="gen-button")
with gr.Row():
image_output = gr.Image(type="pil", label="Image Output", elem_id="gallery")
text_button.click(query, inputs=[text_prompt], outputs=image_output)
app.launch(show_api=True, share=True)