duplikát fotografie

Nájdite duplicitné obrázky pomocou Java Cloud SDK

Náš mozog sa venuje vizuálnemu spracovaniu a naša láska k obrazom spočíva v našom poznaní a schopnosti venovať pozornosť. Obrázky dokážu ľahko upútať našu pozornosť a mnohé zariadenia vrátane mobilných telefónov, digitálnych fotoaparátov, skenerov atď. produkujú veľké množstvo obrázkov. Ďalej, obrázky majú rôzne kompresné algoritmy a rastrové obrázky sú medzi nimi veľmi bežné, pretože spotrebujú menej úložného priestoru. Postupom času však vytvárame duplicitné fotografie, nadbytočné obrázky atď. Máme množstvo aplikácií, ktoré ponúkajú možnosti nájsť duplicitné obrázky vrátane vyhľadávača duplicitných obrázkov. V prípade, že máte obrázky uložené vo Fotkách Google, môžete skúsiť použiť vyhľadávač duplicitných fotografií Google, nainštalovať vyhľadávač duplicitných fotografií pre Windows 10 alebo vyhľadávač duplicitných fotografií pre mac (v závislosti od vášho operačného systému). V tomto článku si však posvietime na to, ako vytvoriť úžasný vyhľadávač duplicitných fotografií pomocou REST API, ktorý možno použiť na akejkoľvek platforme.

API na spracovanie obrazu

Na spracovanie obrazu je k dispozícii množstvo aplikácií, ktoré ponúkajú funkcie na vytváranie, úpravu a manipuláciu so súbormi s obrázkami. Poskytujú tiež funkcie vrátane vyhľadávania obrázkov na základe techník spätného vyhľadávania obrázkov alebo akéhokoľvek iného algoritmu. Ak však máte záujem o programové riešenie založené na REST API založené na spätnom vyhľadávaní obrázkov, potom je Aspose.Imaging Cloud tou správnou voľbou. Jeho výkonný vyhľadávací nástroj pomáha vývojárom bezproblémovo pridávať funkcie spätného vyhľadávania obrázkov do ich aplikácií na akejkoľvek platforme. Môžete dokonca spustiť operáciu porovnávania obrázkov, aby ste našli duplikát fotografie medzi niekoľkými ďalšími obrázkami. V dôsledku tejto operácie získate zoznam najpodobnejších obrázkov v súlade s nasledujúcimi podmienkami:

  • Stupeň podobnosti
  • Minimálny prah podobnosti
  • Algoritmus porovnávania

Teraz, aby sme mali podobné možnosti spracovania obrázkov a duplicitného vyhľadávania obrázkov v rámci aplikácie Java, musíme použiť Aspose.Imaging Cloud SDK for Java, pretože je to obal okolo Cloud API. Takže ďalším krokom je pridanie jeho referencie do projektu java zahrnutím nasledujúcich informácií do pom.xml projektu typu zostavy maven.

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

Ak ste si teraz nevytvorili účet cez Aspose Cloud Dashboard, môžete sa zaregistrovať na bezplatnú skúšobnú verziu prostredníctvom platnej e-mailovej adresy. Teraz sa prihláste pomocou novo vytvoreného účtu a vyhľadajte/vytvorte ID klienta a tajný kľúč klienta na Cloud Dashboard. Tieto podrobnosti sú potrebné na účely overenia v nasledujúcich častiach.

Nájdite duplicitné obrázky pomocou Java

Obrátené vyhľadávanie obrázkov je technika, ktorá vám pomáha vyhľadávať vizuálne podobné obrázky na základe vzorového obrázka. Nižšie sú uvedené najbežnejšie prípady použitia tejto funkcie:

Vyhľadajte duplicitný obrázok a odstráňte duplikáty Vyhľadajte obsahovo podobné obrázky Vyhľadajte nevhodný obsah Vyhľadajte digitálne podpísané obrázky

Naše API v súčasnosti podporuje vyhľadávanie obrázkov na základe obsahu, vyhľadávanie duplicitných obrázkov, vyhľadávanie obrázkov podľa vlastných registrovaných značiek, porovnávanie obrázkov a detekciu podobnosti a operácie extrakcie obrázkových funkcií. Teraz v tejto časti budeme diskutovať o podrobnostiach o tom, ako nájsť duplicitné obrázky pomocou techniky spätného obrázka. Teraz, aby sme splnili túto požiadavku, v tomto príklade používame algoritmus AKAZE na detekciu prvkov a algoritmus RandomBinaryTree na porovnávanie prvkov. Ak chcete nájsť duplicitné obrázky, postupujte podľa týchto krokov:

  • Nahrajte obrázky do cloudového úložiska
  • Vytvorte kontext vyhľadávania
  • Extrahujte funkcie obrázka
  • Nájsť duplicitné obrázky

Nahrajte obrázky do cloudového úložiska

Na nahranie obrázkových súborov z lokálneho disku do cloudového úložiska použite nasledujúci útržok kódu

  • Najprv vytvorte objekt ImagingApi a zároveň zadajte ClientID a Client
  • Po druhé, prečítajte si všetky obrazové súbory zo zadaného adresára
  • Filtrujte iba obrazové súbory a pridajte ich do filtrovaného zoznamu
  • Nahrajte obrázky do cloudového úložiska pomocou metódy uploadFile(…), pričom ako argument vezmite objekt UploadFileRequest
// Získajte ClientID a ClientSecret z https://dashboard.aspose.cloud/
String clientId = "7ef10407-c1b7-43bd-9603-5ea9c6db83cd";
String clientSecret = "ba7cc4dc0c0478d7b508dd8ffa029845";

// vytvoriť Imaging objekt
ImagingApi imageApi = new ImagingApi(clientSecret, clientId);

File directory = new File("/Users/");
//Získajte všetky súbory z priečinka
File[] allFiles = directory.listFiles();
if (allFiles == null || allFiles.length == 0) {
    throw new RuntimeException("No files present in the directory: " + directory.getAbsolutePath());
}
			 
//Tu nastavte požadované rozšírenia obrázkov.
List<String> supportedImageExtensions = Arrays.asList("jpg", "png", "gif", "webp");
			 
int counter =0;
//Odfiltrujte iba obrazové súbory
List<File> acceptedImages = new ArrayList<>();
for (File file : allFiles) {
    //Analyzujte príponu súboru
    String fileExtension = file.getName().substring(file.getName().lastIndexOf(".") + 1);
    //Skontrolujte, či je rozšírenie uvedené v zozname podporovaných ImageExtensions
    if (supportedImageExtensions.stream().anyMatch(fileExtension::equalsIgnoreCase)) {
        //Pridajte obrázok do filtrovaného zoznamu
        acceptedImages.add(file);
			    
    // načítať prvú prezentáciu programu PowerPoint
    byte[] bytes = Files.readAllBytes(file.toPath());
	
    // vytvoriť požiadavku na nahranie súboru
    UploadFileRequest request = new UploadFileRequest(acceptedImages.get(counter).getName(),bytes,null);
    // nahrajte súbor obrázka do cloudového úložiska
    imageApi.uploadFile(request);
    // zvýšiť počítadlo súborov
    counter+=1;
    }
}

Vytvorte kontext vyhľadávania

  • Najprv musíme špecifikovať algoritmus detekcie funkcií ako akaze
  • Po druhé, špecifikujte algoritmus na porovnávanie prvkov ako randomBinaryTree
  • Po tretie, vytvorte požiadavku na vyhľadávanie obrázkov pomocou objektu CreateImageSearchRequest
  • Teraz vytvorte stav kontextu vyhľadávania vytvoriť pomocou metódy createImageSearch(…).
// špecifikovať algoritmus na detekciu funkcií
String detector = "akaze";
// špecifikovať algoritmus na porovnávanie prvkov
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

// Vytvoriť požiadavku na vyhľadávanie obrázkov
CreateImageSearchRequest createSearchContextRequest = new CreateImageSearchRequest(detector,matchingAlgorithm, folder, storage);
// vytvoriť kontext vyhľadávania 
SearchContextStatus status = imageApi.createImageSearch(createSearchContextRequest);
			  
// získať ID stavu vyhľadávacieho kontextu
String searchContextId = status.getId();

Extrahujte funkcie obrázka

Teraz je čas extrahovať funkcie obrázkov a pridať ich do kontextu vyhľadávania.

// Extrahujte funkcie obrázkov a pridajte ich do kontextu vyhľadávania
for (File file : allFiles) 
{
    CreateImageFeaturesRequest request = new CreateImageFeaturesRequest(searchContextId, null, null, "internal", null,null);
		imageApi.createImageFeatures(request);
}

Nájsť duplicitné obrázky

  • Zadajte prahovú hodnotu podobnosti
  • Po druhé, vytvorte duplicitnú sadu obrázkov pomocou objektu ImageDuplicatesSet
  • Teraz iterujte cez zoznam duplicitných obrázkov a nájdite podobnosť obrázkov pomocou metódy getSimilarity(…).
// špecifikujte prahovú hodnotu podobnosti
Double similarityThreshold = 90.0;
			    
// vytvoriť duplicitnú sadu obrázkov
ImageDuplicatesSet result = imageApi.findImageDuplicates(
    new FindImageDuplicatesRequest(status.getId(), similarityThreshold, folder, storage));

// vytlačte duplicitné obrázky
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());
    }
}

Nájdite duplikát fotografie pomocou príkazov cURL

V tejto časti využijeme využitie príkazov cURL na prístup k REST API cez terminál príkazového riadka. Teraz ako nevyhnutnú podmienku musíme najprv vygenerovať prístupový token JWT (na základe poverení klienta) pri vykonávaní nasledujúceho príkazu.

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"

Tento krok očakáva, že všetky obrázky sa nahrajú do cloudového úložiska a teraz musíme vytvoriť ID kontextu vyhľadávania prostredníctvom volania CreateImageSearch API. Vykonajte nasledujúci príkaz

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

Telo odpovede

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

Ak chcete nájsť duplikáty obrázkov pomocou volania API FindImageDuplicates, vykonajte nasledujúci príkaz. V nasledujúcom príkaze sa použije vyššie vygenerované ID kontextu vyhľadávania.

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

Záver

V tomto článku sme sa dozvedeli podrobnosti o tom, ako nájsť duplicitné obrázky pomocou Java Cloud SDK. Podobne sme sa naučili, ako môžu príkazy cURL slúžiť ako vyhľadávač duplicitných obrázkov. V prípade, že potrebujete vyskúšať tieto API v prehliadači, skúste použiť swagger API Reference. Podobne dôrazne odporúčame preskúmať dokumentáciu k produktu, aby ste sa dozvedeli o ďalších zaujímavých funkciách, ktoré ponúka toto rozhranie API. Upozorňujeme tiež, že všetky naše súpravy Cloud SDK sú publikované pod licenciou MIT, takže môžete zvážiť stiahnutie úplného zdrojového kódu z GitHub a jeho úpravu podľa vašich požiadaviek. V prípade akýchkoľvek problémov môžete zvážiť oslovenie nás, aby sme ich rýchlo vyriešili prostredníctvom bezplatného fóra podpory produktov.

Súvisiace články

Ak chcete získať viac informácií, navštívte nasledujúce odkazy: