фото дублікат

Знайдіть повторювані зображення за допомогою Java Cloud SDK

Наш мозок присвячує себе візуальній обробці, і наша любов до зображень залежить від нашого пізнання та здатності звертати увагу. Зображення можуть легко привернути нашу увагу, і багато пристроїв, включаючи стільникові телефони, цифрові камери, сканери тощо, створюють велику кількість зображень. Крім того, зображення мають різні алгоритми стиснення, і растрові зображення дуже поширені серед них, оскільки вони займають менше місця для зберігання. Але все одно з плином часу ми створюємо дублікати фотографій, зайві зображення тощо. У нас є безліч програм, які пропонують можливості пошуку дублікатів зображень, включаючи пошук дублікатів зображень. Якщо у вас є зображення, збережені в Google Photos, ви можете спробувати скористатися інструментом пошуку дублікатів фотографій 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);
			  
// отримати ID статусу контексту пошуку
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 і змінити його відповідно до своїх вимог. У разі будь-яких проблем ви можете звернутися до нас за швидким вирішенням через безкоштовний форум підтримки продуктів.

Схожі статті

Перейдіть за наведеними нижче посиланнями, щоб дізнатися більше про: