foto duplicaat

Zoek dubbele afbeeldingen met Java Cloud SDK

Ons brein wijdt zich aan visuele verwerking en onze liefde voor beelden ligt bij onze cognitie en het vermogen om op te letten. De afbeeldingen kunnen gemakkelijk onze aandacht trekken en veel apparaten, waaronder mobiele telefoons, digitale camera’s, scanners enz., produceren een grote hoeveelheid afbeeldingen. Verder hebben afbeeldingen verschillende compressie-algoritmen en zijn rasterafbeeldingen heel gebruikelijk omdat ze minder opslagruimte innemen. Maar toch, met het verstrijken van de tijd maken we uiteindelijk dubbele foto’s, overbodige afbeeldingen enz. We hebben een overvloed aan applicaties die de mogelijkheid bieden om dubbele afbeeldingen te vinden, inclusief dubbele fotozoeker. Als u afbeeldingen hebt opgeslagen in Google Foto’s, kunt u proberen Google Photo Duplicate Finder te gebruiken, Duplicate Photo Finder Windows 10 of Duplicate Photo Finder Mac te installeren (afhankelijk van uw besturingssysteem). In dit artikel gaan we echter licht werpen op het ontwikkelen van een geweldige dubbele fotozoeker met behulp van REST API die op elk platform kan worden gebruikt.

API voor beeldverwerking

Er is een verscheidenheid aan toepassingen beschikbaar voor beeldverwerking die functies bieden voor het maken, bewerken en manipuleren van beeldbestanden. Ze bieden ook de mogelijkheden, waaronder zoeken naar afbeeldingen op basis van omgekeerde zoektechnieken voor afbeeldingen of een ander algoritme. Als u echter geïnteresseerd bent in een op REST API gebaseerde programmatische oplossing op basis van reverse image search, dan is Aspose.Imaging Cloud de definitieve keuze. De krachtige zoekmachine helpt ontwikkelaars om naadloos reverse image search-functies toe te voegen aan hun applicatie op elk platform. U kunt zelfs beginnen met het vergelijken van afbeeldingen om fotoduplicaten tussen verschillende andere afbeeldingen te vinden. Als resultaat van deze bewerking krijgt u de lijst met meest vergelijkbare afbeeldingen in overeenstemming met de volgende voorwaarden:

  • Mate van gelijkenis
  • De minimale drempel van gelijkenis
  • Algoritme van vergelijking

Om vergelijkbare beeldverwerking en dubbele beeldzoekermogelijkheden binnen de Java-applicatie te hebben, moeten we Aspose.Imaging Cloud SDK voor Java gebruiken, aangezien het een wrapper is rond Cloud API. Dus de volgende stap is om de referentie in het java-project toe te voegen door de volgende informatie op te nemen in pom.xml van het maven build-type project.

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

Als u geen account heeft gemaakt via Aspose Cloud Dashboard, kunt u zich via een geldig e-mailadres aanmelden voor een gratis proefversie. Log nu in met een nieuw aangemaakt account en zoek/maak Client ID en Client Secret op bij Cloud Dashboard. Deze details zijn vereist voor authenticatiedoeleinden in de volgende secties.

Zoek dubbele afbeeldingen met Java

Omgekeerd zoeken naar afbeeldingen is een techniek waarmee u visueel vergelijkbare afbeeldingen kunt zoeken op basis van uw voorbeeldafbeelding. Hieronder staan de meest voorkomende use cases voor deze functie:

Zoek naar een dubbele afbeelding en verwijder de duplicaten Zoek naar inhoud vergelijkbare afbeeldingen Zoek naar ongepaste inhoud Zoeken naar digitaal ondertekende afbeeldingen

Onze API ondersteunt momenteel op inhoud gebaseerd zoeken naar afbeeldingen, zoeken naar dubbele afbeeldingen, zoeken naar afbeeldingen door middel van aangepaste geregistreerde tags, vergelijken van afbeeldingen en detectie van overeenkomsten en het extraheren van afbeeldingskenmerken. In dit gedeelte gaan we de details bespreken over het vinden van dubbele afbeeldingen met behulp van de omgekeerde afbeeldingstechniek. Om aan deze vereiste te voldoen, gebruiken we het AKAZE-algoritme voor het detecteren van kenmerken en het RandomBinaryTree-algoritme voor het matchen van kenmerken in het voorbeeld. We volgen deze stappen om de dubbele afbeeldingen te vinden:

  • Upload afbeeldingen naar cloudopslag
  • Zoekcontext maken
  • Afbeeldingskenmerken extraheren
  • Zoek dubbele afbeeldingen

Upload afbeeldingen naar cloudopslag

Gebruik het volgende codefragment om afbeeldingsbestanden van de lokale schijf naar de cloudopslag te uploaden

  • Maak eerst een object van ImagingApi terwijl u ClientID en Client opgeeft
  • Ten tweede, lees alle afbeeldingsbestanden uit de opgegeven map
  • Filter alleen afbeeldingsbestanden en voeg ze toe aan de gefilterde lijst
  • Upload de afbeeldingen naar cloudopslag met behulp van de methode uploadFile(…) terwijl u het object UploadFileRequest als argument gebruikt
// Haal ClientID en ClientSecret op van https://dashboard.aspose.cloud/
String clientId = "7ef10407-c1b7-43bd-9603-5ea9c6db83cd";
String clientSecret = "ba7cc4dc0c0478d7b508dd8ffa029845";

// Imaging-object maken
ImagingApi imageApi = new ImagingApi(clientSecret, clientId);

File directory = new File("/Users/");
//Haal alle bestanden uit de map
File[] allFiles = directory.listFiles();
if (allFiles == null || allFiles.length == 0) {
    throw new RuntimeException("No files present in the directory: " + directory.getAbsolutePath());
}
			 
//Stel hier de gewenste beeldextensies in.
List<String> supportedImageExtensions = Arrays.asList("jpg", "png", "gif", "webp");
			 
int counter =0;
//Filter alleen afbeeldingsbestanden uit
List<File> acceptedImages = new ArrayList<>();
for (File file : allFiles) {
    //Parseer de bestandsextensie
    String fileExtension = file.getName().substring(file.getName().lastIndexOf(".") + 1);
    //Controleer of de extensie wordt vermeld in de ondersteundeImageExtensions
    if (supportedImageExtensions.stream().anyMatch(fileExtension::equalsIgnoreCase)) {
        //Voeg de afbeelding toe aan de gefilterde lijst
        acceptedImages.add(file);
			    
    // laad de eerste PowerPoint-presentatie
    byte[] bytes = Files.readAllBytes(file.toPath());
	
    // maak een verzoek om een bestand te uploaden
    UploadFileRequest request = new UploadFileRequest(acceptedImages.get(counter).getName(),bytes,null);
    // afbeeldingsbestand uploaden naar cloudopslag
    imageApi.uploadFile(request);
    // verhoog de bestandsteller
    counter+=1;
    }
}

Zoekcontext maken

  • Eerst moeten we het algoritme voor functiedetectie specificeren als akaze
  • Ten tweede specificeert u het algoritme voor het matchen van kenmerken als randomBinaryTree
  • Ten derde, maak Image Search Request met behulp van het CreateImageSearchRequest-object
  • Maak nu een zoekcontextstatus aan via de methode createImageSearch(…).
// specificeer het algoritme voor het detecteren van kenmerken
String detector = "akaze";
// specificeer het algoritme voor het matchen van kenmerken
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

// Maak een zoekverzoek voor afbeeldingen
CreateImageSearchRequest createSearchContextRequest = new CreateImageSearchRequest(detector,matchingAlgorithm, folder, storage);
// zoekcontextstatus maken 
SearchContextStatus status = imageApi.createImageSearch(createSearchContextRequest);
			  
// krijg Status-ID van zoekcontext
String searchContextId = status.getId();

Afbeeldingskenmerken extraheren

Nu is het tijd om afbeeldingskenmerken te extraheren en toe te voegen aan de zoekcontext.

// Extraheer afbeeldingen en voeg ze toe aan de zoekcontext
for (File file : allFiles) 
{
    CreateImageFeaturesRequest request = new CreateImageFeaturesRequest(searchContextId, null, null, "internal", null,null);
		imageApi.createImageFeatures(request);
}

Zoek dubbele afbeeldingen

  • Geef de gelijkheidsdrempelwaarde op
  • Maak ten tweede een dubbele afbeeldingsset met behulp van het ImageDuplicatesSet-object
  • Herhaal nu de lijst met dubbele afbeeldingen en vind afbeeldingsovereenkomst met behulp van de methode getSimilarity(…).
// specificeer de gelijkheidsdrempelwaarde
Double similarityThreshold = 90.0;
			    
// dubbele afbeeldingsset maken
ImageDuplicatesSet result = imageApi.findImageDuplicates(
    new FindImageDuplicatesRequest(status.getId(), similarityThreshold, folder, storage));

// druk het aantal dubbele afbeeldingen af
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());
    }
}

Zoek fotoduplicaat met behulp van cURL-opdrachten

In deze sectie gaan we gebruik maken van het gebruik van cURL-opdrachten om toegang te krijgen tot REST API’s via de opdrachtregelterminal. Nu moeten we als eerste vereiste eerst een JWT-toegangstoken genereren (op basis van clientreferenties) terwijl we de volgende opdracht uitvoeren.

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"

Deze stap verwacht dat alle afbeeldingen worden geüpload naar cloudopslag en nu moeten we een zoekcontext-ID maken via CreateImageSearch API-aanroep. Voer de volgende opdracht uit

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

Reactie lichaam

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

Voer de volgende opdracht uit om afbeeldingsduplicaten te vinden met behulp van FindImageDuplicates API-aanroep. In de volgende opdracht wordt de hierboven gegenereerde zoekcontext-ID gebruikt.

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

Conclusie

In dit artikel hebben we de details geleerd over het vinden van dubbele afbeeldingen met behulp van Java Cloud SDK. Evenzo hebben we geleerd hoe cURL-commando’s kunnen dienen als een dubbele afbeeldingzoeker. Als je deze API’s in de browser moet uitproberen, probeer dan de swagger API Reference. Evenzo raden we ten zeerste aan om Productdocumentatie te verkennen om meer te weten te komen over andere interessante functies die door deze API worden aangeboden. Houd er ook rekening mee dat al onze Cloud SDK’s worden gepubliceerd onder een MIT-licentie, dus u kunt overwegen de volledige broncode te downloaden van GitHub en deze naar wens aan te passen. In geval van problemen kunt u overwegen ons te benaderen voor een snelle oplossing via het gratis productondersteuningsforum.

gerelateerde artikelen

Bezoek de volgende links voor meer informatie over: