photo en double

Trouver des images en double à l’aide de Java Cloud SDK

Notre cerveau se consacre au traitement visuel et notre amour pour les images repose sur notre cognition et notre capacité d’attention. Les images sont capables d’attirer facilement notre attention et de nombreux appareils, y compris les téléphones portables, les appareils photo numériques, les scanners, etc. produisent une grande quantité d’images. De plus, les images ont des algorithmes de compression différents et les images raster sont très courantes parmi elles car elles consomment moins d’espace de stockage. Mais malgré tout, avec le temps, nous finissons par créer des photos en double, des images redondantes, etc. Nous avons une pléthore d’applications offrant la possibilité de trouver des images en double, y compris un outil de recherche d’images en double. Si vous avez des images stockées dans google photos, vous pouvez essayer d’utiliser google photo duplicate finder, installer duplicate photo finder windows 10 ou duplicate photo finder mac (selon votre système d’exploitation). Cependant, dans cet article, nous allons vous expliquer comment développer un superbe outil de recherche de photos en double à l’aide de l’API REST qui peut être utilisé sur n’importe quelle plate-forme.

API de traitement d’images

Une variété d’applications sont disponibles pour le traitement d’image offrant les fonctionnalités pour créer, éditer et manipuler des fichiers image. Ils fournissent également des fonctionnalités telles que la recherche d’images basée sur des techniques de recherche d’images inversées ou tout autre algorithme. Cependant, si vous êtes intéressé par une solution programmatique basée sur l’API REST basée sur la recherche d’images inversées, alors Aspose.Imaging Cloud est le choix définitif. Son puissant moteur de recherche aide les développeurs à ajouter des fonctionnalités de recherche d’images inversées dans leur application sur n’importe quelle plate-forme de manière transparente. Vous pouvez même lancer une opération de comparaison d’images pour trouver une photo en double parmi plusieurs autres images. À la suite de cette opération, vous obtenez la liste des images les plus similaires selon les conditions suivantes :

  • Degré de similitude
  • Le seuil minimal de similarité
  • Algorithme de comparaison

Désormais, pour disposer de capacités de traitement d’image similaires et de recherche d’images en double dans l’application Java, nous devons utiliser Aspose.Imaging Cloud SDK for Java car il s’agit d’un wrapper autour de l’API Cloud. L’étape suivante consiste donc à ajouter sa référence dans le projet Java en incluant les informations suivantes dans pom.xml du projet de type de construction maven.

<repositories> 
    <repository>
        <id>aspose-cloud</id>
        <name>artifact.aspose-cloud-releases</name>
        <url>http://artifact.aspose.cloud/repo</url>
    </repository>   
</repositories>

<dependencies>
    <dependency>
        <groupId>com.aspose</groupId>
        <artifactId>aspose-imaging-cloud</artifactId>
        <version>22.4</version>
    </dependency>
</dependencies>

Maintenant, si vous n’avez pas créé de compte sur Aspose Cloud Dashboard, vous pouvez vous inscrire pour un essai gratuit via une adresse e-mail valide. Connectez-vous maintenant à l’aide du compte nouvellement créé et recherchez/créez l’ID client et le secret client sur Cloud Dashboard. Ces informations sont requises à des fins d’authentification dans les sections suivantes.

Trouver des images en double à l’aide de Java

La recherche d’image inversée est une technique qui vous aide à rechercher des images visuellement similaires en fonction de votre exemple d’image. Vous trouverez ci-dessous les cas d’utilisation les plus courants de cette fonctionnalité :

Rechercher une image en double et supprimer les doublons Rechercher des images similaires au contenu Rechercher du contenu inapproprié Rechercher des images signées numériquement

Notre API prend actuellement en charge la recherche d’images basée sur le contenu, la recherche d’images en double, la recherche d’images par balises enregistrées personnalisées, la comparaison d’images et la détection de similarités et les opérations d’extraction de caractéristiques d’image. Maintenant, dans cette section, nous allons discuter des détails sur la façon de trouver des images en double en utilisant la technique d’image inversée. Maintenant, pour répondre à cette exigence, nous utilisons l’algorithme AKAZE pour la détection des fonctionnalités et l’algorithme RandomBinaryTree pour la correspondance des fonctionnalités dans l’exemple. Nous allons suivre ces étapes pour trouver les images en double :

  • Télécharger des images sur le stockage en nuage
  • Créer un contexte de recherche
  • Extraire les fonctionnalités de l’image
  • Trouver des images en double

Télécharger des images sur le stockage en nuage

Veuillez utiliser l’extrait de code suivant pour télécharger des fichiers image du lecteur local vers le stockage cloud

  • Tout d’abord, créez un objet de ImagingApi tout en fournissant ClientID et Client
  • Deuxièmement, lisez tous les fichiers image du répertoire spécifié
  • Filtrer uniquement les fichiers image et les ajouter à la liste filtrée
  • Téléchargez les images sur le stockage Cloud à l’aide de la méthode uploadFile(…) tout en prenant l’objet UploadFileRequest comme argument
// Obtenez ClientID et ClientSecret à partir de https://dashboard.aspose.cloud/
String clientId = "7ef10407-c1b7-43bd-9603-5ea9c6db83cd";
String clientSecret = "ba7cc4dc0c0478d7b508dd8ffa029845";

// créer un objet d'imagerie
ImagingApi imageApi = new ImagingApi(clientSecret, clientId);

File directory = new File("/Users/");
//Obtenez tous les fichiers du dossier
File[] allFiles = directory.listFiles();
if (allFiles == null || allFiles.length == 0) {
    throw new RuntimeException("No files present in the directory: " + directory.getAbsolutePath());
}
			 
//Définissez ici les extensions d'image requises.
List<String> supportedImageExtensions = Arrays.asList("jpg", "png", "gif", "webp");
			 
int counter =0;
//Filtrer uniquement les fichiers image
List<File> acceptedImages = new ArrayList<>();
for (File file : allFiles) {
    //Analyser l'extension de fichier
    String fileExtension = file.getName().substring(file.getName().lastIndexOf(".") + 1);
    //Vérifiez si l'extension est répertoriée dans les extensions d'image prises en charge
    if (supportedImageExtensions.stream().anyMatch(fileExtension::equalsIgnoreCase)) {
        //Ajouter l'image à la liste filtrée
        acceptedImages.add(file);
			    
    // charger la première présentation PowerPoint
    byte[] bytes = Files.readAllBytes(file.toPath());
	
    // créer une demande de téléchargement de fichier
    UploadFileRequest request = new UploadFileRequest(acceptedImages.get(counter).getName(),bytes,null);
    // télécharger le fichier image sur le stockage en nuage
    imageApi.uploadFile(request);
    // augmenter le compteur de fichiers
    counter+=1;
    }
}

Créer un contexte de recherche

  • Nous devons d’abord spécifier l’algorithme de détection de caractéristiques comme akaze
  • Deuxièmement, spécifiez l’algorithme pour la correspondance des fonctionnalités en tant que randomBinaryTree
  • Troisièmement, créez une demande de recherche d’image à l’aide de l’objet CreateImageSearchRequest
  • Créez maintenant le statut de création de contexte de recherche via la méthode createImageSearch(…)
// spécifier l'algorithme pour la détection des caractéristiques
String detector = "akaze";
// spécifier l'algorithme pour la correspondance des caractéristiques
String matchingAlgorithm = "randomBinaryTree";

String folder = null; // File will be saved at the root of the storage
String storage = null; // We are using default Cloud Storage

// Créer une demande de recherche d'images
CreateImageSearchRequest createSearchContextRequest = new CreateImageSearchRequest(detector,matchingAlgorithm, folder, storage);
// créer un statut de contexte de recherche 
SearchContextStatus status = imageApi.createImageSearch(createSearchContextRequest);
			  
// obtenir l'ID de statut du contexte de recherche
String searchContextId = status.getId();

Extraire les fonctionnalités de l’image

Il est maintenant temps d’extraire les fonctionnalités des images et de les ajouter au contexte de recherche.

// Extrayez les fonctionnalités des images et ajoutez-les au contexte de recherche
for (File file : allFiles) 
{
    CreateImageFeaturesRequest request = new CreateImageFeaturesRequest(searchContextId, null, null, "internal", null,null);
		imageApi.createImageFeatures(request);
}

Trouver des images en double

  • Spécifier la valeur du seuil de similarité
  • Deuxièmement, créez un jeu d’images en double à l’aide de l’objet ImageDuplicatesSet
  • Parcourez maintenant la liste des images en double et recherchez la similarité des images à l’aide de la méthode getSimilarity(…)
// spécifier la valeur du seuil de similarité
Double similarityThreshold = 90.0;
			    
// créer un jeu d'images en double
ImageDuplicatesSet result = imageApi.findImageDuplicates(
    new FindImageDuplicatesRequest(status.getId(), similarityThreshold, folder, storage));

// imprimer le nombre d'images en double
System.out.println("Duplicates Set Count: " + result.getDuplicates().size());
for (ImageDuplicates duplicates : result.getDuplicates())
{
    System.out.println("Duplicates:");
		for (SearchResult duplicate : duplicates.getDuplicateImages())
		{
		    System.out.println("ImageName: " + duplicate.getImageId() +
			      ", Similarity: " + duplicate.getSimilarity());
    }
}

Trouver une photo en double à l’aide des commandes cURL

Dans cette section, nous allons tirer parti de l’utilisation des commandes cURL pour accéder aux API REST via le terminal de ligne de commande. Maintenant, comme condition préalable, nous devons d’abord générer un jeton d’accès JWT (basé sur les informations d’identification du client) lors de l’exécution de la commande suivante.

curl -v "https://api.aspose.cloud/connect/token" \
-X POST \
-d "grant_type=client_credentials&client_id=bb959721-5780-4be6-be35-ff5c3a6aa4a2&client_secret=4d84d5f6584160cbd91dba1fe145db14" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Accept: application/json"

Cette étape s’attend à ce que toutes les images soient téléchargées sur le stockage en nuage et nous devons maintenant créer un ID de contexte de recherche via l’appel d’API CreateImageSearch. Veuillez exécuter la commande suivante

curl -v -X POST "https://api.aspose.cloud/v3.0/imaging/ai/imageSearch/create?detector=akaze&matchingAlgorithm=randomBinaryTree" \
-H  "accept: application/json" \
-H  "authorization: Bearer <JWT Token>"

Corps de la réponse

{
  "id": "0b9ac539-07fb-462a-91cb-8a8d5069ba4d",
  "searchStatus": "Idle"
}

Veuillez exécuter la commande suivante pour rechercher les doublons d’image à l’aide de l’appel d’API FindImageDuplicates. Dans la commande suivante, l’ID de contexte de recherche généré ci-dessus est utilisé.

curl -v -X GET "https://api.aspose.cloud/v3.0/imaging/ai/imageSearch/da150333-57b4-4371-b13d-4889578ce2bd/findDuplicates?similarityThreshold=90" \
-H  "accept: application/json" \
-H  "authorization: Bearer <JWT Token>"

Conclusion

Dans cet article, nous avons appris les détails sur la façon de trouver des images en double à l’aide de Java Cloud SDK. De même, nous avons appris comment les commandes cURL peuvent servir de recherche d’images en double. Si vous avez besoin d’essayer ces API dans un navigateur, veuillez essayer d’utiliser la référence de l’API swagger. De même, nous vous recommandons vivement d’explorer Documentation du produit pour découvrir d’autres fonctionnalités intéressantes offertes par cette API. Veuillez également noter que tous nos SDK Cloud sont publiés sous licence MIT, vous pouvez donc envisager de télécharger le code source complet à partir de GitHub et de le modifier selon vos besoins. En cas de problème, vous pouvez envisager de nous contacter pour une résolution rapide via le [forum de support produit] gratuit 9.

Articles Liés

Veuillez visiter les liens suivants pour en savoir plus sur :