GPT-4V, выпущенный OpenAI в прошлом году, уже поддерживает мультимодальное распознавание, но он ограничен вводом изображений и не поддерживает видео. Напротив, Gemini от Google уже поддерживает распознавание видео. Недавно в нашей компании возникла необходимость распознавать видео в бизнес-сценариях, и мы приобрели только модель GPT-4o. Возникает вопрос: как использовать GPT-4o для завершения обработки видео?
Изучив несколько уроков, я нашел возможное решение этой проблемы. Этот метод состоит из двух этапов: сначала видео разбивается на серию изображений ключевых кадров, затем эти изображения вводятся в GPT-4o для анализа для завершения интерпретации всего видео; Реализовать очень просто. Вот специально нашел видео в кошки-мышки, чтобы воспроизвести эту реализацию. Конкретный код такой:
from IPython.display import display, Image
# Здесь нам нужно использовать cv2 и base64.
import cv2
import base64
import time
from openai import OpenAI
client = OpenAI()
Следующий шаг – извлечение ключевых кадров видео. Чтобы уменьшить потребление токенов, я использовал два метода уменьшения количества информации:
Вот дополнительное объяснение того, почему необходимо конвертировать данные в кодировку Base64. Интерфейс OpenAI поддерживает два способа передачи изображений: один — напрямую передавать общедоступный URL-адрес изображения, но у нас его нет, другой — напрямую кодировать изображение в base64 и затем передавать его, поэтому мы можем выбрать только последний вариант;
video = cv2.VideoCapture("data/tom_and_jerry.mp4")
base64Frames = []
fps = video.get(cv2.CAP_PROP_FPS)
frame_jump = int(fps)
frame_count = 0
# Определить целевой размер
target_width = 640
target_height = 320
while video.isOpened():
success, frame = video.read()
if not success:
break
# Сохраняйте один кадр в секунду
if frame_count % frame_jump == 0:
resized_frame = cv2.resize(frame, (target_width, target_height))
_, buffer = cv2.imencode(".jpg", resized_frame)
base64Frames.append(base64.b64encode(buffer).decode("utf-8"))
frame_count += 1
video.release()
print(len(base64Frames), "frames read.")
Следующий шаг — самый важный: вызов GPT-4o для анализа изображения. Эта функция будет обрабатывать видеокадры, которые мы извлекли ранее, и анализировать эти изображения с использованием модели GPT-4o. Он сгенерирует подробное описание видеоконтента, чтобы помочь нам понять сюжет всего видео.
def vision(frames):
PROMPT_MESSAGES = [
{
"role": "user",
"content": [
{
"type": "text",
"text":
f"""
Эти изображения взяты из видео по порядку. Временной интервал перехвата составляет 1 с. Всего изображений: {len(frames)}. Основываясь на этой информации о изображениях, пожалуйста, подробно опишите сюжет видео на китайском языке.
"""
},
*[{
"type": "image_url",
"image_url": {
"url": 'data:image/jpeg;base64,' + frame,
}
} for frame in frames]
],
},
]
params = {
"model": "gpt-4o",
"messages": PROMPT_MESSAGES,
"max_tokens": 2000,
"temperature": 0.7
}
result = client.chat.completions.create(**params)
return result.choices[0].message.content
Наконец, мы вызываем ранее определенную функцию зрения для обработки извлеченных видеокадров и получения соответствующих результатов анализа.
result = vision(base64Frames)
print(result)
Получены следующие результаты, описание сюжета достаточно точное. Этот экспериментальный результат доказывает, что наш метод осуществим. Разбив видео на ключевые кадры и проанализировав его с помощью GPT-4o, нам удалось получить точное описание всего видеоконтента. Этот подход не только решает проблему нашей неспособности напрямую обрабатывать видео, но и демонстрирует мощные возможности GPT-4o в мультимодальных задачах.
Это видео похоже на классический мультфильм про Тома и Джерри.
Спектакль начинается с того, что женщина на высоких каблуках подметает пол метлой. Затем рядом с метлой появляется белая мышь (возможно, друг Джерри). Затем появился Кот Том и попытался поймать белую мышь метлой, но белая мышь ловко уклонилась от нее.
Затем Том преследует и ловит мышь, но Джерри прибывает вовремя, чтобы противостоять Тому. Том пытается открыть дверь, но оказывается за ней. Женщина бьет Тома метлой по голове и обвиняет его в том, что он все еще ищет неприятности.
Том указал пальцем на морскую свинку, пытаясь оправдать свои действия, но женщина явно на это не купилась. Тома выгнали из дома и облили краской. Мышь нашла бутылку крема для обуви и, похоже, что-то задумала.
Наконец, Том пытается вернуться в дом, переодевшись белым котом и притворившись «танцующим котом». Женщина, казалось, была довольна его выходкой и похвалила его, но мышь разглядела маскировку Тома. Видео заканчивается забавным взаимодействием Тома и белой мыши, а на последнем экране появляется слово «Конец».
В целом, в этом фильме показаны классические погони и юмористические сцены Тома и Джерри, полные веселья и радости.
ˆХотя GPT-4o официально не обеспечивает функцию анализа видео,Мы все еще можем добиться понимания видео с помощью этого умного обходного пути. Лично мне такой подход весьма интересен. Полный код доступен на GitHub.,Ссылкаhttps://github.com/xindoo/openai-examples/blob/main/vision_for_video.ipynb。