MonitorKarma's picture
Update app.py
155d1d6 verified
# Вариант 1.
# import gradio as gr
# import requests
# import random
# # Функция, которая будет вызываться при нажатии кнопки
# def generate_meme(topic):
# # 1. Генерация текста через API (для мастер-класса можно имитировать)
# # В реальности здесь был бы вызов API Qwen/DeepSeek
# # meme_text = f"Когда на уроке начинают объяснять {topic}: \n *мозг отключается*"
# meme_text = "Фотосинтез — это когда ты пытаешься взять энергию от солнца, но просыпаешься только к обеду"
# # 2. Используем заранее заготовленную картинку или шаблон
# MEME_TEMPLATES = [
# "https://huggingface.co/datasets/MonitorKarma/school-meme-templates/resolve/main/1.jpeg",
# "https://huggingface.co/datasets/MonitorKarma/school-meme-templates/resolve/main/2.jpeg",
# "https://huggingface.co/datasets/MonitorKarma/school-meme-templates/resolve/main/3.jpeg"
# ]
# image_url = random.choice(MEME_TEMPLATES)
# # image_url = "https://huggingface.co/datasets/MonitorKarma/school-meme-templates/resolve/main/3.jpg" # Ссылку меняем на свою
# # 3. Возвращаем результат (текст и ссылку на картинку)
# return meme_text, image_url
# # Создаем простой интерфейс
# with gr.Blocks() as demo:
# gr.Markdown("# 🚀 Генератор школьных мемов v1.0")
# topic_input = gr.Textbox(label="Введи скучную тему урока")
# generate_btn = gr.Button("Сгенерировать мем!")
# image_output = gr.Image(
# label="🖼️ Шаблон мема",
# height=400, # Максимальная высота
# )
# text_output = gr.Textbox(label="📄 Текст для мема:", lines=5, elem_classes=["text-output"])
# generate_btn.click(fn=generate_meme, inputs=topic_input, outputs=[text_output, image_output])
# demo.launch()
# =========================================================================================================
# Вариант 2
# import gradio as gr
# import random
# import requests
# # Ваши 15-20 шаблонов
# MEME_TEMPLATES = [
# "https://huggingface.co/datasets/MonitorKarma/school-meme-templates/resolve/main/1.jpeg",
# "https://huggingface.co/datasets/MonitorKarma/school-meme-templates/resolve/main/2.jpeg",
# "https://huggingface.co/datasets/MonitorKarma/school-meme-templates/resolve/main/3.jpeg",
# # ... добавьте остальные
# ]
# def generate_meme(topic):
# # 1. Генерация текста (пока заглушка)
# upper_text = f"Когда на уроке {topic}:"
# lower_text = "Твой мозг: *404 Not Found*"
# # 2. Выбор случайного шаблона
# template_url = random.choice(MEME_TEMPLATES)
# return upper_text, lower_text, template_url
# with gr.Blocks() as demo:
# gr.Markdown("# 🎯 Генератор школьных мемов")
# with gr.Row():
# with gr.Column():
# topic = gr.Textbox(label="Введи тему урока",
# placeholder="например: митоз, интегралы, ВОВ...")
# btn = gr.Button("Создать мем! 🚀")
# with gr.Column():
# upper = gr.Textbox(label="Верхняя надпись")
# lower = gr.Textbox(label="Нижняя надпись")
# image_output = gr.Image(
# label="🖼️ Шаблон мема",
# height=400, # Максимальная высота
# )
# btn.click(fn=generate_meme, inputs=topic,
# outputs=[upper, lower, image_output])
# demo.launch()
# =========================================================================================================
#Вариант 3
import gradio as gr
import random
# Ваши шаблоны изображений
MEME_TEMPLATES = [
"https://huggingface.co/datasets/MonitorKarma/school-meme-templates/resolve/main/1.jpeg",
"https://huggingface.co/datasets/MonitorKarma/school-meme-templates/resolve/main/2.jpeg",
"https://huggingface.co/datasets/MonitorKarma/school-meme-templates/resolve/main/3.jpeg",
# Добавьте остальные шаблоны здесь
]
# База данных мемных фраз для разных школьных дисциплин
MEME_PHRASES = {
# Математика/Алгебра/Геометрия
"математика": [
("Когда учитель говорит, что этот пример простой", "А ты видишь только иероглифы"),
("Когда пытаешься понять теорему", "Мозг: 'Error 404'"),
("Попытка решить уравнение", "Калькулятор: 'Я устал, я ухожу'")
],
"алгебра": [
("Попытка понять интегралы", "Это как пытаться поймать облако"),
("Решение уравнений", "Где этот икс спрятался?")
],
# Общие фразы (если предмет не найден)
"общее": [
("Когда звонок через 5 минут", "А учитель только начал новую тему"),
]
}
# Ключевые слова для определения предмета
SUBJECT_KEYWORDS = {
"математика": ["математика", "матеша", "math"],
"алгебра": ["алгебра", "алгебру", "algebra"],
}
def detect_subject(topic):
"""Определяет школьный предмет по теме"""
topic_lower = topic.lower()
for subject, keywords in SUBJECT_KEYWORDS.items():
for keyword in keywords:
if keyword in topic_lower:
return subject
return "общее"
def generate_meme(topic):
"""Генерирует мем на заданную тему"""
if not topic or not topic.strip():
return "Введите тему урока!", "Например: алгебра, физкультура, физика", random.choice(MEME_TEMPLATES)
# Определяем предмет
subject = detect_subject(topic)
# Получаем список фраз для этого предмета
phrases = MEME_PHRASES.get(subject, MEME_PHRASES["общее"])
# Выбираем случайную фразу
upper_text, lower_text = random.choice(phrases)
# Если в теме есть конкретное упоминание, можем добавить его
if subject != "общее":
upper_text = upper_text.replace("уроке", f"уроке {topic}")
# Выбираем случайный шаблон
template_url = random.choice(MEME_TEMPLATES)
return upper_text, lower_text, template_url
# Создаем интерфейс Gradio
with gr.Blocks() as demo:
gr.Markdown("""
# 🎯 Генератор школьных мемов
### Введи школьный предмет и получи смешной мем!
""")
with gr.Row():
with gr.Column(scale=1):
topic = gr.Textbox(
label="📚 Школьный предмет",
placeholder="например: алгебра, физкультура, ...",
value="алгебра"
)
# Кнопка генерации
btn = gr.Button("🎲 Создать мем!", variant="primary", size="lg")
# Подсказки
gr.Markdown("""
### 💡 Попробуй эти предметы:
- Алгебра / Геометрия
- Физкультура
- Физика
""")
with gr.Column(scale=2):
# Поля для текста мема
upper = gr.Textbox(
label="🔝 Верхняя надпись",
lines=2
)
lower = gr.Textbox(
label="🔽 Нижняя надпись",
lines=2
)
# Поле для изображения
image_output = gr.Image(
label="🖼️ Шаблон мема",
height=400,
width=400
)
# Обработчик кнопки
def generate_with_counter(topic):
upper_text, lower_text, image_url = generate_meme(topic)
return upper_text, lower_text, image_url
btn.click(
fn=generate_with_counter,
inputs=[topic],
outputs=[upper, lower, image_output]
)
# Запускаем приложение
if __name__ == "__main__":
demo.launch(debug=True,
share=False,
theme=gr.themes.Soft(),
ssr_mode=False)