Omini / app.py
Rooni's picture
Create app.py
8bf60b6 verified
raw
history blame
2.77 kB
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
)