foto duplikat

Find dublerede billeder ved hjælp af Java Cloud SDK

Vores hjerne dedikerer sig til visuel behandling, og vores kærlighed til billeder ligger i vores erkendelse og evne til at være opmærksom. Billederne er i stand til nemt at fange vores opmærksomhed, og mange enheder, herunder mobiltelefoner, digitale kameraer, scannere osv. producerer en stor mængde billeder. Yderligere har billeder forskellige komprimeringsalgoritmer, og rasterbilleder er meget almindelige blandt dem, fordi de bruger mindre lagerplads. Men stadigvæk ender vi med tiden med at skabe duplikerede billeder, overflødige billeder osv. Vi har et væld af applikationer, der tilbyder mulighederne for at finde duplikerede billeder, herunder duplikerede billedfinder. Hvis du har billeder gemt i Google Photos, kan du prøve at bruge Google Photo Duplicate Finder, installere duplicate Photo Finder Windows 10 eller Duplicate Photo Finder mac (afhængigt af dit operativsystem). Men i denne artikel vil vi kaste lys over, hvordan man udvikler en fantastisk duplikatfotofinder ved hjælp af REST API, som kan bruges på enhver platform.

Billedbehandling API

En række applikationer er tilgængelige til billedbehandling, der tilbyder funktionerne til at oprette, redigere og manipulere billedfiler. De giver også mulighederne, herunder billedsøgning baseret på omvendt billedsøgningsteknikker eller enhver anden algoritme. Men hvis du er interesseret i at have REST API baseret programmatisk løsning baseret på omvendt billedsøgning, så er Aspose.Imaging Cloud det klare valg. Dens kraftfulde søgemaskine hjælper udviklere med at tilføje funktioner til omvendt billedsøgning i deres applikation på enhver platform problemfrit. Du kan endda starte billedsammenligning for at finde fotoduplikat blandt flere andre billeder. Som et resultat af denne handling får du listen over de fleste lignende billeder i overensstemmelse med følgende betingelser:

  • Grad af lighed
  • Den minimale tærskel for lighed
  • Algorithme for sammenligning

For nu at have lignende billedbehandlings- og duplikatbilledfinderfunktioner i Java-applikationen, skal vi bruge Aspose.Imaging Cloud SDK for Java, da det er en indpakning omkring Cloud API. Så det næste trin er at tilføje dens reference i java-projektet ved at inkludere følgende oplysninger i pom.xml af 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>

Hvis du nu ikke har oprettet en konto over Aspose Cloud Dashboard, kan du tilmelde dig en gratis prøveperiode via en gyldig e-mailadresse. Log nu på med en nyoprettet konto, og find/opret klient-id og klienthemmelighed på Cloud Dashboard. Disse oplysninger er nødvendige for godkendelsesformål i de følgende afsnit.

Find dublerede billeder ved hjælp af Java

Omvendt billedsøgning er en teknik, der hjælper dig med at søge visuelt lignende billeder baseret på dit eksempelbillede. Nedenfor er de mest almindelige brugstilfælde for denne funktion:

Søg efter duplikatbillede og fjern dubletterne Søg efter indhold lignende billeder Søg efter upassende indhold Søg efter digitalt signerede billeder

Vores API understøtter i øjeblikket indholdsbaseret billedsøgning, duplikatbilledsøgning, billedsøgning ved hjælp af tilpassede registrerede tags, billedsammenligning og lighedsdetektion og billedfunktionsudtrækningsoperationer. Nu i dette afsnit skal vi diskutere detaljerne om, hvordan man finder duplikerede billeder ved hjælp af omvendt billedteknik. For nu at opfylde dette krav bruger vi AKAZE-algoritmen til funktionsdetektion og RandomBinaryTree-algoritmen til funktionsmatchning i eksemplet. Vi følger disse trin for at finde de duplikerede billeder:

  • Upload billeder til Cloud Storage
  • Opret søgekontekst
  • Uddrag billedfunktioner
  • Find dublerede billeder

Upload billeder til Cloud Storage

Brug venligst følgende kodestykke til at uploade billedfiler fra lokalt drev til skylager

  • For det første skal du oprette et objekt af ImagingApi, mens du giver ClientID og Client
  • For det andet skal du læse alle billedfiler fra den angivne mappe
  • Filtrer kun billedfiler og føj dem til den filtrerede liste
  • Upload billederne til skylageret ved hjælp af uploadFile(…)-metoden, mens du tager UploadFileRequest-objektet som argument
// Hent ClientID og ClientSecret fra https://dashboard.aspose.cloud/
String clientId = "7ef10407-c1b7-43bd-9603-5ea9c6db83cd";
String clientSecret = "ba7cc4dc0c0478d7b508dd8ffa029845";

// oprette billedobjekt
ImagingApi imageApi = new ImagingApi(clientSecret, clientId);

File directory = new File("/Users/");
//Hent alle filerne fra mappen
File[] allFiles = directory.listFiles();
if (allFiles == null || allFiles.length == 0) {
    throw new RuntimeException("No files present in the directory: " + directory.getAbsolutePath());
}
			 
//Indstil de nødvendige billedudvidelser her.
List<String> supportedImageExtensions = Arrays.asList("jpg", "png", "gif", "webp");
			 
int counter =0;
//Filtrer kun billedfiler fra
List<File> acceptedImages = new ArrayList<>();
for (File file : allFiles) {
    //Parse filtypenavnet
    String fileExtension = file.getName().substring(file.getName().lastIndexOf(".") + 1);
    //Tjek, om udvidelsen er angivet i de understøttede billedudvidelser
    if (supportedImageExtensions.stream().anyMatch(fileExtension::equalsIgnoreCase)) {
        //Tilføj billedet til den filtrerede liste
        acceptedImages.add(file);
			    
    // indlæs den første PowerPoint-præsentation
    byte[] bytes = Files.readAllBytes(file.toPath());
	
    // oprette fil upload anmodning
    UploadFileRequest request = new UploadFileRequest(acceptedImages.get(counter).getName(),bytes,null);
    // upload billedfil til skylager
    imageApi.uploadFile(request);
    // øge filtælleren
    counter+=1;
    }
}

Opret søgekontekst

  • Først skal vi specificere funktionsdetektionsalgoritmen som akaze
  • For det andet, specificer algoritme for funktionsmatching som randomBinaryTree
  • For det tredje skal du oprette billedsøgningsanmodning ved hjælp af CreateImageSearchRequest-objektet
  • Opret nu oprette søgekontekststatus ved hjælp af metoden createImageSearch(…).
// angiv algoritme for funktionsdetektion
String detector = "akaze";
// angiv algoritme for funktionsmatchning
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

// Opret billedsøgningsanmodning
CreateImageSearchRequest createSearchContextRequest = new CreateImageSearchRequest(detector,matchingAlgorithm, folder, storage);
// oprette søgekontekststatus 
SearchContextStatus status = imageApi.createImageSearch(createSearchContextRequest);
			  
// få status-id for søgekontekst
String searchContextId = status.getId();

Uddrag billedfunktioner

Nu er det tid til at udtrække billedfunktioner og tilføje dem til søgekonteksten.

// Udpak billedfunktioner og føj dem til søgekontekst
for (File file : allFiles) 
{
    CreateImageFeaturesRequest request = new CreateImageFeaturesRequest(searchContextId, null, null, "internal", null,null);
		imageApi.createImageFeatures(request);
}

Find dublerede billeder

  • Angiv lighedstærskelværdi
  • For det andet skal du oprette duplikatbilledsæt ved hjælp af ImageDuplicatesSet-objekt
  • Gentag nu listen over duplikerede billeder og find billedlighed ved hjælp af getSimilarity(…) metoden
// angiv lighedstærskelværdi
Double similarityThreshold = 90.0;
			    
// oprette duplikatbilledsæt
ImageDuplicatesSet result = imageApi.findImageDuplicates(
    new FindImageDuplicatesRequest(status.getId(), similarityThreshold, folder, storage));

// udskrive antallet af dubletbilleder
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());
    }
}

Find fotoduplikat ved hjælp af cURL-kommandoer

I dette afsnit vil vi bruge cURL-kommandoer til at få adgang til REST API’er over kommandolinjeterminalen. Nu som en forudsætning skal vi først generere et JWT-adgangstoken (baseret på klientoplysninger), mens vi udfører følgende kommando.

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"

Dette trin forventer, at alle billeder uploades til cloud storage, og nu skal vi oprette søgekontekst-id gennem CreateImageSearch API-kald. Udfør venligst følgende kommando

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

Reaktionsorgan

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

Udfør venligst følgende kommando for at finde billedduplikater ved hjælp af FindImageDuplicates API-kald. I følgende kommando bruges søgekontekst-id’et genereret ovenfor.

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

Konklusion

I denne artikel har vi lært om detaljerne om, hvordan du finder duplikerede billeder ved hjælp af Java Cloud SDK. På samme måde har vi lært, hvordan cURL-kommandoer kan tjene som en duplikatbilledfinder. Hvis du har brug for at prøve disse API’er i browseren, så prøv venligst at bruge swagger API Reference. På samme måde anbefaler vi stærkt, at du udforsker Produktdokumentation for at lære andre spændende funktioner, der tilbydes af denne API. Bemærk også, at alle vores Cloud SDK’er er udgivet under MIT-licens, så du kan overveje at downloade den komplette kildekode fra GitHub og ændre den i henhold til dine krav. I tilfælde af problemer, kan du overveje at kontakte os for en hurtig løsning via gratis produktsupportforum.

relaterede artikler

Besøg venligst følgende links for at lære mere om: