Naš se mozak posvećuje vizualnoj obradi, a naša ljubav prema slikama leži u našoj spoznaji i sposobnosti obraćanja pažnje. Slike mogu lako privući našu pozornost i mnogi uređaji uključujući mobilne telefone, digitalne kamere, skenere itd. proizvode veliku količinu slika. Nadalje, slike imaju različite algoritme kompresije i među njima su rasterske slike vrlo česte jer zauzimaju manje prostora za pohranu. Ali ipak, s vremenom, na kraju stvaramo duplicirane fotografije, suvišne slike itd. Imamo mnoštvo aplikacija koje nude mogućnosti pronalaženja dupliciranih slika uključujući tražilo dupliciranih slika. U slučaju da imate slike pohranjene u Google fotografijama, možete pokušati upotrijebiti google tražilicu duplikata fotografija, instalirati tražilicu duplikata fotografija za Windows 10 ili tražilicu duplikata fotografija za mac (ovisno o vašem operativnom sustavu). Međutim, u ovom ćemo članku rasvijetliti kako razviti izvrstan pronalazač duplikata fotografija koristeći REST API koji se može koristiti na bilo kojoj platformi.
- API za obradu slika
- Pronađite duplicirane slike pomoću Jave
- Pronađite duplikat fotografije pomoću cURL naredbi
API za obradu slika
Dostupne su razne aplikacije za obradu slika koje nude značajke za stvaranje, uređivanje i rukovanje slikovnim datotekama. Oni također pružaju mogućnosti uključujući pretraživanje slika na temelju tehnika obrnutog pretraživanja slika ili bilo kojeg drugog algoritma. Međutim, ako ste zainteresirani za programsko rješenje temeljeno na REST API-ju i obrnutom pretraživanju slika, onda je Aspose.Imaging Cloud definitivan izbor. Njegova moćna tražilica pomaže programerima da dodaju značajke obrnutog pretraživanja slika u svoju aplikaciju na bilo kojoj platformi bez problema. Možete čak pokrenuti operaciju usporedbe slika kako biste pronašli duplikat fotografije među nekoliko drugih slika. Kao rezultat ove operacije dobit ćete popis najsličnijih slika u skladu sa sljedećim uvjetima:
- Stupanj sličnosti
- Minimalni prag sličnosti
- Algoritam usporedbe
Kako bismo imali sličnu obradu slika i mogućnosti traženja dupliciranih slika unutar Java aplikacije, moramo koristiti Aspose.Imaging Cloud SDK za Javu jer je to omotač oko Cloud API-ja. Dakle, sljedeći korak je dodavanje njegove reference u java projekt uključivanjem sljedećih informacija u pom.xml projekta maven build type.
<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>
Sada, ako niste izradili račun na Aspose Cloud Dashboard, možete se prijaviti za besplatnu probnu verziju putem važeće adrese e-pošte. Sada se prijavite pomoću novostvorenog računa i potražite/izradite ID klijenta i tajnu klijenta na Cloud Dashboard. Ovi detalji su potrebni za provjeru autentičnosti u sljedećim odjeljcima.
Pronađite duplicirane slike pomoću Jave
Obrnuto pretraživanje slika tehnika je koja vam pomaže u pretraživanju vizualno sličnih slika na temelju uzorka slike. U nastavku su navedeni najčešći slučajevi upotrebe ove značajke:
Potražite duplikat slike i uklonite duplikate Traži sadržaj sličnih slika Potražite neprikladni sadržaj Potražite digitalno potpisane slike
Naš API trenutno podržava pretraživanje slika temeljeno na sadržaju, pretraživanje dupliciranih slika, pretraživanje slika prema prilagođenim registriranim oznakama, usporedbu slika i otkrivanje sličnosti i operacije ekstrakcije značajki slike. Sada ćemo u ovom odjeljku raspravljati o pojedinostima o tome kako pronaći duplicirane slike pomoću tehnike obrnute slike. Da bismo ispunili ovaj zahtjev, u primjeru koristimo algoritam AKAZE za otkrivanje značajki i algoritam RandomBinaryTree za podudaranje značajki. Slijedit ćemo ove korake kako bismo pronašli duplicirane slike:
- Prenesite slike u Cloud Storage
- Stvorite kontekst pretraživanja
- Ekstrakt značajki slike
- Pronađite duplicirane slike
Prenesite slike u Cloud Storage
Upotrijebite sljedeći isječak koda za prijenos slikovnih datoteka s lokalnog pogona u pohranu u oblaku
- Prvo, stvorite objekt ImagingApi dok dajete ClientID i Client
- Drugo, pročitajte sve slikovne datoteke iz navedenog direktorija
- Filtrirajte samo slikovne datoteke i dodajte ih na filtrirani popis
- Prenesite slike u pohranu u oblaku koristeći uploadFile(…) metodu uzimajući objekt UploadFileRequest kao argument
// Dobijte ClientID i ClientSecret s https://dashboard.aspose.cloud/
String clientId = "7ef10407-c1b7-43bd-9603-5ea9c6db83cd";
String clientSecret = "ba7cc4dc0c0478d7b508dd8ffa029845";
// stvoriti Imaging object
ImagingApi imageApi = new ImagingApi(clientSecret, clientId);
File directory = new File("/Users/");
//Preuzmite sve datoteke iz mape
File[] allFiles = directory.listFiles();
if (allFiles == null || allFiles.length == 0) {
throw new RuntimeException("No files present in the directory: " + directory.getAbsolutePath());
}
//Ovdje postavite potrebna proširenja slike.
List<String> supportedImageExtensions = Arrays.asList("jpg", "png", "gif", "webp");
int counter =0;
//Filtrirajte samo slikovne datoteke
List<File> acceptedImages = new ArrayList<>();
for (File file : allFiles) {
//Raščlanite ekstenziju datoteke
String fileExtension = file.getName().substring(file.getName().lastIndexOf(".") + 1);
//Provjerite je li proširenje navedeno u supportedImageExtensions
if (supportedImageExtensions.stream().anyMatch(fileExtension::equalsIgnoreCase)) {
//Dodajte sliku na filtrirani popis
acceptedImages.add(file);
// učitajte prvu PowerPoint prezentaciju
byte[] bytes = Files.readAllBytes(file.toPath());
// stvoriti zahtjev za učitavanje datoteke
UploadFileRequest request = new UploadFileRequest(acceptedImages.get(counter).getName(),bytes,null);
// prenesite slikovnu datoteku u pohranu u oblaku
imageApi.uploadFile(request);
// povećati brojač datoteka
counter+=1;
}
}
Stvorite kontekst pretraživanja
- Prvo moramo specificirati algoritam za otkrivanje značajki kao akaze
- Drugo, navedite algoritam za podudaranje značajki kao randomBinaryTree
- Treće, izradite zahtjev za pretraživanje slike pomoću objekta CreateImageSearchRequest
- Sada kreirajte status konteksta pretraživanja pomoću metode createImageSearch(…).
// odrediti algoritam za otkrivanje značajki
String detector = "akaze";
// navedite algoritam za podudaranje značajki
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
// Kreirajte zahtjev za pretraživanje slika
CreateImageSearchRequest createSearchContextRequest = new CreateImageSearchRequest(detector,matchingAlgorithm, folder, storage);
// stvoriti status konteksta pretraživanja
SearchContextStatus status = imageApi.createImageSearch(createSearchContextRequest);
// dobiti ID statusa konteksta pretraživanja
String searchContextId = status.getId();
Ekstrakt značajki slike
Sada je vrijeme da izdvojite značajke slika i dodate ih u kontekst pretraživanja.
// Izdvojite značajke slika i dodajte ih u kontekst pretraživanja
for (File file : allFiles)
{
CreateImageFeaturesRequest request = new CreateImageFeaturesRequest(searchContextId, null, null, "internal", null,null);
imageApi.createImageFeatures(request);
}
Pronađite duplicirane slike
- Navedite vrijednost praga sličnosti
- Drugo, stvorite dvostruki skup slika pomoću objekta ImageDuplicatesSet
- Sada iterirajte kroz popis dupliciranih slika i pronađite sličnost slike pomoću metode getSimilarity(…).
// navedite vrijednost praga sličnosti
Double similarityThreshold = 90.0;
// stvoriti dvostruki skup slika
ImageDuplicatesSet result = imageApi.findImageDuplicates(
new FindImageDuplicatesRequest(status.getId(), similarityThreshold, folder, storage));
// ispišite broj duplih slika
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());
}
}
Pronađite duplikat fotografije pomoću cURL naredbi
U ovom odjeljku ćemo iskoristiti korištenje cURL naredbi za pristup REST API-jima preko terminala naredbenog retka. Sada kao preduvjet, prvo moramo generirati JWT pristupni token (na temelju vjerodajnica klijenta) dok izvršavamo sljedeću naredbu.
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"
Ovaj korak očekuje da se sve slike učitaju u pohranu u oblaku i sada moramo stvoriti ID konteksta pretraživanja putem CreateImageSearch API poziva. Molimo izvršite sljedeću naredbu
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>"
Tijelo odgovora
{
"id": "0b9ac539-07fb-462a-91cb-8a8d5069ba4d",
"searchStatus": "Idle"
}
Izvršite sljedeću naredbu da biste pronašli duplikate slika pomoću API poziva FindImageDuplicates. U sljedećoj naredbi koristi se gore generirani ID konteksta pretraživanja.
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>"
Zaključak
U ovom smo članku naučili pojedinosti o tome kako pronaći duplicirane slike pomoću Java Cloud SDK-a. Slično tome, naučili smo kako cURL naredbe mogu poslužiti kao tražilo dupliciranih slika. U slučaju da trebate isprobati ove API-je unutar preglednika, pokušajte koristiti swagger API Reference. Slično tome, preporučujemo da istražite Dokumentaciju proizvoda kako biste saznali druge uzbudljive značajke koje nudi ovaj API. Također, imajte na umu da su svi naši Cloud SDK-ovi objavljeni pod MIT licencom, tako da možete razmisliti o preuzimanju kompletnog izvornog koda s GitHub i modificirati ga prema svojim zahtjevima. U slučaju bilo kakvih problema, razmislite o tome da nam se obratite za brzo rješenje putem besplatnog foruma za podršku proizvoda.
povezani članci
Posjetite sljedeće veze kako biste saznali više o: