foto duplicada

Encuentre imágenes duplicadas usando Java Cloud SDK

Nuestro cerebro se dedica al procesamiento visual y nuestro amor por las imágenes radica en nuestra cognición y capacidad de atención. Las imágenes pueden captar nuestra atención fácilmente y muchos dispositivos, incluidos teléfonos celulares, cámaras digitales, escáneres, etc., producen una gran cantidad de imágenes. Además, las imágenes tienen diferentes algoritmos de compresión y las imágenes rasterizadas son muy comunes entre ellas porque consumen menos espacio de almacenamiento. Pero aún así, con el paso del tiempo, terminamos creando fotos duplicadas, imágenes redundantes, etc. Tenemos una gran cantidad de aplicaciones que ofrecen la capacidad de encontrar imágenes duplicadas, incluido el buscador de imágenes duplicadas. En caso de que tenga imágenes almacenadas en Google Photos, puede intentar usar el buscador de fotos duplicadas de Google, instalar el buscador de fotos duplicadas de Windows 10 o el buscador de fotos duplicadas de Mac (dependiendo de su sistema operativo). Sin embargo, en este artículo, vamos a arrojar luz sobre cómo desarrollar un asombroso buscador de fotos duplicadas usando la API REST que se puede usar en cualquier plataforma.

API de procesamiento de imágenes

Hay disponible una variedad de aplicaciones para el procesamiento de imágenes que ofrecen funciones para crear, editar y manipular archivos de imágenes. También brindan capacidades que incluyen la búsqueda de imágenes basada en técnicas de búsqueda inversa de imágenes o cualquier otro algoritmo. Sin embargo, si está interesado en tener una solución programática basada en la API REST basada en la búsqueda inversa de imágenes, entonces Aspose.Imaging Cloud es la opción definitiva. Su potente motor de búsqueda ayuda a los desarrolladores a agregar funciones de búsqueda de imágenes inversas en su aplicación en cualquier plataforma sin problemas. Incluso puede iniciar la operación de comparación de imágenes para encontrar duplicados de fotos entre varias otras imágenes. Como resultado de esta operación, obtiene la lista de imágenes más similares de acuerdo con las siguientes condiciones:

  • grado de similitud
  • El umbral mínimo de similitud
  • Algoritmo de comparación

Ahora, para tener un procesamiento de imágenes similar y capacidades de búsqueda de imágenes duplicadas dentro de la aplicación Java, necesitamos usar Aspose.Imaging Cloud SDK for Java ya que es un contenedor alrededor de la API de la nube. Entonces, el siguiente paso es agregar su referencia en el proyecto Java al incluir la siguiente información en pom.xml del proyecto de tipo de compilación 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>

Ahora, si no ha creado una cuenta en Aspose Cloud Dashboard, puede registrarse para una prueba gratuita a través de una dirección de correo electrónico válida. Ahora inicie sesión con la cuenta recién creada y busque/cree el ID del cliente y el secreto del cliente en Cloud Dashboard. Estos detalles son necesarios para fines de autenticación en las siguientes secciones.

Encuentra imágenes duplicadas usando Java

La búsqueda inversa de imágenes es una técnica que lo ayuda a buscar imágenes visualmente similares en función de su imagen de muestra. A continuación se presentan los casos de uso más comunes para esta función:

Busque imágenes duplicadas y elimine los duplicados Buscar contenido imágenes similares Buscar contenido inapropiado Buscar imágenes firmadas digitalmente

Actualmente, nuestra API es compatible con la búsqueda de imágenes basada en contenido, la búsqueda de imágenes duplicadas, la búsqueda de imágenes por etiquetas registradas personalizadas, la comparación de imágenes y la detección de similitudes y las operaciones de extracción de características de imágenes. Ahora, en esta sección, vamos a discutir los detalles sobre cómo encontrar imágenes duplicadas utilizando la técnica de imagen inversa. Ahora, para cumplir con este requisito, usamos el algoritmo AKAZE para la detección de características y el algoritmo RandomBinaryTree para la coincidencia de características en el ejemplo. Seguiremos estos pasos para encontrar las imágenes duplicadas:

  • Subir imágenes al almacenamiento en la nube
  • Crear contexto de búsqueda
  • Extraer características de la imagen
  • Encuentra imágenes duplicadas

Subir imágenes al almacenamiento en la nube

Utilice el siguiente fragmento de código para cargar archivos de imagen desde la unidad local al almacenamiento en la nube

  • En primer lugar, cree un objeto de ImagingApi mientras proporciona ClientID y Client
  • En segundo lugar, lea todos los archivos de imagen del directorio especificado
  • Filtre solo archivos de imagen y agréguelos a la lista filtrada
  • Cargue las imágenes en el almacenamiento en la nube usando el método uploadFile(…) mientras toma el objeto UploadFileRequest como argumento
// Obtenga ClientID y ClientSecret de https://dashboard.aspose.cloud/
String clientId = "7ef10407-c1b7-43bd-9603-5ea9c6db83cd";
String clientSecret = "ba7cc4dc0c0478d7b508dd8ffa029845";

// crear objeto de imagen
ImagingApi imageApi = new ImagingApi(clientSecret, clientId);

