foto duplicat

Găsiți imagini duplicate folosind Java Cloud SDK

Creierul nostru se dedică procesării vizuale, iar dragostea noastră pentru imagini constă în cunoașterea și capacitatea noastră de a acorda atenție. Imaginile sunt capabile să ne atragă atenția cu ușurință și multe dispozitive, inclusiv telefoane mobile, camere digitale, scanere etc. produc o cantitate mare de imagini. Mai mult, imaginile au algoritmi de compresie diferiți, iar imaginile raster sunt foarte frecvente printre ele, deoarece consumă mai puțin spațiu de stocare. Dar totuși, odată cu trecerea timpului, ajungem să creăm fotografii duplicate, imagini redundante etc. Avem o multitudine de aplicații care oferă capabilitățile de a găsi imagini duplicate, inclusiv căutare de imagini duplicate. În cazul în care aveți imagini stocate în Google Photos, puteți încerca să utilizați Google Photo Duplicate Finder, să instalați duplicate Photo Finder Windows 10 sau duplicate Photo Finder Mac (în funcție de sistemul dvs. de operare). Cu toate acestea, în acest articol, vom face lumină asupra modului de dezvoltare a unui detector de fotografii duplicat minunat folosind API-ul REST, care poate fi utilizat pe orice platformă.

API de procesare a imaginilor

Sunt disponibile o varietate de aplicații pentru procesarea imaginilor, oferind caracteristicile de a crea, edita și manipula fișiere de imagine. De asemenea, oferă capabilități, inclusiv căutare de imagini bazată pe tehnici de căutare inversă a imaginilor sau orice alt algoritm. Cu toate acestea, dacă sunteți interesat să aveți o soluție programatică bazată pe REST API bazată pe căutarea inversă a imaginilor, atunci Aspose.Imaging Cloud este alegerea sigură. Motorul său puternic de căutare ajută dezvoltatorii să adauge fără probleme funcții de căutare inversă a imaginilor în aplicația lor pe orice platformă. Puteți chiar să începeți operațiunea de comparare a imaginilor pentru a găsi fotografii duplicate printre câteva alte imagini. Ca urmare a acestei operațiuni, obțineți lista celor mai asemănătoare imagini în conformitate cu următoarele condiții:

  • Gradul de similitudine
  • Pragul minim de similitudine
  • Algoritm de comparație

Acum, pentru a avea capabilități similare de procesare a imaginilor și de căutare a imaginilor duplicate în cadrul aplicației Java, trebuie să folosim Aspose.Imaging Cloud SDK for Java, deoarece este un înveliș în jurul API-ului Cloud. Deci, următorul pas este să adăugați referința sa în proiectul java prin includerea următoarelor informații în pom.xml ale proiectului de tip build 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>

Acum, dacă nu ați creat un cont pe Aspose Cloud Dashboard, vă puteți înscrie pentru o perioadă de încercare gratuită printr-o adresă de e-mail validă. Acum autentificați-vă utilizând contul nou creat și căutați/creați ID-ul clientului și Secretul clientului la Cloud Dashboard. Aceste detalii sunt necesare în scopuri de autentificare în secțiunile următoare.

Găsiți imagini duplicate folosind Java

Căutarea inversă a imaginilor este o tehnică care vă ajută să căutați imagini similare din punct de vedere vizual pe baza imaginii eșantionului dvs. Mai jos sunt prezentate cele mai frecvente cazuri de utilizare pentru această caracteristică:

Căutați imaginea duplicată și eliminați duplicatele Căutați conținut imagini similare Căutați conținut neadecvat Căutați imagini semnate digital

API-ul nostru acceptă în prezent căutarea imaginilor bazată pe conținut, căutarea imaginilor duplicate, căutarea imaginilor prin etichete personalizate înregistrate, compararea imaginilor și detectarea similitudinii și operațiunile de extragere a caracteristicilor imaginii. Acum, în această secțiune, vom discuta detaliile despre cum să găsiți imagini duplicate folosind tehnica imaginii inverse. Acum, pentru a îndeplini această cerință, folosim algoritmul AKAZE pentru detectarea caracteristicilor și algoritmul RandomBinaryTree pentru potrivirea caracteristicilor din exemplu. Vom urma acești pași pentru a găsi imaginile duplicate:

  • Încărcați imagini în Cloud Storage
  • Creați context de căutare
  • Extrageți caracteristicile imaginii
  • Găsiți imagini duplicate

Încărcați imagini în Cloud Storage

Utilizați următorul fragment de cod pentru a încărca fișiere imagine de pe unitatea locală în stocarea în cloud

  • În primul rând, creați un obiect al ImagingApi în timp ce furnizați ClientID și Client
  • În al doilea rând, citiți toate fișierele imagine din directorul specificat
  • Filtrați numai fișierele imagine și adăugați-le la lista filtrată
  • Încărcați imaginile în spațiul de stocare în cloud folosind metoda uploadFile(…) în timp ce luați obiectul UploadFileRequest ca argument
// Obțineți ClientID și ClientSecret de pe https://dashboard.aspose.cloud/
String clientId = "7ef10407-c1b7-43bd-9603-5ea9c6db83cd";
String clientSecret = "ba7cc4dc0c0478d7b508dd8ffa029845";

// creați obiectul Imaging
ImagingApi imageApi = new ImagingApi(clientSecret, clientId);

File directory = new File("/Users/");
//Obțineți toate fișierele din folder
File[] allFiles = directory.listFiles();
if (allFiles == null || allFiles.length == 0) {
    throw new RuntimeException("No files present in the directory: " + directory.getAbsolutePath());
}
			 
//Setați aici extensiile de imagine necesare.
List<String> supportedImageExtensions = Arrays.asList("jpg", "png", "gif", "webp");
			 
int counter =0;
//Filtrați numai fișierele imagine
List<File> acceptedImages = new ArrayList<>();
for (File file : allFiles) {
    //Analizați extensia fișierului
    String fileExtension = file.getName().substring(file.getName().lastIndexOf(".") + 1);
    //Verificați dacă extensia este listată în suportedImageExtensions
    if (supportedImageExtensions.stream().anyMatch(fileExtension::equalsIgnoreCase)) {
        //Adăugați imaginea în lista filtrată
        acceptedImages.add(file);
			    
    // încărcați prima prezentare PowerPoint
    byte[] bytes = Files.readAllBytes(file.toPath());
	
    // creați cererea de încărcare a fișierului
    UploadFileRequest request = new UploadFileRequest(acceptedImages.get(counter).getName(),bytes,null);
    // încărcați fișierul imagine în stocarea în cloud
    imageApi.uploadFile(request);
    // crește contorul de fișiere
    counter+=1;
    }
}

Creați context de căutare

  • Mai întâi trebuie să specificăm algoritmul de detectare a caracteristicilor ca akaze
  • În al doilea rând, specificați algoritmul pentru potrivirea caracteristicilor ca randomBinaryTree
  • În al treilea rând, creați cerere de căutare de imagini folosind obiectul CreateImageSearchRequest
  • Acum creați starea de creare a contextului de căutare prin metoda createImageSearch(…).
// specificați algoritmul pentru detectarea caracteristicilor
String detector = "akaze";
// specificați algoritmul pentru potrivirea caracteristicilor
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

// Creați cerere de căutare de imagini
CreateImageSearchRequest createSearchContextRequest = new CreateImageSearchRequest(detector,matchingAlgorithm, folder, storage);
// creați starea contextului de căutare 
SearchContextStatus status = imageApi.createImageSearch(createSearchContextRequest);
			  
// obțineți ID-ul de stare al contextului de căutare
String searchContextId = status.getId();

Extrageți caracteristicile imaginii

Acum este timpul să extrageți caracteristicile imaginilor și să le adăugați în contextul de căutare.

// Extrageți caracteristicile imaginilor și adăugați-le în contextul de căutare
for (File file : allFiles) 
{
    CreateImageFeaturesRequest request = new CreateImageFeaturesRequest(searchContextId, null, null, "internal", null,null);
		imageApi.createImageFeatures(request);
}

Găsiți imagini duplicate

  • Specificați valoarea pragului de similaritate
  • În al doilea rând, creați un set de imagini duplicat folosind obiectul ImageDuplicatesSet
  • Acum iterați lista de imagini duplicate și găsiți asemănarea imaginilor folosind metoda getSimilarity(…).
// specificați valoarea pragului de similaritate
Double similarityThreshold = 90.0;
			    
// creați un set de imagini duplicat
ImageDuplicatesSet result = imageApi.findImageDuplicates(
    new FindImageDuplicatesRequest(status.getId(), similarityThreshold, folder, storage));

// tipăriți numărul de imagini duplicate
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());
    }
}

Găsiți Photo Duplicate folosind comenzile cURL

În această secțiune, vom profita de utilizarea comenzilor cURL pentru a accesa API-urile REST prin terminalul de linie de comandă. Acum, ca o condiție prealabilă, trebuie să generăm mai întâi un token de acces JWT (pe baza acreditărilor clientului) în timp ce executăm următoarea comandă.

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"

Acest pas se așteaptă ca toate imaginile să fie încărcate în stocarea în cloud și acum trebuie să creăm un ID de context de căutare prin apelul API CreateImageSearch. Vă rugăm să executați următoarea comandă

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

Corpul de răspuns

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

Vă rugăm să executați următoarea comandă pentru a găsi imagini duplicate folosind apelul API FindImageDuplicates. În următoarea comandă, este utilizat ID-ul contextului de căutare generat mai sus.

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

Concluzie

În acest articol, am aflat despre detaliile despre cum să găsim imagini duplicate folosind Java Cloud SDK. În mod similar, am învățat cum comenzile cURL pot servi ca un instrument de căutare a imaginilor duplicate. În cazul în care trebuie să încercați aceste API-uri în browser, vă rugăm să încercați să utilizați swagger API Reference. În mod similar, vă recomandăm să explorați Documentația produsului pentru a afla alte funcții interesante oferite de acest API. De asemenea, rețineți că toate SDK-urile noastre Cloud sunt publicate sub licență MIT, așa că vă recomandăm să descărcați codul sursă complet de pe GitHub și să îl modificați conform cerințelor dvs. În cazul oricăror probleme, vă recomandăm să ne contactați pentru o rezolvare rapidă prin intermediul gratuit forumul de asistență pentru produse.

Articole similare

Vă rugăm să vizitați următoarele link-uri pentru a afla mai multe despre: