nuotraukos dublikatas

Raskite pasikartojančius vaizdus naudodami „Java Cloud SDK“.

Mūsų smegenys atsiduoda vizualiniam apdorojimui, o meilė vaizdams priklauso nuo mūsų pažinimo ir gebėjimo atkreipti dėmesį. Vaizdai gali lengvai patraukti mūsų dėmesį, o daugelis įrenginių, įskaitant mobiliuosius telefonus, skaitmeninius fotoaparatus, skaitytuvus ir kt., sukuria daug vaizdų. Be to, vaizdai turi skirtingus glaudinimo algoritmus, o rastriniai vaizdai yra labai paplitę tarp jų, nes jie užima mažiau vietos saugykloje. Tačiau vis tiek laikui bėgant sukuriame pasikartojančias nuotraukas, perteklinius vaizdus ir tt Turime daugybę programų, siūlančių galimybę rasti pasikartojančius vaizdus, įskaitant pasikartojančių nuotraukų ieškiklį. Jei turite vaizdų, saugomų „Google“ nuotraukose, galite pabandyti naudoti „Google“ nuotraukų dublikatų ieškiklį, įdiegti dublikatų nuotraukų ieškiklį „Windows 10“ arba dublikatų nuotraukų ieškiklį „Mac“ (atsižvelgiant į jūsų operacinę sistemą). Tačiau šiame straipsnyje mes paaiškinsime, kaip sukurti nuostabų pasikartojančių nuotraukų ieškiklį naudojant REST API, kurią galima naudoti bet kurioje platformoje.

Vaizdo apdorojimo API

Yra įvairių vaizdų apdorojimo programų, siūlančių vaizdų failų kūrimo, redagavimo ir manipuliavimo funkcijas. Jie taip pat suteikia galimybes, įskaitant vaizdų paiešką, pagrįstą atvirkštinės vaizdų paieškos metodais ar bet kokiu kitu algoritmu. Tačiau, jei norite turėti REST API pagrįstą programinį sprendimą, pagrįstą atvirkštine vaizdų paieška, tada Aspose.Imaging Cloud yra aiškus pasirinkimas. Jo galingas paieškos variklis padeda kūrėjams sklandžiai įtraukti atvirkštinės vaizdų paieškos funkcijas į savo programą bet kurioje platformoje. Jūs netgi galite pradėti vaizdų palyginimo operaciją, kad rastumėte nuotraukos dublikatą tarp kelių kitų vaizdų. Atlikę šią operaciją, gausite labiausiai panašių vaizdų sąrašą pagal šias sąlygas:

  • Panašumo laipsnis
  • Minimali panašumo riba
  • Palyginimo algoritmas

Kad „Java“ programoje būtų panašios vaizdo apdorojimo ir kopijų paieškos galimybės, turime naudoti Aspose.Imaging Cloud SDK for Java, nes tai apima debesies API. Taigi kitas žingsnis yra įtraukti jo nuorodą į „Java“ projektą įtraukiant šią informaciją į „maven build“ tipo projekto pom.xml.

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

Dabar, jei nesate sukūrę paskyros naudodami Aspose Cloud Dashboard, galite prisiregistruoti naudoti nemokamą bandomąją versiją naudodami galiojantį el. pašto adresą. Dabar prisijunkite naudodami naujai sukurtą paskyrą ir Cloud Dashboard ieškokite / sukurkite kliento ID ir kliento paslaptį. Ši informacija reikalinga autentifikavimo tikslais tolesniuose skyriuose.

Raskite pasikartojančius vaizdus naudodami „Java“.

Atvirkštinė vaizdų paieška yra metodas, padedantis ieškoti vizualiai panašių vaizdų pagal pavyzdinį vaizdą. Toliau pateikiami dažniausiai pasitaikantys šios funkcijos naudojimo atvejai:

Ieškokite pasikartojančio vaizdo ir pašalinkite dublikatus Ieškokite turinio panašių vaizdų Ieškokite netinkamo turinio Ieškokite skaitmeniniu būdu pasirašytų vaizdų

Šiuo metu mūsų API palaiko turiniu pagrįstą vaizdų paiešką, pasikartojančių vaizdų paiešką, vaizdų paiešką pagal pasirinktines registruotas žymas, vaizdų palyginimą ir panašumo aptikimą bei vaizdo funkcijų išgavimo operacijas. Dabar šiame skyriuje aptarsime, kaip rasti pasikartojančius vaizdus naudojant atvirkštinio vaizdo techniką. Dabar norėdami įvykdyti šį reikalavimą, pavyzdyje naudojame AKAZE algoritmą ypatybių aptikimui ir RandomBinaryTree algoritmą ypatybių atitikimui. Norėdami rasti pasikartojančius vaizdus, atliksime šiuos veiksmus:

  • Įkelkite vaizdus į debesies saugyklą
  • Sukurkite paieškos kontekstą
  • Ištraukite vaizdo funkcijas
  • Raskite pasikartojančius vaizdus

Įkelkite vaizdus į debesies saugyklą

Norėdami įkelti vaizdo failus iš vietinio disko į debesies saugyklą, naudokite šį kodo fragmentą

  • Pirmiausia sukurkite „ImagingApi“ objektą, pateikdami „ClientID“ ir „Client“.
  • Antra, perskaitykite visus vaizdo failus iš nurodyto katalogo
  • Filtruokite tik vaizdo failus ir pridėkite juos prie filtruojamo sąrašo
  • Įkelkite vaizdus į saugyklą debesyje naudodami UploadFile(…) metodą, kaip argumentą naudodami objektą UploadFileRequest
// Gaukite ClientID ir ClientSecret iš https://dashboard.aspose.cloud/
String clientId = "7ef10407-c1b7-43bd-9603-5ea9c6db83cd";
String clientSecret = "ba7cc4dc0c0478d7b508dd8ffa029845";

