File size: 9,393 Bytes
9a99aee
e4fcfc2
 
 
1b91164
e34d3f1
e4fcfc2
 
 
 
 
 
6762b07
e4fcfc2
 
 
 
 
 
 
 
6762b07
e4fcfc2
 
6762b07
e4fcfc2
 
 
 
 
 
 
 
 
 
6762b07
e4fcfc2
1b91164
e4fcfc2
9a99aee
1b91164
9a99aee
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1b91164
9a99aee
6762b07
9a99aee
 
 
e4fcfc2
 
6762b07
9a99aee
e4fcfc2
 
 
 
9a99aee
e4fcfc2
6762b07
9a99aee
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4ffc6c0
9a99aee
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e4fcfc2
9a99aee
 
 
 
 
 
6762b07
9a99aee
 
 
 
 
 
 
 
 
 
 
e4fcfc2
6762b07
365a82e
6762b07
9a99aee
6e1e93f
9a99aee
 
 
 
6762b07
e4fcfc2
9a99aee
 
 
155d1d6
9a99aee
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
be267de
 
 
 
 
9a99aee
 
e4fcfc2
9a99aee
 
 
163f0b5
 
be267de
9a99aee
 
 
 
4ffc6c0
9a99aee
 
 
 
4ffc6c0
be267de
 
1b91164
9a99aee
 
6e1e93f
 
 
be267de
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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
# Вариант 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)