File directory = new File("/Users/");
//Obtener todos los archivos de la carpeta
File[] allFiles = directory.listFiles();
if (allFiles == null || allFiles.length == 0) {
    throw new RuntimeException("No files present in the directory: " + directory.getAbsolutePath());
}
			 
//Configure las extensiones de imagen requeridas aquí.
List<String> supportedImageExtensions = Arrays.asList("jpg", "png", "gif", "webp");
			 
int counter =0;
//Filtrar solo archivos de imagen
List<File> acceptedImages = new ArrayList<>();
for (File file : allFiles) {
    //Analizar la extensión del archivo
    String fileExtension = file.getName().substring(file.getName().lastIndexOf(".") + 1);
    //Compruebe si la extensión aparece en la lista de extensiones de imágenes admitidas
    if (supportedImageExtensions.stream().anyMatch(fileExtension::equalsIgnoreCase)) {
        //Agregar la imagen a la lista filtrada
        acceptedImages.add(file);
			    
    // cargar la primera presentación de PowerPoint
    byte[] bytes = Files.readAllBytes(file.toPath());
	
    // crear solicitud de carga de archivo
    UploadFileRequest request = new UploadFileRequest(acceptedImages.get(counter).getName(),bytes,null);
    // cargar archivo de imagen al almacenamiento en la nube
    imageApi.uploadFile(request);
    // aumentar el contador de archivos
    counter+=1;
    }
}

Crear contexto de búsqueda

  • Primero necesitamos especificar el algoritmo de detección de características como akaze
  • En segundo lugar, especifique el algoritmo para la coincidencia de características como randomBinaryTree
  • En tercer lugar, cree una solicitud de búsqueda de imágenes utilizando el objeto CreateImageSearchRequest
  • Ahora cree el estado de contexto de búsqueda a través del método createImageSearch(…)
// especificar algoritmo para la detección de características
String detector = "akaze";
// especificar el algoritmo para la coincidencia de características
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

// Crear solicitud de búsqueda de imágenes
CreateImageSearchRequest createSearchContextRequest = new CreateImageSearchRequest(detector,matchingAlgorithm, folder, storage);
// crear estado de contexto de búsqueda 
SearchContextStatus status = imageApi.createImageSearch(createSearchContextRequest);
			  
// obtener el ID de estado del contexto de búsqueda
String searchContextId = status.getId();

Extraer características de la imagen

Ahora es el momento de extraer las características de las imágenes y agregarlas al contexto de búsqueda.

// Extraiga las características de las imágenes y agréguelas al contexto de búsqueda
for (File file : allFiles) 
{
    CreateImageFeaturesRequest request = new CreateImageFeaturesRequest(searchContextId, null, null, "internal", null,null);
		imageApi.createImageFeatures(request);
}

Encuentra imágenes duplicadas

  • Especifique el valor del umbral de similitud
  • En segundo lugar, cree un conjunto de imágenes duplicadas usando el objeto ImageDuplicatesSet
  • Ahora itere a través de la lista de imágenes duplicadas y encuentre similitudes de imágenes usando el método getSimilarity(…)
// especificar el valor del umbral de similitud
Double similarityThreshold = 90.0;
			    
// crear conjunto de imágenes duplicadas
ImageDuplicatesSet result = imageApi.findImageDuplicates(
    new FindImageDuplicatesRequest(status.getId(), similarityThreshold, folder, storage));

// imprimir el conteo de imágenes duplicadas
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());
    }
}

Encuentre foto duplicada usando los comandos cURL

En esta sección, aprovecharemos el uso de comandos cURL para acceder a las API REST a través de la terminal de línea de comandos. Ahora, como requisito previo, primero debemos generar un token de acceso JWT (basado en las credenciales del cliente) mientras ejecutamos el siguiente comando.

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"

Este paso espera que todas las imágenes se carguen en el almacenamiento en la nube y ahora necesitamos crear una ID de contexto de búsqueda a través de la llamada a la API CreateImageSearch. Por favor, ejecute el siguiente comando

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

Cuerpo de respuesta

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

Ejecute el siguiente comando para encontrar duplicados de imágenes mediante la llamada a la API FindImageDuplicates. En el siguiente comando, se utiliza el ID de contexto de búsqueda generado anteriormente.

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

Conclusión

En este artículo, hemos aprendido sobre los detalles sobre cómo encontrar imágenes duplicadas usando Java Cloud SDK. De manera similar, hemos aprendido cómo los comandos cURL pueden servir como un buscador de imágenes duplicadas. En caso de que necesite probar estas API dentro del navegador, intente usar la Referencia de la API de Swagger. Del mismo modo, recomendamos encarecidamente explorar la Documentación del producto para conocer otras características interesantes que ofrece esta API. Además, tenga en cuenta que todos nuestros SDK de Cloud se publican con licencia MIT, por lo que puede considerar descargar el código fuente completo de GitHub y modificarlo según sus requisitos. En caso de cualquier problema, puede considerar acercarse a nosotros para una resolución rápida a través del [foro de soporte del producto] gratuito 9.

Artículos relacionados

Visite los siguientes enlaces para obtener más información sobre: