Reference for ultralytics/solutions/similarity_search.py
Note
This file is available at https://github.com/ultralytics/ultralytics/blob/main/ultralytics/solutions/similarity_search.py. If you spot a problem please help fix it by contributing a Pull Request 🛠️. Thank you 🙏!
ultralytics.solutions.similarity_search.VisualAISearch
VisualAISearch(**kwargs: Any)
A semantic image search system that leverages OpenCLIP for generating high-quality image and text embeddings and FAISS for fast similarity-based retrieval.
This class aligns image and text embeddings in a shared semantic space, enabling users to search large collections of images using natural language queries with high accuracy and speed.
Attributes:
| Name | Type | Description |
|---|---|---|
data |
str
| Directory containing images. |
device |
str
| Computation device, e.g., 'cpu' or 'cuda'. |
faiss_index |
str
| Path to the FAISS index file. |
data_path_npy |
str
| Path to the numpy file storing image paths. |
data_dir |
Path
| Path object for the data directory. |
model | Loaded CLIP model. | |
index | FAISS index for similarity search. | |
image_paths |
list[str]
| List of image file paths. |
Methods:
| Name | Description |
|---|---|
extract_image_feature | Extract CLIP embedding from an image. |
extract_text_feature | Extract CLIP embedding from text. |
load_or_build_index | Load existing FAISS index or build new one. |
search | Perform semantic search for similar images. |
Examples:
Initialize and search for images
>>> searcher = VisualAISearch(data="path/to/images", device="cuda")
>>> results = searcher.search("a cat sitting on a chair", k=10)
Source code in ultralytics/solutions/similarity_search.py
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | |
__call__
__call__(query: str) -> list[str]
Direct call interface for the search function.
Source code in ultralytics/solutions/similarity_search.py
161 162 163 | |
extract_image_feature
extract_image_feature(path: Path) -> np.ndarray
Extract CLIP image embedding from the given image path.
Source code in ultralytics/solutions/similarity_search.py
78 79 80 | |
extract_text_feature
extract_text_feature(text: str) -> np.ndarray
Extract CLIP text embedding from the given text query.
Source code in ultralytics/solutions/similarity_search.py
82 83 84 | |
load_or_build_index
load_or_build_index() -> None
Load existing FAISS index or build a new one from image features.
Checks if FAISS index and image paths exist on disk. If found, loads them directly. Otherwise, builds a new index by extracting features from all images in the data directory, normalizes the features, and saves both the index and image paths for future use.
Source code in ultralytics/solutions/similarity_search.py
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | |
search
search(query: str, k: int = 30, similarity_thresh: float = 0.1) -> list[str]
Return top-k semantically similar images to the given query.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
query
|
str
| Natural language text query to search for. | required |
k
|
int
| Maximum number of results to return. |
30
|
similarity_thresh
|
float
| Minimum similarity threshold for filtering results. |
0.1
|
Returns:
| Type | Description |
|---|---|
list[str]
| List of image filenames ranked by similarity score. |
Examples:
Search for images matching a query
>>> searcher = VisualAISearch(data="images")
>>> results = searcher.search("red car", k=5, similarity_thresh=0.2)
Source code in ultralytics/solutions/similarity_search.py
130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 | |
ultralytics.solutions.similarity_search.SearchApp
SearchApp(data: str = 'images', device: str | None = None)
A Flask-based web interface for semantic image search with natural language queries.
This class provides a clean, responsive frontend that enables users to input natural language queries and instantly view the most relevant images retrieved from the indexed database.
Attributes:
| Name | Type | Description |
|---|---|---|
render_template | Flask template rendering function. | |
request | Flask request object. | |
searcher |
VisualAISearch
| Instance of the VisualAISearch class. |
app |
Flask
| Flask application instance. |
Methods:
| Name | Description |
|---|---|
index | Process user queries and display search results. |
run | Start the Flask web application. |
Examples:
Start a search application
>>> app = SearchApp(data="path/to/images", device="cuda")
>>> app.run(debug=True)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
data
|
str
| Path to directory containing images to index and search. |
'images'
|
device
|
str
| Device to run inference on (e.g. 'cpu', 'cuda'). |
None
|
Source code in ultralytics/solutions/similarity_search.py
188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 | |
index
index() -> str
Process user query and display search results in the web interface.
Source code in ultralytics/solutions/similarity_search.py
209 210 211 212 213 214 215 | |
run
run(debug: bool = False) -> None
Start the Flask web application server.
Source code in ultralytics/solutions/similarity_search.py
217 218 219 | |