Mixpeek видео эмбеддинги#

Возможности обработки видео Mixpeek позволяют разбивать и вложить видео, а Platform V Vector DB (далее - Vector DB) обеспечивает эффективное хранение и извлечение этих встроенных элементов.

Предварительные требования#

  • Python 3.7+;

  • Ключ API Mixpeek;

  • Установленный клиент Mixpeek (pip install mixpeek);

  • Установленный клиент Vector DB (pip install qdrant-client).

Установка#

  1. Установите необходимые пакеты:

    pip install mixpeek qdrant-client
    
  2. Настройте ключ API Mixpeek:

    from mixpeek import Mixpeek
    
    mixpeek = Mixpeek('your_api_key_here')
    
  3. Инициализируйте клиента Vector DB:

    from qdrant_client import QdrantClient
    
    client = QdrantClient("localhost", port=6333)
    

Использование#

  1. Создание коллекции Vector DB

    Убедитесь, что создали коллекцию Vector DB перед вставкой векторов. Можно создать коллекцию с соответствующим размером вектора (768 для модели vuse-generic-v1) с помощью следующего кода:

    client.create_collection(
        collection_name="video_chunks",
        vectors_config=models.VectorParams(size=768, distance=models.Distance.COSINE)
    )
    
  2. Обработка и вложение видео

    Сначала обработайте видео на части и внедрите каждую часть:

    from mixpeek import Mixpeek
    from qdrant_client import QdrantClient, models
    
    mixpeek = Mixpeek('your_api_key_here')
    client = QdrantClient("localhost", port=6333)
    
    video_url = "https://mixpeek-public-demo.s3.us-east-2.amazonaws.com/starter/jurassic_park_trailer.mp4"
    
    # Process video chunks
    processed_chunks = mixpeek.tools.video.process(
        video_source=video_url,
        chunk_interval=1,  # 1 second intervals
        resolution=[720, 1280]
    )
    
    # Embed each chunk and insert into Qdrant
    for index, chunk in enumerate(processed_chunks):
        print(f"Processing video chunk: {index}")
    
        embedding = mixpeek.embed.video(
            model_id="vuse-generic-v1",
            input=chunk['base64_chunk'],
            input_type="base64"
        )['embedding']
    
        # Insert into Qdrant
        client.upsert(
            collection_name="video_chunks",
            points=[models.PointStruct(
                id=index,
                vector=embedding,
                payload={
                    "start_time": chunk["start_time"],
                    "end_time": chunk["end_time"]
                }
            )]
        )
    
        print(f"  Embedding preview: {embedding[:5] + ['...'] + embedding[-5:]}")
    
    print(f"Processed and inserted {len(processed_chunks)} chunks")
    
  3. Поиск похожих фрагментов видео

    Чтобы найти похожие фрагменты видео, можно использовать либо текстовые запросы, либо запросы по видео.

Текстовый запрос#

query_text = "a car chase scene"

# Embed the text query
query_embedding = mixpeek.embed.video(
    model_id="vuse-generic-v1",
    input=query_text,
    input_type="text"
)['embedding']

# Search in Qdrant
search_results = client.query_points(
    collection_name="video_chunks",
    query=query_embedding,
    limit=5
).points

for result in search_results:
    print(f"Chunk ID: {result.id}, Score: {result.score}")
    print(f"Time range: {result.payload['start_time']} - {result.payload['end_time']}")

Видео-запрос#

query_video_url = "https://mixpeek-public-demo.s3.us-east-2.amazonaws.com/starter/jurassic_bunny.mp4"

# Embed the video query
query_embedding = mixpeek.embed.video(
    model_id="vuse-generic-v1",
    input=query_video_url,
    input_type="url"
)['embedding']

# Search in Qdrant
search_results = client.query_points(
    collection_name="video_chunks",
    query=query_embedding,
    limit=5
).points

for result in search_results:
    print(f"Chunk ID: {result.id}, Score: {result.score}")
    print(f"Time range: {result.payload['start_time']} - {result.payload['end_time']}")

Дополнительная документация#

Для получения дополнительной информации о Mixpeek Embed ознакомьтесь с официальной документацией.