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
- Zoek dubbele afbeeldingen met Java
- Zoek fotoduplicaat met behulp van cURL-opdrachten
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>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>
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: