Djataki commited on
Commit
a0f1de6
·
verified ·
1 Parent(s): b6c2141

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +44 -32
app.py CHANGED
@@ -2,45 +2,57 @@ import gradio as gr
2
  from transformers import pipeline
3
  from gtts import gTTS
4
  from PIL import Image, ImageDraw, ImageFont
5
- import uuid
 
6
  import os
 
7
 
8
- # Папки
9
- os.makedirs("facts", exist_ok=True)
10
 
11
- # Фактогенерация
12
- fact_generator = pipeline("text-generation", model="sberbank-ai/rugpt3small_based_on_gpt2")
 
13
 
14
- def generate():
15
- # 1. Генерация текста
16
- fact = fact_generator("Знаете ли вы, что", max_length=50, num_return_sequences=1)[0]["generated_text"]
17
- fact = fact.split(".")[0] + "."
18
 
19
- # 2. Озвучка
20
- audio_path = f"facts/{uuid.uuid4().hex}.mp3"
21
- tts = gTTS(fact, lang="ru")
22
- tts.save(audio_path)
 
 
 
23
 
24
- # 3. Картинка
25
- image = Image.new("RGB", (1080, 1920), color="black")
26
- draw = ImageDraw.Draw(image)
 
 
 
 
27
  font = ImageFont.load_default()
28
- draw.text((50, 960), fact, font=font, fill="white")
29
- image_path = audio_path.replace(".mp3", ".png")
30
- image.save(image_path)
31
-
32
- return fact, image_path, audio_path
33
-
34
- demo = gr.Interface(
35
- fn=generate,
36
- inputs=[],
37
- outputs=[
38
- gr.Textbox(label="Факт"),
39
- gr.Image(label="Изображение"),
40
- gr.Audio(label="Озвучка", type="filepath")
41
- ],
42
- title="TikTok-факты на русском",
43
- )
 
 
 
 
44
 
45
  demo.launch()
46
 
 
2
  from transformers import pipeline
3
  from gtts import gTTS
4
  from PIL import Image, ImageDraw, ImageFont
5
+ import numpy as np
6
+ import cv2
7
  import os
8
+ import uuid
9
 
10
+ # Создание папки
11
+ os.makedirs("videos", exist_ok=True)
12
 
13
+ # Генератор текстов
14
+ generator = pipeline("text-generation", model="sberbank-ai/rugpt3small_based_on_gpt2")
15
+ used_ideas = set()
16
 
17
+ def generate_video():
18
+ global used_ideas
 
 
19
 
20
+ # Генерация уникальной идеи
21
+ while True:
22
+ idea = generator("Идея для короткого видео: ", max_length=60, num_return_sequences=1)[0]['generated_text']
23
+ idea = idea.strip().split(".")[0]
24
+ if idea not in used_ideas and len(idea) > 20:
25
+ used_ideas.add(idea)
26
+ break
27
 
28
+ # Сохраняем аудио
29
+ audio_path = f"videos/{uuid.uuid4().hex}.mp3"
30
+ gTTS(idea, lang="ru").save(audio_path)
31
+
32
+ # Создаём изображение
33
+ img = Image.new("RGB", (1080, 1920), color="black")
34
+ draw = ImageDraw.Draw(img)
35
  font = ImageFont.load_default()
36
+ draw.text((50, 900), idea, font=font, fill="white")
37
+ img_np = np.array(img)
38
+
39
+ # Конвертируем в видео (6 сек, 30 fps)
40
+ video_path = f"videos/{uuid.uuid4().hex}.mp4"
41
+ out = cv2.VideoWriter(video_path, cv2.VideoWriter_fourcc(*'mp4v'), 30, (1080, 1920))
42
+
43
+ for _ in range(180):
44
+ out.write(cv2.cvtColor(img_np, cv2.COLOR_RGB2BGR))
45
+ out.release()
46
+
47
+ return video_path, idea
48
+
49
+ # Интерфейс
50
+ with gr.Blocks() as demo:
51
+ out_text = gr.Textbox(label="🧠 Идея")
52
+ out_video = gr.Video(label="🎥 Видео")
53
+ gen_btn = gr.Button("🎬 Сгенерировать")
54
+
55
+ gen_btn.click(fn=generate_video, inputs=[], outputs=[out_video, out_text])
56
 
57
  demo.launch()
58