So finden Sie ähnliche Bilder für ein bestimmtes Bild in einem VerzeichnisPython

Python-Programme
Anonymous
 So finden Sie ähnliche Bilder für ein bestimmtes Bild in einem Verzeichnis

Post by Anonymous »

Ich bin neu im Bereich maschinelles Lernen und Python und versuche, die am besten passenden (ähnlichen) Bilder in einem Verzeichnis für das gegebene Bild zu finden.
Zum Beispiel habe ich 50.000 Münzbilder in einem Ordner und versuche, die 10 besten Bilder zu finden, die mit dem vom Benutzer angegebenen Bild am besten übereinstimmen.
Hier sind meine Beispieldateien https://drive.google.com/drive/folders/ ... sp=sharing
Hier ist das Beispielsuchbild https://drive.google.com/file/d/ 1cWTxLIjG2pKW4-1g-LYfdAbccG18sPnX/view?usp=sharing
Ich auch Das angegebene Bild wurde mit OpenCV geändert, aber es hat sich nichts geändert. Hier handelt es sich um die beschnittene Version https://drive.google.com/file/d/1AvZbPg ... sp=sharing
Die Erwartung ist, dass 18206-f.jpg laut der angegebenen Beispieldatei die am besten passende Datei sein sollte.
Ich habe viele ausprobiert Algorithmen und bereitgestellte Lösungen wie die folgende, aber ich konnte keine richtige Lösung finden.
  • Ich habe wie erwähnt ein benutzerdefiniertes Trainingsmodell mit Bildklassifizierung verwendet hier https://www.tensorflow.org/tutorials/im ... sification, aber ich habe versagt. Ich vermute, dass ich keine andere Datei für das spezifische Beispiel habe. Ich habe auch einen benutzerdefinierten Datenerweiterungsmechanismus ausprobiert, bin aber erneut fehlgeschlagen (fehlgeschlagen = Konnte nicht das richtige finden Dateien)
  • Ich habe https://github.com/TechyNilesh/DeepImageSearch verwendet, bin aber fehlgeschlagen. Ich denke, diese Art von Lösung eignet sich am besten für semantische Suchen , ich brauche eine Bild-zu-Bild-Suche wie Bildähnlichkeit, nicht Stichwort-/Inhaltsähnlichkeit usw.
  • Ich habe Hashing-Algorithmen wie Ahash verwendet, Dhash und Phash scheiterten jedoch, als das Bild unterschiedlich war Bedingungen usw.
  • Ich habe die hier erwähnte KNN-Suche ausprobiert https://stackoverflow.com/a/56881718/6799182, bin aber erneut fehlgeschlagen.

Code: Select all

import cv2
import os
import numpy as np

from typing import Union

def read_img_from_dir(image_dir: str, query_shape: Union[list, tuple]) -> tuple[list, np.ndarray]:
name_image = []
img_array = np.empty((0, np.prod(query_shape)), dtype=np.float32)
for image_name in os.listdir(image_dir):
name_image.append(image_name)
image = cv2.imread(os.path.join(image_dir, image_name))
if not isinstance(image, np.ndarray):
# if path is not image
continue
image = cv2.resize(image, query_shape[:2][::-1])
image = image.reshape(1, -1) / 255.
img_array = np.concatenate((img_array, image))
return name_image, img_array

def find_by_knn(query_img: np.ndarray, list_name: list[str], database: np.ndarray) -> str:
query_img = query_img.reshape(1, -1) / 255.
dists = np.sqrt(np.sum((database-query_img) ** 2,axis = 1))
idx = dists.argmin()
return list_name[idx]

if __name__=='__main__':
image_query = '1tl-cropped.png'
image_dir = 'sample_flat'
img = cv2.imread(image_query)

# optional: since the query image size maybe large, resize
# all image to a small disired shape may avoid OOM problem
# and boost computing speed

# global_shape = (320, 320)
# img = cv2.resize(img, global_shape)

shape = img.shape
name_image, img_array = read_img_from_dir(image_dir, shape)
result = find_by_knn(img, name_image, img_array)
print(result)
Bitte nennen Sie mir die richtige Lösung für diese Aufgabe.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post