[PYTHON] J'ai essayé de trier les objets de l'image du plat de steak-④ Clustering

introduction

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.

Code source

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

résultat

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'}

Détails

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.

Groupe de tare

634.jpg 634.jpg

632.jpg 632.jpg

Groupe riz

575.jpg 575.jpg

603.jpg 603.jpg

Impressions

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.

Tous les liens de page

Recommended Posts

J'ai essayé de trier les objets de l'image du plat de steak-④ Clustering
J'ai essayé de trier les objets de l'image du plat de steak-① Détection d'objets
J'ai essayé de trier les objets de l'image du plat de steak-② Tri des numéros de chevauchement
J'ai essayé de trier les objets de l'image du plat de steak-⑤ Détection de point de fonction d'image similaire
J'ai essayé de couper une image fixe de la vidéo
J'ai essayé de corriger la forme trapézoïdale de l'image
J'ai essayé de détecter l'iris à partir de l'image de la caméra
J'ai essayé de trouver l'entropie de l'image avec python
J'ai essayé de transformer l'image du visage en utilisant sparse_image_warp de TensorFlow Addons
J'ai essayé d'utiliser le filtre d'image d'OpenCV
J'ai essayé de vectoriser les paroles de Hinatazaka 46!
J'ai essayé d'automatiser le travail de masquage du visage de l'image de coordination pour l'usure
J'ai essayé de prédire le nombre de personnes infectées par le virus corona en tenant compte de l'effet de s'abstenir de sortir
J'ai essayé de résumer la forme de base de GPLVM
J'ai essayé de visualiser les informations spacha de VTuber
J'ai essayé d'effacer la partie négative de Meros
J'ai essayé de classer les voix des acteurs de la voix
J'ai essayé de compresser l'image en utilisant l'apprentissage automatique
J'ai essayé de résumer les opérations de chaîne de Python
J'ai essayé d'extraire le texte du fichier image en utilisant Tesseract du moteur OCR
J'ai essayé de découvrir les grandes lignes de Big Gorilla
J'ai essayé la "correction gamma" de l'image avec Python + OpenCV
J'ai essayé d'obtenir les informations de localisation du bus Odakyu
J'ai essayé de trouver la moyenne de plusieurs colonnes avec TensorFlow
[Python] J'ai essayé de visualiser la relation de suivi de Twitter
[Apprentissage automatique] J'ai essayé de résumer la théorie d'Adaboost
J'ai essayé de combattre le minimum local de la fonction Goldstein-Price
J'ai essayé de changer le script python de 2.7.11 à 3.6.0 sur Windows10
J'ai essayé d'obtenir diverses informations de l'API codeforces
J'ai essayé de prédire le genre de musique à partir du titre de la chanson sur le réseau neuronal récurrent
J'ai essayé d'utiliser PI Fu pour générer un modèle 3D d'une personne à partir d'une image
J'ai essayé de trouver la tendance du nombre de navires dans la baie de Tokyo à partir d'images satellites.
[Linux] J'ai essayé de résumer les commandes de confirmation des ressources
J'ai essayé d'obtenir l'index de la liste en utilisant la fonction énumérer
J'ai essayé d'automatiser l'arrosage du pot avec Raspberry Pi
J'ai essayé de traiter l'image en "style croquis" avec OpenCV
J'ai essayé de traiter l'image dans un "style de dessin au crayon" avec OpenCV
J'ai essayé d'agrandir la taille du volume logique avec LVM
J'ai essayé de résumer la méthode de mise en œuvre fréquemment utilisée de pytest-mock
J'ai essayé d'améliorer l'efficacité du travail quotidien avec Python
J'ai essayé de visualiser la condition commune des téléspectateurs de la chaîne VTuber
J'ai essayé de déplacer le ballon
J'ai essayé d'estimer la section.
[Python] J'ai essayé de reproduire le programme d'évacuation d'urgence pour revenir du monde pour revenir du monde modifié de "La disparition de Haruhi Suzumiya"
J'ai essayé de livrer du courrier depuis Node.js et Python en utilisant le service de livraison de courrier (SendGrid) d'IBM Cloud!
[Python] J'ai essayé de résumer le type collectif (ensemble) d'une manière facile à comprendre.
J'ai essayé de déplacer l'image vers le dossier spécifié en faisant un clic droit et un clic gauche
J'ai essayé de visualiser la tranche d'âge et la distribution des taux d'Atcoder
J'ai essayé de transcrire les actualités de l'exemple d'intégration commerciale sur Amazon Transcribe
J'ai essayé d'appeler l'API de prédiction du modèle d'apprentissage automatique de WordPress
zoom J'ai essayé de quantifier le degré d'excitation de l'histoire lors de la conférence
J'ai essayé d'estimer la similitude de l'intention de la question en utilisant Doc2Vec de gensim
J'ai essayé d'améliorer la précision de mon propre réseau neuronal