Spaces:
Running
Running
import os | |
import random | |
import requests | |
from deep_translator import GoogleTranslator | |
from langdetect import detect | |
from gradio_client import Client, handle_file | |
import gradio as gr | |
# Функция для получения случайного 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) | |
response.raise_for_status() # Поднимаем исключение, если статус ответа не 200 | |
css = response.text + " h1{text-align:center} /* Ещё стили. если они есть в оригинале */" | |
except requests.exceptions.RequestException as e: | |
print(f"Ошибка при загрузке CSS: {e}") | |
css = " h1{text-align:center} /* Ещё стили. если они есть в оригинале */" # Используем базовый стиль, если загрузка CSS не удалась | |
# Функция для обработки изображения и текста через API | |
def process_image_and_text(image, text): | |
# Проверка и перевод текста на английский, если необходимо | |
language = detect(text) | |
if language != 'en': | |
text = GoogleTranslator(source=language, target='en').translate(text) | |
# Загрузка изображения в кеш и получение ссылки | |
image_path = image.name | |
image_url = handle_file(image_path) | |
# Получение случайного API ключа | |
api_key = get_random_api_key() | |
# Инициализация клиента | |
client = Client("Yuanshi/OminiControl", hf_token=api_key) | |
# Вызов API | |
result = client.predict( | |
image=image_url, | |
text=text, | |
api_name="/predict" | |
) | |
# Возврат результата | |
return result['path'] | |
# Интерфейс Gradio | |
demo = gr.Interface( | |
fn=process_image_and_text, | |
inputs=[ | |
gr.Image(type="pil"), | |
gr.Textbox(lines=2), | |
], | |
outputs=gr.Image(type="pil", show_share_button=False), | |
title="OminiControl / Subject driven generation", | |
css=css, | |
concurrency_limit=250 | |
) | |
# Запуск интерфейса | |
if __name__ == "__main__": | |
demo.launch( | |
show_api=False, | |
share=False | |
) |