duplikat zdjęcia

Znajdź zduplikowane obrazy za pomocą Java Cloud SDK

Nasz mózg poświęca się przetwarzaniu wizualnemu, a nasza miłość do obrazów leży w naszym poznaniu i zdolności do zwracania uwagi. Obrazy są w stanie łatwo przykuć naszą uwagę, a wiele urządzeń, w tym telefony komórkowe, aparaty cyfrowe, skanery itp., generuje dużą liczbę obrazów. Ponadto obrazy mają różne algorytmy kompresji, a obrazy rastrowe są wśród nich bardzo popularne, ponieważ zajmują mniej miejsca w pamięci. Jednak wraz z upływem czasu tworzymy zduplikowane zdjęcia, zbędne obrazy itp. Mamy mnóstwo aplikacji oferujących możliwości znajdowania zduplikowanych obrazów, w tym wyszukiwarkę duplikatów zdjęć. Jeśli masz obrazy przechowywane w Zdjęciach Google, możesz spróbować użyć wyszukiwarki duplikatów zdjęć Google, zainstalować wyszukiwarkę duplikatów zdjęć Windows 10 lub wyszukiwarkę duplikatów zdjęć Mac (w zależności od systemu operacyjnego). Jednak w tym artykule rzucimy światło na to, jak opracować niesamowitą wyszukiwarkę duplikatów zdjęć przy użyciu interfejsu API REST, której można używać na dowolnej platformie.

Interfejs API przetwarzania obrazu

Dostępnych jest wiele aplikacji do przetwarzania obrazów, oferujących funkcje tworzenia, edytowania i manipulowania plikami obrazów. Zapewniają również możliwości wyszukiwania obrazów w oparciu o techniki odwrotnego wyszukiwania obrazów lub dowolny inny algorytm. Jeśli jednak jesteś zainteresowany rozwiązaniem programistycznym opartym na REST API, opartym na odwrotnym wyszukiwaniu obrazów, to Aspose.Imaging Cloud jest zdecydowanym wyborem. Jego potężna wyszukiwarka pomaga programistom bezproblemowo dodawać funkcje wyszukiwania wstecznego obrazu w ich aplikacjach na dowolnej platformie. Możesz nawet rozpocząć operację porównywania obrazów, aby znaleźć duplikat zdjęcia wśród kilku innych obrazów. W wyniku tej operacji otrzymujesz listę najbardziej podobnych obrazków zgodnie z następującymi warunkami:

  • Stopień podobieństwa
  • Minimalny próg podobieństwa
  • Algorytm porównania

Teraz, aby mieć podobne możliwości przetwarzania obrazu i wyszukiwania duplikatów obrazów w aplikacji Java, musimy użyć Aspose.Imaging Cloud SDK for Java, ponieważ jest to opakowanie wokół Cloud API. Następnym krokiem jest więc dodanie jego odniesienia do projektu java poprzez uwzględnienie następujących informacji w pliku pom.xml projektu typu kompilacja 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>

Teraz, jeśli nie utworzyłeś konta w Aspose Cloud Dashboard, możesz zarejestrować się w bezpłatnej wersji próbnej za pomocą prawidłowego adresu e-mail. Teraz zaloguj się przy użyciu nowo utworzonego konta i wyszukaj/utwórz identyfikator klienta i klucz tajny klienta w Cloud Dashboard. Dane te są wymagane do celów uwierzytelniania w poniższych sekcjach.

Znajdź zduplikowane obrazy za pomocą Java

Reverse Image Search to technika, która pomaga wyszukiwać wizualnie podobne obrazy na podstawie przykładowego obrazu. Poniżej podano najczęstsze przypadki użycia tej funkcji:

Wyszukaj zduplikowany obraz i usuń duplikaty Szukaj treści podobnych obrazów Szukaj nieodpowiednich treści Wyszukaj obrazy podpisane cyfrowo

Nasz interfejs API obsługuje obecnie wyszukiwanie obrazów w oparciu o treść, wyszukiwanie duplikatów obrazów, wyszukiwanie obrazów według niestandardowych zarejestrowanych tagów, porównywanie obrazów i wykrywanie podobieństw oraz operacje wyodrębniania cech obrazu. Teraz w tej sekcji omówimy szczegóły, jak znaleźć zduplikowane obrazy przy użyciu techniki odwróconego obrazu. Teraz, aby spełnić to wymaganie, używamy algorytmu AKAZE do wykrywania cech i algorytmu RandomBinaryTree do dopasowywania cech w przykładzie. Wykonamy następujące kroki, aby znaleźć zduplikowane obrazy:

  • Prześlij obrazy do Cloud Storage
  • Utwórz kontekst wyszukiwania
  • Wyodrębnij funkcje obrazu
  • Znajdź zduplikowane obrazy

Prześlij obrazy do Cloud Storage

Użyj poniższego fragmentu kodu, aby przesłać pliki obrazów z dysku lokalnego do magazynu w chmurze

  • Najpierw utwórz obiekt ImagingApi, podając ClientID i Client
  • Po drugie, przeczytaj wszystkie pliki obrazów z określonego katalogu
  • Filtruj tylko pliki obrazów i dodaj je do przefiltrowanej listy
  • Prześlij obrazy do magazynu w chmurze za pomocą metody uploadFile(…), biorąc jako argument obiekt UploadFileRequest
// Uzyskaj ClientID i ClientSecret z https://dashboard.aspose.cloud/
String clientId = "7ef10407-c1b7-43bd-9603-5ea9c6db83cd";
String clientSecret = "ba7cc4dc0c0478d7b508dd8ffa029845";

// utwórz obiekt Imaging
ImagingApi imageApi = new ImagingApi(clientSecret, clientId);

File directory = new File("/Users/");
//Pobierz wszystkie pliki z folderu
File[] allFiles = directory.listFiles();
if (allFiles == null || allFiles.length == 0) {
    throw new RuntimeException("No files present in the directory: " + directory.getAbsolutePath());
}
			 
//Ustaw tutaj wymagane rozszerzenia graficzne.
List<String> supportedImageExtensions = Arrays.asList("jpg", "png", "gif", "webp");
			 
int counter =0;
//Odfiltruj tylko pliki obrazów
List<File> acceptedImages = new ArrayList<>();
for (File file : allFiles) {
    //Przeanalizuj rozszerzenie pliku
    String fileExtension = file.getName().substring(file.getName().lastIndexOf(".") + 1);
    //Sprawdź, czy rozszerzenie znajduje się na liście obsługiwanych rozszerzeń obrazu
    if (supportedImageExtensions.stream().anyMatch(fileExtension::equalsIgnoreCase)) {
        //Dodaj obraz do przefiltrowanej listy
        acceptedImages.add(file);
			    
    // załaduj pierwszą prezentację PowerPoint
    byte[] bytes = Files.readAllBytes(file.toPath());
	
    // utwórz żądanie przesłania pliku
    UploadFileRequest request = new UploadFileRequest(acceptedImages.get(counter).getName(),bytes,null);
    // prześlij plik obrazu do magazynu w chmurze
    imageApi.uploadFile(request);
    // zwiększyć licznik plików
    counter+=1;
    }
}

Utwórz kontekst wyszukiwania

  • Najpierw musimy określić algorytm wykrywania cech jako akaze
  • Po drugie, określ algorytm dopasowywania cech jako randomBinaryTree
  • Po trzecie, utwórz żądanie wyszukiwania obrazu za pomocą obiektu CreateImageSearchRequest
  • Teraz utwórz status kontekstu wyszukiwania za pomocą metody createImageSearch(…).
// określić algorytm wykrywania cech
String detector = "akaze";
// określić algorytm dopasowywania cech
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

// Utwórz żądanie wyszukiwania obrazu
CreateImageSearchRequest createSearchContextRequest = new CreateImageSearchRequest(detector,matchingAlgorithm, folder, storage);
// utwórz stan kontekstu wyszukiwania 
SearchContextStatus status = imageApi.createImageSearch(createSearchContextRequest);
			  
// uzyskać identyfikator stanu kontekstu wyszukiwania
String searchContextId = status.getId();

Wyodrębnij funkcje obrazu

Teraz nadszedł czas, aby wyodrębnić funkcje obrazów i dodać je do kontekstu wyszukiwania.

// Wyodrębnij funkcje obrazów i dodaj je do kontekstu wyszukiwania
for (File file : allFiles) 
{
    CreateImageFeaturesRequest request = new CreateImageFeaturesRequest(searchContextId, null, null, "internal", null,null);
		imageApi.createImageFeatures(request);
}

Znajdź zduplikowane obrazy

  • Określ wartość progową podobieństwa
  • Po drugie, utwórz zduplikowany zestaw obrazów za pomocą obiektu ImageDuplicatesSet
  • Teraz przejrzyj listę zduplikowanych obrazów i znajdź podobieństwo obrazów za pomocą metody getSimilarity(…).
// określić wartość progową podobieństwa
Double similarityThreshold = 90.0;
			    
// utwórz zduplikowany zestaw obrazów
ImageDuplicatesSet result = imageApi.findImageDuplicates(
    new FindImageDuplicatesRequest(status.getId(), similarityThreshold, folder, storage));

// wydrukować liczbę zduplikowanych obrazów
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());
    }
}

Znajdź duplikat zdjęcia za pomocą poleceń cURL

W tej sekcji wykorzystamy polecenia cURL, aby uzyskać dostęp do interfejsów API REST za pośrednictwem terminala wiersza poleceń. Teraz jako warunek wstępny musimy najpierw wygenerować token dostępu JWT (na podstawie poświadczeń klienta) podczas wykonywania następującego polecenia.

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"

W tym kroku oczekuje się, że wszystkie obrazy zostaną przesłane do magazynu w chmurze, a teraz musimy utworzyć identyfikator kontekstu wyszukiwania za pomocą wywołania API CreateImageSearch. Proszę wykonać następujące polecenie

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

Ciało odpowiedzi

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

Wykonaj następujące polecenie, aby znaleźć duplikaty obrazu za pomocą wywołania API FindImageDuplicates. W poniższym poleceniu używany jest identyfikator kontekstu wyszukiwania wygenerowany powyżej.

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

Wniosek

W tym artykule dowiedzieliśmy się, jak znaleźć zduplikowane obrazy za pomocą Java Cloud SDK. Podobnie nauczyliśmy się, jak polecenia cURL mogą służyć jako wyszukiwarka duplikatów zdjęć. Jeśli chcesz wypróbować te interfejsy API w przeglądarce, spróbuj użyć Swagger API Reference. Podobnie zdecydowanie zalecamy zapoznanie się z dokumentacją produktu, aby poznać inne ekscytujące funkcje oferowane przez ten interfejs API. Pamiętaj też, że wszystkie nasze Cloud SDK są publikowane na licencji MIT, więc możesz rozważyć pobranie pełnego kodu źródłowego z GitHub i zmodyfikowanie go zgodnie z własnymi wymaganiami. W przypadku jakichkolwiek problemów możesz rozważyć skontaktowanie się z nami w celu szybkiego rozwiązania za pośrednictwem bezpłatnego forum wsparcia produktu.

Powiązane artykuły

Odwiedź poniższe linki, aby dowiedzieć się więcej o: