# Вариант 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)