// sukurti vaizdo objektą
ImagingApi imageApi = new ImagingApi(clientSecret, clientId);

File directory = new File("/Users/");
//Gaukite visus failus iš aplanko
File[] allFiles = directory.listFiles();
if (allFiles == null || allFiles.length == 0) {
    throw new RuntimeException("No files present in the directory: " + directory.getAbsolutePath());
}
			 
//Čia nustatykite reikiamus vaizdo plėtinius.
List<String> supportedImageExtensions = Arrays.asList("jpg", "png", "gif", "webp");
			 
int counter =0;
//Filtruokite tik vaizdo failus
List<File> acceptedImages = new ArrayList<>();
for (File file : allFiles) {
    //Išanalizuoti failo plėtinį
    String fileExtension = file.getName().substring(file.getName().lastIndexOf(".") + 1);
    //Patikrinkite, ar plėtinys įtrauktas į palaikomų vaizdo plėtinių sąrašą
    if (supportedImageExtensions.stream().anyMatch(fileExtension::equalsIgnoreCase)) {
        //Pridėkite vaizdą į filtruotą sąrašą
        acceptedImages.add(file);
			    
    // įkelkite pirmąjį „PowerPoint“ pristatymą
    byte[] bytes = Files.readAllBytes(file.toPath());
	
    // sukurti failo įkėlimo užklausą
    UploadFileRequest request = new UploadFileRequest(acceptedImages.get(counter).getName(),bytes,null);
    // įkelti vaizdo failą į debesies saugyklą
    imageApi.uploadFile(request);
    // padidinti failų skaitiklį
    counter+=1;
    }
}

Sukurkite paieškos kontekstą

  • Pirmiausia turime nurodyti funkcijų aptikimo algoritmą kaip akaze
  • Antra, nurodykite funkcijų atitikimo algoritmą kaip randomBinaryTree
  • Trečia, sukurkite vaizdų paieškos užklausą naudodami objektą CreateImageSearchRequest
  • Dabar sukurkite paieškos konteksto būseną naudodami CreateImageSearch(…) metodą
// nurodykite funkcijų aptikimo algoritmą
String detector = "akaze";
// nurodykite funkcijų atitikimo algoritmą
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

// Sukurti vaizdų paieškos užklausą
CreateImageSearchRequest createSearchContextRequest = new CreateImageSearchRequest(detector,matchingAlgorithm, folder, storage);
// sukurti paieškos konteksto būseną 
SearchContextStatus status = imageApi.createImageSearch(createSearchContextRequest);
			  
// gauti paieškos konteksto būsenos ID
String searchContextId = status.getId();

Ištraukite vaizdo funkcijas

Dabar laikas išskirti vaizdų funkcijas ir įtraukti jas į paieškos kontekstą.

// Išskleiskite vaizdų funkcijas ir įtraukite juos į paieškos kontekstą
for (File file : allFiles) 
{
    CreateImageFeaturesRequest request = new CreateImageFeaturesRequest(searchContextId, null, null, "internal", null,null);
		imageApi.createImageFeatures(request);
}

Raskite pasikartojančius vaizdus

  • Nurodykite panašumo slenkstinę vertę
  • Antra, sukurkite pasikartojančius vaizdo rinkinius naudodami ImageDuplicatesSet objektą
  • Dabar peržiūrėkite pasikartojančių vaizdų sąrašą ir raskite vaizdų panašumą naudodami getSimilarity(…) metodą
// nurodykite panašumo slenkstinę vertę
Double similarityThreshold = 90.0;
			    
// sukurti dublikatų vaizdų rinkinį
ImageDuplicatesSet result = imageApi.findImageDuplicates(
    new FindImageDuplicatesRequest(status.getId(), similarityThreshold, folder, storage));

// spausdinti dublikatus vaizdus
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());
    }
}

Raskite nuotraukos dublikatą naudodami cURL komandas

Šiame skyriuje mes pasinaudosime cURL komandų naudojimu norėdami pasiekti REST API per komandinės eilutės terminalą. Dabar kaip būtina sąlyga, vykdydami šią komandą, pirmiausia turime sugeneruoti JWT prieigos raktą (pagal kliento kredencialus).

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"

Atliekant šį veiksmą tikimasi, kad visi vaizdai bus įkelti į saugyklą debesyje, o dabar turime sukurti paieškos konteksto ID per CreateImageSearch API skambutį. Vykdykite šią komandą

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

Atsako kūnas

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

Vykdykite šią komandą, kad rastumėte vaizdo dublikatus naudodami FindImageDuplicates API skambutį. Šioje komandoje naudojamas aukščiau sugeneruotas paieškos konteksto ID.

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

Išvada

Šiame straipsnyje mes sužinojome apie tai, kaip rasti pasikartojančius vaizdus naudojant „Java Cloud SDK“. Panašiai mes sužinojome, kaip cURL komandos gali būti dublikatų paveikslėlių ieškiklis. Jei jums reikia išbandyti šias API naršyklėje, pabandykite naudoti swagger API nuorodą. Taip pat primygtinai rekomenduojame ištirti Produkto dokumentaciją, kad sužinotumėte apie kitas įdomias funkcijas, kurias siūlo ši API. Be to, atminkite, kad visi mūsų debesies SDK yra paskelbti pagal MIT licenciją, todėl galite apsvarstyti galimybę atsisiųsti visą šaltinio kodą iš GitHub ir pakeisti jį pagal savo reikalavimus. Iškilus problemoms galite susisiekti su mumis ir greitai išspręsti problemą per nemokamą produkto palaikymo forumą.

susiję straipsniai

Norėdami sužinoti daugiau apie tai, apsilankykite šiose nuorodose: