Генерація відео з зображення та тексту за допомогою ШІ

💡 Усі статті, обговорення, новини про AI — в одному місці. Приєднуйтесь до AI спільноти!

Я не є data scientist, але цікавлюся комп’ютерним зором. Тому періодично переглядаю, що нового з’являється на GitHub та Kaggle у пошуках цікавих проєктів та натхнення. Тут я хотів би описати одну зі своїх знахідок.

Перш ніж перейти до конкретних деталей, дозвольте мені окреслити свої критерії та очікування від проєктів, які я досліджую:

  • Безкоштовність: Проєкт має бути безкоштовним.
  • Простота використання: Він повинен бути легким у реалізації, бажано на Python, що можна запустити на Kaggle (не API).
  • Креативність: Проєкт має сприяти творчості.
  • Розваги: Процес має бути приємним та захоплюючим.

Що я знайшов

Одного вечора я натрапив на цікавий репозиторій на GitHub: Cinemo. Зацікавившись, я вирішив зануритися глибше та дослідити його. Цей проєкт містить попередньо натреновану модель і надає можливість створювати відео зі зображень та тексту, що ви очікуєте побачити. Він використовує Motion Diffusion Models, що ще більше зацікавило мене.

Тому я створив notebook на Kaggle і розпочав тестування.

Крок 1: Клонування репозиторію

Спершу клонування репозиторію з GitHub:

!git clone https://github.com/maxin-cn/Cinemo

Крок 2: Встановлення залежностей

Далі встановлення всіх необхідних залежностей:

!pip install diffusers[torch]==0.24.0
!pip install timm
!pip install accelerate
!pip install python-hostlist
!pip install tensorboard
!pip install einops
!pip install transformers
!pip install av
!pip install scikit-image
!pip install decord
!pip install omegaconf
!pip install torch-dct
!pip install imageio-ffmpeg
!pip install moviepy

Бібліотека imageio-ffmpeg потрібна для створення GIF з відео, що полегшує їх вбудовування в HTML. Бібліотека moviepy дозволяє переглядати результати безпосередньо у блокноті

Крок 3: Імпорт необхідних бібліотек

Імпорт усіх необхідних бібліотек:

import os
import sys
import shutil
import requests

from base64 import b64encode
from IPython.display import HTML
from moviepy.editor import VideoFileClip

Не забудьте додати Cinemo до свого path:
sys.path.append(’/kaggle/working/Cinemo’)

Крок 4: Збереження зображення

Збереження зображення, з якого ви хочете створити відео. Для цього прикладу я використав класичне фото Lena.

def save_image_url(url, file_name): res = requests.get(url, stream=True) if res.status_code == 200: with open(file_name, ’wb’) as f: shutil.copyfileobj(res.raw, f) print(’Image successfully downloaded:’, file_name) else: print(’Image couldn\’t be retrieved’) url = «i.sstatic.net/3T6Gc.jpg» file_name = «/kaggle/working/Cinemo/animated_images/Lena.jpg» save_image_url(url, file_name)

Крок 5: Збереження файлу конфігурації

Створення файлу конфігурації з параметрами можна знайти тут.

Параметри, які варто тестити в першу чергу:

  • video_length: 15
  • use_dct: False
  • num_sampling_steps: 300

а ось тут потрібно вказати файл (зображення) з якого потрібно зробити відео і текст (що ви очікуєте отримати)

[’Lena.jpg’, ’winks with eyes and smiling’], [’Lena.jpg’, ’winks with eyes’], [’Lena.jpg’, ’winks with eyes’],

Крок 6: Генерація відео

Для генерації відео виконайте функцію main з проєкту Cinemo з файлом конфігурації. (в колі я скопіював повністю код, але достатньо лише її імпортувати)

main(OmegaConf.load("/kaggle/working/config.yaml"))


Крок 7: Перегляд результатів

Нарешті, після завершення обробки, ви можете переглянути згенероване відео.

def play(filename):
    html = ''
    video = open(filename, 'rb').read()
    src = 'data:video/mp4;base64,' + b64encode(video).decode()
    html += '<video width=1000 controls autoplay loop><source src="%s" type="video/mp4"></video>' % src 
    return HTML(html)
    
video_path = "/kaggle/working/sample_videos/"
for file in os.listdir(video_path):
    if file.endswith(".mp4"):
        file_path = os.path.join(video_path, file)
        videoClip = VideoFileClip(file_path)
        file_path_gif = file_path.replace(".mp4", ".gif")
        videoClip.write_gif(file_path_gif)
        display(play(file_path))


Ось що я отримав

Висновок

Дослідження проєктів ШІ, таких як Cinemo, було захопливим досвідом, що дозволило мені поєднати свій інтерес до комп’ютерного зору з практичними застосуваннями. Наступний крок — можна подумати про практичні способи використання цих результатів. Ось кілька ідей:

  • Створення мемів: Створюйте смішний та захопливий контент.
  • Особисті відео: Робіть відео з друзями та діліться ними для розваги.
  • Створити набори даних: Генеруйте набори даних для навчання інших моделей. Якщо у вас є інші ідеї, буду радий їх почути.
👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Це нагадує анімації двотисячних

Підписатись на коментарі