kuvan kaksoiskappale

Etsi päällekkäisiä kuvia Java Cloud SDK:n avulla

Aivomme omistautuvat visuaaliselle prosessoinnille ja rakkautemme kuviin perustuu kognitioon ja kykyymme kiinnittää huomiota. Kuvat pystyvät kiinnittämään huomiomme helposti ja monet laitteet, kuten matkapuhelimet, digikamerat, skannerit jne., tuottavat suuren määrän kuvia. Lisäksi kuvilla on erilaiset pakkausalgoritmit ja rasterikuvat ovat hyvin yleisiä niiden joukossa, koska ne kuluttavat vähemmän tallennustilaa. Mutta silti ajan myötä päädymme luomaan päällekkäisiä kuvia, ylimääräisiä kuvia jne. Meillä on lukuisia sovelluksia, jotka tarjoavat kyvyt löytää päällekkäisiä kuvia, mukaan lukien kaksoiskuvahaku. Jos sinulla on kuvia, jotka on tallennettu Google-kuviin, voit kokeilla Google Photo Duplicate Finder -sovellusta, asentaa kaksoisvalokuvahaku Windows 10:n tai kopioida valokuvahakua Maciin (käyttöjärjestelmästäsi riippuen). Tässä artikkelissa aiomme kuitenkin valaista kuinka kehittää mahtava kopiokuvahaku REST API:lla, jota voidaan käyttää millä tahansa alustalla.

Image Processing API

Kuvankäsittelyyn on saatavilla useita sovelluksia, jotka tarjoavat ominaisuuksia kuvatiedostojen luomiseen, muokkaamiseen ja käsittelyyn. Ne tarjoavat myös ominaisuuksia, kuten kuvahaun, joka perustuu käänteiseen kuvahakutekniikkaan tai mihin tahansa muuhun algoritmiin. Jos olet kuitenkin kiinnostunut REST API -pohjaisesta ohjelmallisesta ratkaisusta, joka perustuu käänteiseen kuvahakuun, Aspose.Imaging Cloud on varma valinta. Sen tehokas hakukone auttaa kehittäjiä lisäämään käänteisen kuvahaun ominaisuuksia sovellukseensa saumattomasti millä tahansa alustalla. Voit jopa aloittaa kuvien vertailun löytääksesi kuvan kaksoiskappaleen useiden muiden kuvien joukosta. Tämän toiminnon tuloksena saat luettelon eniten samankaltaisista kuvista seuraavien ehtojen mukaisesti:

  • Samankaltaisuuden aste
  • Minimaalinen samankaltaisuuden kynnys
  • Vertailualgoritmi

Jotta Java-sovelluksessa olisi samanlaisia kuvankäsittely- ja kopiointiominaisuuksia, meidän on käytettävä Aspose.Imaging Cloud SDK:ta Javalle, koska se on Cloud API -sovellusliittymä. Joten seuraava askel on lisätä sen viite Java-projektiin sisällyttämällä seuraavat tiedot maven build -tyyppisen projektin pom.xml-tiedostoon.

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

Jos et ole luonut tiliä Aspose Cloud Dashboardin kautta, voit rekisteröityä ilmaiseen kokeilujaksoon kelvollisen sähköpostiosoitteen kautta. Kirjaudu nyt sisään äskettäin luodulla tilillä ja etsi/luo asiakastunnus ja asiakassalaisuus Cloud Dashboardissa. Näitä tietoja tarvitaan todennustarkoituksiin seuraavissa osissa.

Etsi päällekkäisiä kuvia Javalla

Käänteinen kuvahaku on tekniikka, jonka avulla voit etsiä visuaalisesti samankaltaisia kuvia esimerkkikuvasi perusteella. Alla on tämän ominaisuuden yleisimmät käyttötapaukset:

Etsi kopiokuva ja poista kaksoiskappaleet Etsi samankaltaisia kuvia Etsi sopimatonta sisältöä Etsi digitaalisesti allekirjoitettuja kuvia

Sovellusliittymämme tukee tällä hetkellä sisältöpohjaista kuvahakua, kaksoiskuvahakua, kuvahakua mukautettujen rekisteröityjen tunnisteiden perusteella, kuvien vertailua ja samankaltaisuuden havaitsemista sekä kuvaominaisuuksien poimintatoimintoja. Nyt tässä osiossa aiomme keskustella yksityiskohdista kuinka löytää päällekkäisiä kuvia käyttämällä käänteiskuvatekniikkaa. Nyt tämän vaatimuksen täyttämiseksi käytämme esimerkissä AKAZE-algoritmia ominaisuuksien havaitsemiseen ja RandomBinaryTree-algoritmia ominaisuuksien yhteensovittamiseen. Etsimme päällekkäiset kuvat seuraavasti:

  • Lataa kuvia pilvitallennustilaan
  • Luo hakukonteksti
  • Poimi kuvan ominaisuudet
  • Etsi päällekkäisiä kuvia

Lataa kuvia pilvitallennustilaan

Lataa kuvatiedostot paikalliselta asemalta pilvitallennustilaan käyttämällä seuraavaa koodinpätkää

  • Luo ensin ImagingApi-objekti ja anna ClientID ja Client
  • Toiseksi lue kaikki kuvatiedostot määritetystä hakemistosta
  • Suodata vain kuvatiedostoja ja lisää ne suodatettuun luetteloon
  • Lataa kuvat pilvitallennustilaan käyttämällä uploadFile(…) -menetelmää samalla kun käytät UploadFileRequest-objektia argumenttina
// Hanki ClientID ja ClientSecret osoitteesta https://dashboard.aspose.cloud/
String clientId = "7ef10407-c1b7-43bd-9603-5ea9c6db83cd";
String clientSecret = "ba7cc4dc0c0478d7b508dd8ffa029845";

// luoda kuvantamisobjektia
ImagingApi imageApi = new ImagingApi(clientSecret, clientId);

File directory = new File("/Users/");
//Hae kaikki tiedostot kansiosta
File[] allFiles = directory.listFiles();
if (allFiles == null || allFiles.length == 0) {
    throw new RuntimeException("No files present in the directory: " + directory.getAbsolutePath());
}
			 
//Aseta tarvittavat kuvalaajennukset tästä.
List<String> supportedImageExtensions = Arrays.asList("jpg", "png", "gif", "webp");
			 
int counter =0;
//Suodata pois vain kuvatiedostot
List<File> acceptedImages = new ArrayList<>();
for (File file : allFiles) {
    //Jäsennä tiedostopääte
    String fileExtension = file.getName().substring(file.getName().lastIndexOf(".") + 1);
    //Tarkista, onko laajennus lueteltu tuetuissaImageExtensions-luettelossa
    if (supportedImageExtensions.stream().anyMatch(fileExtension::equalsIgnoreCase)) {
        //Lisää kuva suodatettuun luetteloon
        acceptedImages.add(file);
			    
    // lataa ensimmäinen PowerPoint-esitys
    byte[] bytes = Files.readAllBytes(file.toPath());
	
    // luoda tiedoston latauspyyntö
    UploadFileRequest request = new UploadFileRequest(acceptedImages.get(counter).getName(),bytes,null);
    // lataa kuvatiedosto pilvitallennustilaan
    imageApi.uploadFile(request);
    // lisää tiedostolaskuria
    counter+=1;
    }
}

Luo hakukonteksti

  • Ensin meidän on määritettävä ominaisuuden tunnistusalgoritmi akaze
  • Toiseksi, määritä ominaisuussovituksen algoritmi randomBinaryTree
  • Kolmanneksi luo Image Search Request käyttämällä CreateImageSearchRequest-objektia
  • Luo nyt hakukontekstin luontitila createImageSearch(…) -menetelmällä
// määritä ominaisuuksien havaitsemisen algoritmi
String detector = "akaze";
// määritä ominaisuussovitusalgoritmi
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

// Luo kuvahakupyyntö
CreateImageSearchRequest createSearchContextRequest = new CreateImageSearchRequest(detector,matchingAlgorithm, folder, storage);
// luo hakukontekstin tila 
SearchContextStatus status = imageApi.createImageSearch(createSearchContextRequest);
			  
// hanki hakukontekstin tilatunnus
String searchContextId = status.getId();

Poimi kuvan ominaisuudet

Nyt on aika poimia kuvien ominaisuuksia ja lisätä ne hakukontekstiin.

// Pura kuvien ominaisuuksia ja lisää ne hakukontekstiin
for (File file : allFiles) 
{
    CreateImageFeaturesRequest request = new CreateImageFeaturesRequest(searchContextId, null, null, "internal", null,null);
		imageApi.createImageFeatures(request);
}

Etsi päällekkäisiä kuvia

  • Määritä samankaltaisuuden kynnysarvo
  • Toiseksi luo kaksoiskuvasarja ImageDuplicatesSet-objektin avulla
  • Toista nyt päällekkäisten kuvien luetteloa ja etsi kuvien samankaltaisuus käyttämällä getSimilarity(…) -menetelmää
// määritä samankaltaisuuden kynnysarvo
Double similarityThreshold = 90.0;
			    
// luoda kaksoiskuvasarja
ImageDuplicatesSet result = imageApi.findImageDuplicates(
    new FindImageDuplicatesRequest(status.getId(), similarityThreshold, folder, storage));

// tulostaa kopioidut kuvat
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());
    }
}

Etsi Photo Duplicate cURL-komentojen avulla

Tässä osassa hyödynnämme cURL-komentojen käyttöä REST-sovellusliittymien käyttämiseen komentorivipäätteen kautta. Nyt ennakkoedellytyksenä meidän on ensin luotava JWT-käyttöoikeustunnus (perustuu asiakkaan tunnistetietoihin) samalla kun suoritamme seuraavan komennon.

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"

Tässä vaiheessa odotetaan, että kaikki kuvat ladataan pilvitallennustilaan, ja nyt meidän on luotava hakukontekstitunnus CreateImageSearch API -kutsulla. Ole hyvä ja suorita seuraava komento

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

Vastausrunko

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

Suorita seuraava komento löytääksesi kuvan kaksoiskappaleet FindImageDuplicates API -kutsulla. Seuraavassa komennossa käytetään yllä luotua hakukontekstin tunnusta.

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

Johtopäätös

Tässä artikkelissa olemme oppineet yksityiskohdista, kuinka löytää päällekkäisiä kuvia Java Cloud SDK:n avulla. Samalla tavalla olemme oppineet, kuinka cURL-komennot voivat toimia kaksoiskuvan etsijänä. Jos sinun täytyy kokeilla näitä sovellusliittymiä selaimessa, yritä käyttää swagger API Reference. Samoin suosittelemme tutustumaan Tuotedokumentaatioon saadaksesi tietoa muista tämän API:n tarjoamista jännittävistä ominaisuuksista. Huomaa myös, että kaikki Cloud SDK:t on julkaistu MIT-lisenssillä, joten voit ladata täydellisen lähdekoodin GitHubista ja muokata sitä tarpeidesi mukaan. Jos sinulla on ongelmia, voit ottaa meihin yhteyttä saadaksesi nopean ratkaisun ilmaisen tuotetukifoorumin kautta.

Aiheeseen liittyvät artikkelit

Saat lisätietoja seuraavista linkeistä: