дубликат фотографии

Поиск повторяющихся изображений с помощью Java Cloud SDK

Наш мозг посвящает себя обработке изображений, и наша любовь к изображениям связана с нашим познанием и способностью концентрировать внимание. Изображения могут легко привлечь наше внимание, и многие устройства, включая сотовые телефоны, цифровые камеры, сканеры и т. д., производят большое количество изображений. Кроме того, изображения имеют разные алгоритмы сжатия, и среди них очень распространены растровые изображения, поскольку они занимают меньше места для хранения. Но, тем не менее, с течением времени мы в конечном итоге создаем дубликаты фотографий, избыточные изображения и т. д. У нас есть множество приложений, предлагающих возможности поиска дубликатов изображений, включая поиск дубликатов изображений. Если у вас есть изображения, хранящиеся в фотографиях Google, вы можете попробовать использовать средство поиска дубликатов фотографий Google, установить средство поиска дубликатов фотографий Windows 10 или средство поиска дубликатов фотографий Mac (в зависимости от вашей операционной системы). Однако в этой статье мы собираемся пролить свет на то, как разработать потрясающий инструмент для поиска дубликатов фотографий с использованием REST API, который можно использовать на любой платформе.

API обработки изображений

Для обработки изображений доступны различные приложения, предлагающие функции для создания, редактирования и управления файлами изображений. Они также предоставляют возможности, включая поиск изображений на основе методов обратного поиска изображений или любого другого алгоритма. Однако, если вы заинтересованы в программном решении на основе REST API, основанном на обратном поиске изображений, то Aspose.Imaging Cloud — это определенный выбор. Его мощная поисковая система помогает разработчикам легко добавлять функции обратного поиска изображений в свои приложения на любой платформе. Вы даже можете запустить операцию сравнения изображений, чтобы найти дубликат фотографии среди нескольких других изображений. В результате этой операции вы получаете список наиболее похожих изображений по следующим условиям:

  • Степень сходства
  • Минимальный порог подобия
  • Алгоритм сравнения

Теперь, чтобы иметь аналогичную обработку изображений и возможности поиска дубликатов изображений в приложении Java, нам нужно использовать Aspose.Imaging Cloud SDK для Java, так как это оболочка для Cloud API. Итак, следующий шаг — добавить ссылку в проект Java, включив следующую информацию в pom.xml проекта типа сборки 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>

Теперь, если вы не создали учетную запись в Aspose Cloud Dashboard, вы можете подписаться на бесплатную пробную версию, указав действующий адрес электронной почты. Теперь войдите в систему, используя только что созданную учетную запись, и найдите/создайте идентификатор клиента и секрет клиента на Cloud Dashboard. Эти данные необходимы для аутентификации в следующих разделах.

Найдите дубликаты изображений с помощью Java

Обратный поиск изображения — это метод, который помогает вам искать визуально похожие изображения на основе вашего образца изображения. Ниже приведены наиболее распространенные варианты использования этой функции:

Найдите дубликат изображения и удалите дубликаты Поиск по содержанию похожих изображений Искать неприемлемый контент Поиск изображений с цифровой подписью

В настоящее время наш API поддерживает поиск изображений на основе содержимого, поиск дубликатов изображений, поиск изображений по пользовательским зарегистрированным тегам, сравнение изображений и обнаружение сходства, а также операции извлечения признаков изображения. Теперь в этом разделе мы собираемся обсудить детали того, как найти дубликаты изображений, используя технику обратного изображения. Теперь, чтобы выполнить это требование, мы используем алгоритм AKAZE для обнаружения признаков и алгоритм RandomBinaryTree для сопоставления признаков в примере. Мы выполним следующие шаги, чтобы найти дубликаты изображений:

  • Загрузить изображения в облачное хранилище
  • Создать поисковый контекст
  • Извлечь функции изображения
  • Найти повторяющиеся изображения

Загрузить изображения в облачное хранилище

Используйте следующий фрагмент кода для загрузки файлов изображений с локального диска в облачное хранилище.

  • Во-первых, создайте объект ImagingApi, указав ClientID и Client.
  • Во-вторых, прочитать все файлы изображений из указанного каталога
  • Отфильтровать только файлы изображений и добавить их в отфильтрованный список
  • Загрузите изображения в облачное хранилище, используя метод uploadFile(…), принимая объект UploadFileRequest в качестве аргумента.
// Получите ClientID и ClientSecret с https://dashboard.aspose.cloud/
String clientId = "7ef10407-c1b7-43bd-9603-5ea9c6db83cd";
String clientSecret = "ba7cc4dc0c0478d7b508dd8ffa029845";

// создать объект изображения
ImagingApi imageApi = new ImagingApi(clientSecret, clientId);

File directory = new File("/Users/");
//Получить все файлы из папки
File[] allFiles = directory.listFiles();
if (allFiles == null || allFiles.length == 0) {
    throw new RuntimeException("No files present in the directory: " + directory.getAbsolutePath());
}
			 
//Установите здесь необходимые расширения изображения.
List<String> supportedImageExtensions = Arrays.asList("jpg", "png", "gif", "webp");
			 
int counter =0;
//Отфильтровать только файлы изображений
List<File> acceptedImages = new ArrayList<>();
for (File file : allFiles) {
    //Разобрать расширение файла
    String fileExtension = file.getName().substring(file.getName().lastIndexOf(".") + 1);
    //Проверьте, указано ли расширение в списке поддерживаемых расширений изображения.
    if (supportedImageExtensions.stream().anyMatch(fileExtension::equalsIgnoreCase)) {
        //Добавьте изображение в отфильтрованный список
        acceptedImages.add(file);
			    
    // загрузить первую презентацию PowerPoint
    byte[] bytes = Files.readAllBytes(file.toPath());
	
    // создать запрос на загрузку файла
    UploadFileRequest request = new UploadFileRequest(acceptedImages.get(counter).getName(),bytes,null);
    // загрузить файл изображения в облачное хранилище
    imageApi.uploadFile(request);
    // увеличить счетчик файлов
    counter+=1;
    }
}

Создать поисковый контекст

  • Сначала нам нужно указать алгоритм обнаружения признаков как akaze
  • Во-вторых, укажите алгоритм сопоставления признаков как randomBinaryTree.
  • В-третьих, создайте запрос на поиск изображения, используя объект CreateImageSearchRequest.
  • Теперь создайте статус контекста поиска с помощью метода createImageSearch(…)
// указать алгоритм обнаружения признаков
String detector = "akaze";
// указать алгоритм сопоставления признаков
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

// Создать запрос на поиск изображения
CreateImageSearchRequest createSearchContextRequest = new CreateImageSearchRequest(detector,matchingAlgorithm, folder, storage);
// создать статус контекста поиска 
SearchContextStatus status = imageApi.createImageSearch(createSearchContextRequest);
			  
// получить идентификатор состояния контекста поиска
String searchContextId = status.getId();

Извлечь функции изображения

Теперь пришло время извлечь функции изображений и добавить их в контекст поиска.

// Извлечение функций изображений и добавление их в контекст поиска
for (File file : allFiles) 
{
    CreateImageFeaturesRequest request = new CreateImageFeaturesRequest(searchContextId, null, null, "internal", null,null);
		imageApi.createImageFeatures(request);
}

Найти повторяющиеся изображения

  • Укажите пороговое значение подобия
  • Во-вторых, создайте набор дубликатов изображений, используя объект ImageDuplicatesSet.
  • Теперь просмотрите список повторяющихся изображений и найдите сходство изображений, используя метод getSimilarity(…)
// указать пороговое значение сходства
Double similarityThreshold = 90.0;
			    
// создать дубликат набора изображений
ImageDuplicatesSet result = imageApi.findImageDuplicates(
    new FindImageDuplicatesRequest(status.getId(), similarityThreshold, folder, storage));

// распечатать количество дубликатов изображений
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());
    }
}

Найти дубликат фотографии с помощью команд cURL

В этом разделе мы собираемся использовать команды cURL для доступа к REST API через терминал командной строки. Теперь в качестве предварительного условия нам нужно сначала сгенерировать токен доступа JWT (на основе учетных данных клиента) при выполнении следующей команды.

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"

На этом этапе предполагается, что все изображения загружены в облачное хранилище, и теперь нам нужно создать идентификатор контекста поиска с помощью вызова API CreateImageSearch. Пожалуйста, выполните следующую команду

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

Тело ответа

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

Выполните следующую команду, чтобы найти дубликаты изображений с помощью API-вызова FindImageDuplicates. В следующей команде используется созданный выше идентификатор контекста поиска.

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

Заключение

В этой статье мы узнали подробности о том, как найти дубликаты изображений с помощью Java Cloud SDK. Точно так же мы узнали, как команды cURL могут служить для поиска дубликатов изображений. Если вам нужно опробовать эти API в браузере, попробуйте использовать Справочник по API swagger. Точно так же мы настоятельно рекомендуем изучить документацию по продукту, чтобы узнать о других интересных функциях, предлагаемых этим API. Также обратите внимание, что все наши Cloud SDK публикуются под лицензией MIT, поэтому вы можете загрузить полный исходный код с GitHub и изменить его в соответствии со своими требованиями. В случае возникновения каких-либо проблем вы можете обратиться к нам для быстрого решения через бесплатный форум поддержки продукта.

Статьи по Теме

Пожалуйста, перейдите по следующим ссылкам, чтобы узнать больше о: