foto duplicata

Trova immagini duplicate utilizzando Java Cloud SDK

Il nostro cervello si dedica all’elaborazione visiva e il nostro amore per le immagini risiede nella nostra cognizione e capacità di prestare attenzione. Le immagini sono in grado di catturare facilmente la nostra attenzione e molti dispositivi tra cui cellulari, fotocamere digitali, scanner ecc. producono una grande quantità di immagini. Inoltre, le immagini hanno diversi algoritmi di compressione e le immagini raster sono molto comuni tra loro perché consumano meno spazio di archiviazione. Tuttavia, con il passare del tempo, finiamo per creare foto duplicate, immagini ridondanti, ecc. Abbiamo una miriade di applicazioni che offrono la possibilità di trovare immagini duplicate, incluso il cercatore di immagini duplicate. Nel caso in cui tu abbia immagini memorizzate in google foto, puoi provare a utilizzare google photo duplicate finder, installare duplicato photo finder windows 10 o duplicare photo finder mac (a seconda del tuo sistema operativo). Tuttavia, in questo articolo, faremo luce su come sviluppare un fantastico cercatore di foto duplicate utilizzando l’API REST che può essere utilizzato su qualsiasi piattaforma.

API di elaborazione delle immagini

Sono disponibili numerose applicazioni per l’elaborazione delle immagini che offrono le funzionalità per creare, modificare e manipolare file di immagini. Forniscono inoltre le funzionalità inclusa la ricerca di immagini basata su tecniche di ricerca di immagini inverse o qualsiasi altro algoritmo. Tuttavia, se sei interessato ad avere una soluzione programmatica basata su API REST basata sulla ricerca di immagini inversa, allora Aspose.Imaging Cloud è la scelta definitiva. Il suo potente motore di ricerca aiuta gli sviluppatori ad aggiungere senza problemi funzionalità di ricerca di immagini inverse nella loro applicazione su qualsiasi piattaforma. Puoi persino avviare l’operazione di confronto delle immagini per trovare la foto duplicata tra molte altre immagini. Come risultato di questa operazione, si ottiene l’elenco delle immagini più simili secondo le seguenti condizioni:

  • Grado di somiglianza
  • La soglia minima di somiglianza
  • Algoritmo di confronto

Ora, per avere un’elaborazione delle immagini simile e capacità di ricerca di immagini duplicate all’interno dell’applicazione Java, dobbiamo utilizzare Aspose.Imaging Cloud SDK per Java in quanto è un wrapper per l’API Cloud. Quindi il passaggio successivo consiste nell’aggiungere il suo riferimento nel progetto java includendo le seguenti informazioni in pom.xml del progetto di tipo build maven.

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

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

Ora, se non hai creato un account su Aspose Cloud Dashboard, puoi registrarti per una prova gratuita tramite un indirizzo email valido. Ora accedi utilizzando l’account appena creato e cerca/crea l’ID client e il segreto client su Cloud Dashboard. Questi dettagli sono richiesti per scopi di autenticazione nelle sezioni seguenti.

Trova immagini duplicate utilizzando Java

La ricerca inversa delle immagini è una tecnica che consente di cercare immagini visivamente simili in base all’immagine campione. Di seguito sono riportati i casi d’uso più comuni per questa funzione:

Cerca l’immagine duplicata e rimuovi i duplicati Cerca contenuti simili immagini Cerca contenuti inappropriati Cerca immagini firmate digitalmente

La nostra API attualmente supporta la ricerca di immagini basata sul contenuto, la ricerca di immagini duplicate, la ricerca di immagini tramite tag registrati personalizzati, il confronto di immagini e il rilevamento di somiglianze e le operazioni di estrazione delle caratteristiche delle immagini. Ora in questa sezione, discuteremo i dettagli su come trovare immagini duplicate utilizzando la tecnica dell’immagine inversa. Ora, per soddisfare questo requisito, utilizziamo l’algoritmo AKAZE per il rilevamento delle caratteristiche e l’algoritmo RandomBinaryTree per la corrispondenza delle caratteristiche nell’esempio. Seguiremo questi passaggi per trovare le immagini duplicate:

  • Carica immagini su Cloud Storage
  • Crea contesto di ricerca
  • Estrarre le caratteristiche dell’immagine
  • Trova immagini duplicate

Carica immagini su Cloud Storage

Utilizza il seguente frammento di codice per caricare i file immagine dall’unità locale all’archivio cloud

  • Innanzitutto, crea un oggetto di ImagingApi fornendo ClientID e Client
  • In secondo luogo, leggi tutti i file immagine dalla directory specificata
  • Filtra solo i file immagine e aggiungili all’elenco filtrato
  • Carica le immagini nell’archivio cloud utilizzando il metodo uploadFile(…) prendendo l’oggetto UploadFileRequest come argomento
// Ottieni ClientID e ClientSecret da https://dashboard.aspose.cloud/
String clientId = "7ef10407-c1b7-43bd-9603-5ea9c6db83cd";
String clientSecret = "ba7cc4dc0c0478d7b508dd8ffa029845";

// creare un oggetto Imaging
ImagingApi imageApi = new ImagingApi(clientSecret, clientId);

File directory = new File("/Users/");
//Ottieni tutti i file dalla cartella
File[] allFiles = directory.listFiles();
if (allFiles == null || allFiles.length == 0) {
    throw new RuntimeException("No files present in the directory: " + directory.getAbsolutePath());
}
			 
//Imposta qui le estensioni immagine richieste.
List<String> supportedImageExtensions = Arrays.asList("jpg", "png", "gif", "webp");
			 
int counter =0;
//Filtra solo i file immagine
List<File> acceptedImages = new ArrayList<>();
for (File file : allFiles) {
    //Analizza l'estensione del file
    String fileExtension = file.getName().substring(file.getName().lastIndexOf(".") + 1);
    //Controlla se l'estensione è elencata in supportedImageExtensions
    if (supportedImageExtensions.stream().anyMatch(fileExtension::equalsIgnoreCase)) {
        //Aggiungi l'immagine all'elenco filtrato
        acceptedImages.add(file);
			    
    // carica la prima presentazione di PowerPoint
    byte[] bytes = Files.readAllBytes(file.toPath());
	
    // creare richiesta di caricamento file
    UploadFileRequest request = new UploadFileRequest(acceptedImages.get(counter).getName(),bytes,null);
    // caricare il file immagine nell'archivio cloud
    imageApi.uploadFile(request);
    // aumentare il contatore di file
    counter+=1;
    }
}

Crea contesto di ricerca

  • Per prima cosa dobbiamo specificare l’algoritmo di rilevamento delle caratteristiche come akaze
  • In secondo luogo, specifica l’algoritmo per la corrispondenza delle caratteristiche come randomBinaryTree
  • In terzo luogo, crea una richiesta di ricerca di immagini utilizzando l’oggetto CreateImageSearchRequest
  • Ora crea crea lo stato del contesto di ricerca tramite il metodo createImageSearch(…).
// specificare l'algoritmo per il rilevamento delle caratteristiche
String detector = "akaze";
// specificare l'algoritmo per la corrispondenza delle caratteristiche
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

// Crea richiesta di ricerca immagini
CreateImageSearchRequest createSearchContextRequest = new CreateImageSearchRequest(detector,matchingAlgorithm, folder, storage);
// creare lo stato del contesto di ricerca 
SearchContextStatus status = imageApi.createImageSearch(createSearchContextRequest);
			  
// ottenere l'ID di stato del contesto di ricerca
String searchContextId = status.getId();

Estrarre le caratteristiche dell’immagine

Ora è il momento di estrarre le caratteristiche delle immagini e aggiungerle al contesto di ricerca.

// Estrai le funzionalità delle immagini e aggiungile al contesto di ricerca
for (File file : allFiles) 
{
    CreateImageFeaturesRequest request = new CreateImageFeaturesRequest(searchContextId, null, null, "internal", null,null);
		imageApi.createImageFeatures(request);
}

Trova immagini duplicate

  • Specificare il valore della soglia di somiglianza
  • In secondo luogo, crea un set di immagini duplicato utilizzando l’oggetto ImageDuplicatesSet
  • Ora scorri l’elenco delle immagini duplicate e trova la somiglianza dell’immagine usando il metodo getSimilarity(…).
// specificare il valore soglia di somiglianza
Double similarityThreshold = 90.0;
			    
// crea un set di immagini duplicato
ImageDuplicatesSet result = imageApi.findImageDuplicates(
    new FindImageDuplicatesRequest(status.getId(), similarityThreshold, folder, storage));

// stampa il conteggio delle immagini duplicate
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());
    }
}

Trova il duplicato di foto utilizzando i comandi cURL

In questa sezione, sfrutteremo l’utilizzo dei comandi cURL per accedere alle API REST tramite il terminale della riga di comando. Ora, come prerequisito, dobbiamo prima generare un token di accesso JWT (basato sulle credenziali del client) durante l’esecuzione del seguente comando.

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"

Questo passaggio prevede che tutte le immagini vengano caricate nell’archivio cloud e ora è necessario creare l’ID del contesto di ricerca tramite la chiamata API CreateImageSearch. Si prega di eseguire il seguente comando

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>"

Corpo di risposta

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

Eseguire il seguente comando per trovare i duplicati di immagine utilizzando la chiamata API FindImageDuplicates. Nel seguente comando, viene utilizzato l’ID del contesto di ricerca generato in precedenza.

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>"

Conclusione

In questo articolo, abbiamo appreso i dettagli su come trovare immagini duplicate utilizzando Java Cloud SDK. Allo stesso modo, abbiamo imparato come i comandi cURL possono fungere da cercatore di immagini duplicate. Nel caso in cui sia necessario provare queste API all’interno del browser, provare a utilizzare Swagger API Reference. Allo stesso modo, consigliamo vivamente di esplorare la documentazione del prodotto per apprendere altre interessanti funzionalità offerte da questa API. Inoltre, tieni presente che tutti i nostri Cloud SDK sono pubblicati con licenza MIT, quindi potresti considerare di scaricare il codice sorgente completo da GitHub e modificarlo in base alle tue esigenze. In caso di problemi, puoi considerare di contattarci per una rapida risoluzione tramite il forum di supporto del prodotto gratuito.

articoli Correlati

Si prega di visitare i seguenti link per saperne di più su: