Skip to main content

Image search

Image search uses an image as a search input to perform vector similarity search.

Additional information

Configure image search

To use images as search inputs, configure an image vectorizer module for your collection.

For details, see the modules reference page:

Named vectors

Added in v1.24

Any vector-based search on collections with named vectors configured must include a target vector name in the query. This allows Weaviate to find the correct vector to compare with the query vector.

from weaviate.classes.query import MetadataQuery

reviews = client.collections.get("WineReviewNV")
response = reviews.query.near_text(
query="a sweet German white wine",
limit=2,
target_vector="title_country", # Specify the target vector for named vector collections
return_metadata=MetadataQuery(distance=True)
)

for o in response.objects:
print(o.properties)
print(o.metadata.distance)

By local image path

Use the Near Image operator to execute image search.
If your query image is stored in a file, you can use the client library to search by its filename.

from pathlib import Path

dogs = client.collections.get("Dog")
response = dogs.query.near_image(
near_image=Path("./images/search-image.jpg"), # Provide a `Path` object
return_properties=["breed"],
limit=1
)

print(response.objects[0])

client.close()
Example response
{
"data": {
"Get": {
"Dog": [
{
"breed": "Corgi"
}
]
}
}
}

client.close()

By the base64 representation

You can search by a base64 representation of an image:

base64_string="SOME_BASE_64_REPRESENTATION"

# Get the collection containing images
dogs = client.collections.get("Dog")

# Perform query
response = dogs.query.near_image(
near_image=base64_string,
return_properties=["breed"],
limit=1
)

print(response.objects[0])

client.close()
Example response
{
"data": {
"Get": {
"Dog": [
{
"breed": "Corgi"
}
]
}
}
}

client.close()

Create a base64 representation of an online image.

You can create a base64 representation of an online image, and use it as input for similarity search as shown above.

import base64, requests

def url_to_base64(url):
image_response = requests.get(url)
content = image_response.content
return base64.b64encode(content).decode("utf-8")

base64_img = url_to_base64("https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Deutsches_Museum_Portrait_4.jpg/500px-Deutsches_Museum_Portrait_4.jpg")

client.close()

Combination with other operators

A Near Image search can be combined with any other operators (like filter, limit, etc.), just as other similarity search operators.

See the similarity search page for more details.

Questions and feedback

If you have any questions or feedback, let us know in our user forum.