Spaces:
Running
Running
File size: 6,268 Bytes
8bf60b6 5741612 8bf60b6 5741612 0561887 8bf60b6 594642f 8bf60b6 594642f 51fcd64 8bf60b6 594642f 8bf60b6 594642f 8bf60b6 594642f 97b24be 594642f 0561887 594642f c4745ec 594642f 2e0cfc4 3d96341 c4745ec aa624da 3d96341 c4745ec aa624da 3d96341 594642f 0561887 594642f 8bf60b6 52c5bd8 97b24be 52c5bd8 8bf60b6 594642f 2e0cfc4 3d96341 594642f 8bf60b6 3d96341 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
import os
import random
import requests
import tempfile
from deep_translator import GoogleTranslator
from langdetect import detect
from gradio_client import Client, handle_file
import gradio as gr
from PIL import Image
from io import BytesIO
# Функция для получения случайного API ключа
def get_random_api_key():
keys = os.getenv("KEYS", "").split(",")
if keys and keys[0]: # Проверяем, что KEYS установлен и не пуст
return random.choice(keys).strip()
else:
raise ValueError("API ключи не найдены. Пожалуйста, установите переменную окружения KEYS.")
# Ссылка на файл CSS
css_url = "https://neurixyufi-aihub.static.hf.space/style.css"
# Получение CSS по ссылке (с обработкой ошибок)
try:
response = requests.get(css_url, timeout=10) # Добавлено timeout
response.raise_for_status()
css = response.text + " h1{text-align:center}"
except requests.exceptions.RequestException as e:
print(f"Ошибка при загрузке CSS: {e}")
css = " h1{text-align:center}" # Используем базовый стиль
# Функция для обработки изображения и текста через API
def process_image_and_text(image, text):
try:
# Проверка и перевод текста на английский, если необходимо
language = detect(text)
if language != 'en':
text = GoogleTranslator(source=language, target='en').translate(text)
# Сохранение изображения во временный файл
with tempfile.NamedTemporaryFile(delete=False, suffix=".png") as temp_file:
image.save(temp_file.name)
image_path = temp_file.name
# Загрузка изображения в кеш и получение ссылки
image_url = handle_file(image_path)
# Получение случайного API ключа
api_key = get_random_api_key()
# Инициализация клиента (обработка ошибок)
client = Client("Yuanshi/OminiControl", hf_token=api_key)
result = client.predict(image=image_url, text=text, api_name="/predict")
if result is None:
return None
elif isinstance(result, Image.Image):
return result
elif isinstance(result, str) and result.startswith("/tmp"):
try:
return Image.open(result)
except FileNotFoundError:
print(f"Файл не найден: {result}")
return None
except Exception as e:
print(f"Ошибка при открытии файла: {e}, путь: {result}")
return None
else:
print(f"Неизвестный тип результата: {type(result)}, данные: {result}")
return None
except Exception as e:
print(f"Ошибка при обработке: {e}")
return None
# Функция для загрузки изображения из URL
def load_image_from_url(url):
try:
response = requests.get(url, timeout=10)
response.raise_for_status()
image = Image.open(BytesIO(response.content))
return image
except Exception as e:
print(f"Ошибка при загрузке изображения из URL {url}: {e}")
return None
# Функция для получения примеров
def get_samples():
sample_list = [
{
"image": "https://huggingface.co/spaces/NeurixYUFI/Omini/resolve/main/img/pear.png",
"text": "Луна, данный предмет лежит на поверхности луны — груша. На заднем плане Земля возвышается на переднем плане, ультра реализм",
},
{
"image": "https://huggingface.co/spaces/NeurixYUFI/Omini/resolve/main/img/oranges.jpg",
"text": "Очень крупный план этого предмета. Он размещен на деревянном столе. Фон — темная комната, включен телевизор, на экране кулинарное шоу. На экране надпись: «Neurix»",
},
{
"image": "https://huggingface.co/spaces/NeurixYUFI/Omini/resolve/main/img/rc_car.jpg",
"text": "Кинематографичный кадр. На Луне эта вещь едет по лунной поверхности. На заднем плане видна гигантская Земля",
},
]
samples_with_images = []
for sample in sample_list:
image_url = sample["image"]
image = load_image_from_url(image_url)
if image:
samples_with_images.append([image, sample["text"]])
return samples_with_images
# Интерфейс Gradio с использованием gr.Blocks
with gr.Blocks(css=css) as demo:
gr.Markdown("# Замена фона")
with gr.Row():
with gr.Column():
image_input = gr.Image(type="pil", label="Входное изображение")
text_input = gr.Textbox(lines=2, label="Описание")
submit_button = gr.Button("Обработать", variant="primary") # Добавили variant='primary'
with gr.Column():
output_image = gr.Image(type="pil", label="Результат", show_share_button=False)
submit_button.click(
fn=process_image_and_text,
inputs=[image_input, text_input],
outputs=output_image,
concurrency_limit=250
)
# Добавление примеров
examples = get_samples()
if examples:
with gr.Row():
gr.Examples(label="Примеры", examples=examples, fn=process_image_and_text, inputs=[image_input, text_input], outputs=output_image)
# Запуск интерфейса
if __name__ == "__main__":
demo.launch(
show_api=False,
share=False
) |