Poursuivant de j'ai essayé de trier les objets à partir des images de détection d'images similaires à des plats de steaks, cette fois j'ai essayé de regrouper les images par rapport à l'histogramme. C'était.
grouping_image.py
image_dir = "{Chemin du répertoire}"
target_files = os.listdir(image_dir)
files = os.listdir(image_dir)
group_images = {}
for target_file in target_files:
if target_file == '.DS_Store':
continue
#Chargez le fichier image.
target_image_path = image_dir + target_file
target_image = cv2.imread(target_image_path)
#Générez des données d'histogramme.
target_hist = cv2.calcHist([target_image], [0], None, [256], [0, 256])
similarity_images = {}
for file in files:
if file == '.DS_Store' or file == target_file:
continue
#Chargez le fichier image.
comparing_image_path = image_dir + file
comparing_image = cv2.imread(comparing_image_path)
#Générez des données d'histogramme.
comparing_hist = cv2.calcHist([comparing_image], [0], None, [256], [0, 256])
#Comparez les histogrammes pour calculer la similitude des images.
ret = cv2.compareHist(target_hist, comparing_hist, 0)
#Convertit le résultat en notation probabiliste.
probability = ret * 100
#Produit la similitude.
# print("target file: " + target_file, "file: " + file, "similarity: " + str(probability) + "%")
#La similitude est de 90%Regroupez uniquement les éléments ci-dessus.
if probability > 90:
if len(target_file) not in group_images:
group_images[target_file] = {}
similarity_images[len(similarity_images)] = file
group_images[target_file].update(similarity_images)
#Regroupez les images similaires.
similarity_group = {}
for target_images in group_images:
similarity_image = {}
count = 0
#Recherchez les images déjà groupées.
if is_distinct_image(similarity_group, target_images):
for similarity_images in group_images:
if target_images != similarity_images:
distinct_images = {v:k for k, v in group_images[similarity_images].items()}
if target_images in distinct_images:
similarity_image[count] = similarity_images
count = count + 1
if target_images not in similarity_group:
similarity_group[target_images] = {}
similarity_group[target_images].update(similarity_image)
#Sort le résultat du regroupement.
for file in similarity_group:
print file, similarity_group[file]
#S'il est groupé, False sera retourné.
def is_distinct_image(similarity_group, target_images):
for images in similarity_group:
distinct_images = {v:k for k, v in similarity_group[images].items()}
if target_images in distinct_images:
return False
return True
634.jpg {0: '632.jpg', 1: '657.jpg'}
575.jpg {0: '603.jpg', 1: '581.jpg', 2: '659.jpg', 3: '758.jpg', 4: '754.jpg', 5: '629.jpg'}
932.jpg {0: '799.jpg', 1: '659.jpg', 2: '815.jpg', 3: '492.jpg', 4: '921.jpg', 5: '658.jpg', 6: '920.jpg', 7: '974.jpg', 8: '629.jpg', 9: '1018.jpg', 10: '806.jpg', 11: '972.jpg'}
547.jpg {0: '559.jpg', 1: '463.jpg'}
480.jpg {0: '432.jpg'}
389.jpg {0: '432.jpg', 1: '250.jpg', 2: '369.jpg'}
Il a été classé en 6 types. Les deux groupes suivants ont été divisés en ceux qui ont réussi et qui ont voulu prendre.
634.jpg
632.jpg
575.jpg
603.jpg
De plus, les cornichons, la soupe miso et la confiserie ont été rendus difficiles. Peut-être que la raison est qu'il y a une image de tout le plat de viande grillée transféré, et je pense qu'il est tiré par lui.
Recommended Posts