Loads a CLIP model from Hugging Face, gets embeddings for each folder, and computes both average L2 distance and average cosine similarity.
(folder1, folder2)
| 382 | return np.mean(similarities) if similarities else float('nan') |
| 383 | |
| 384 | def compare_folders_with_clip(folder1, folder2): |
| 385 | """ |
| 386 | Loads a CLIP model from Hugging Face, |
| 387 | gets embeddings for each folder, |
| 388 | and computes both average L2 distance and average cosine similarity. |
| 389 | """ |
| 390 | device = "cuda" if torch.cuda.is_available() else "cpu" |
| 391 | |
| 392 | model_name="openai/clip-vit-base-patch32" |
| 393 | model_name = "BAAI/AltCLIP" |
| 394 | model = AltCLIPModel.from_pretrained(model_name).to('cuda') |
| 395 | processor = AltCLIPProcessor.from_pretrained(model_name) |
| 396 | |
| 397 | # Compute embeddings |
| 398 | emb1 = compute_clip_embeddings(folder1, model, processor, device) |
| 399 | emb2 = compute_clip_embeddings(folder2, model, processor, device) |
| 400 | |
| 401 | if emb1.size == 0 or emb2.size == 0: |
| 402 | print("One of the folders had no valid images. Comparison not possible.") |
| 403 | return None, None |
| 404 | |
| 405 | # Average L2 Distance |
| 406 | avg_l2 = compute_average_l2_distance(emb1, emb2) |
| 407 | |
| 408 | # Average Cosine Similarity |
| 409 | avg_cos_sim = compute_average_cosine_similarity(emb1, emb2) |
| 410 | |
| 411 | return avg_l2, avg_cos_sim |
| 412 | |
| 413 | def convert_folder_to_grayscale(input_folder, output_folder): |
| 414 | os.makedirs(output_folder, exist_ok=True) |
no test coverage detected