mirror of
https://github.com/qdrant/landing_page.git
synced 2026-09-27 06:58:30 +02:00
Merge pull request #1154 from esteininger/patch-1
added mixpeek video embedding support
This commit is contained in:
@@ -0,0 +1,155 @@
|
||||
---
|
||||
title: Mixpeek
|
||||
weight: 2250
|
||||
---
|
||||
|
||||
# Mixpeek Video Embeddings
|
||||
|
||||
Mixpeek's video processing capabilities allow you to chunk and embed videos, while Qdrant provides efficient storage and retrieval of these embeddings.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Python 3.7+
|
||||
- Mixpeek API key
|
||||
- Mixpeek client installed (`pip install mixpeek`)
|
||||
- Qdrant client installed (`pip install qdrant-client`)
|
||||
|
||||
## Installation
|
||||
|
||||
1. Install the required packages:
|
||||
|
||||
```bash
|
||||
pip install mixpeek qdrant-client
|
||||
```
|
||||
|
||||
2. Set up your Mixpeek API key:
|
||||
|
||||
```python
|
||||
from mixpeek import Mixpeek
|
||||
|
||||
mixpeek = Mixpeek('your_api_key_here')
|
||||
```
|
||||
|
||||
3. Initialize the Qdrant client:
|
||||
|
||||
```python
|
||||
from qdrant_client import QdrantClient
|
||||
|
||||
client = QdrantClient("localhost", port=6333)
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
### 1. Create Qdrant Collection
|
||||
|
||||
Make sure to create a Qdrant collection before inserting vectors. You can create a collection with the appropriate vector size (768 for "vuse-generic-v1" model) using:
|
||||
|
||||
```python
|
||||
client.create_collection(
|
||||
collection_name="video_chunks",
|
||||
vectors_config=models.VectorParams(size=768, distance=models.Distance.COSINE)
|
||||
)
|
||||
```
|
||||
|
||||
### 2. Process and Embed Video
|
||||
|
||||
First, process the video into chunks and embed each chunk:
|
||||
|
||||
```python
|
||||
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. Search for Similar Video Chunks
|
||||
|
||||
To search for similar video chunks, you can use either text or video queries:
|
||||
|
||||
#### Text Query
|
||||
|
||||
```python
|
||||
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']}")
|
||||
```
|
||||
|
||||
#### Video Query
|
||||
|
||||
```python
|
||||
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']}")
|
||||
```
|
||||
|
||||
## Resources
|
||||
For more information on Mixpeek Embed, review the official documentation: https://docs.mixpeek.com/api-documentation/inference/embed
|
||||
Reference in New Issue
Block a user