Nosso cérebro se dedica ao processamento visual e nosso amor por imagens reside em nossa cognição e capacidade de atenção. As imagens são capazes de atrair nossa atenção facilmente e muitos dispositivos, incluindo telefones celulares, câmeras digitais, scanners, etc., produzem uma grande quantidade de imagens. Além disso, as imagens têm diferentes algoritmos de compactação e as imagens raster são muito comuns entre elas porque consomem menos espaço de armazenamento. Mas ainda assim, com o passar do tempo, acabamos criando fotos duplicadas, imagens redundantes etc. Temos uma infinidade de aplicativos que oferecem recursos para encontrar imagens duplicadas, incluindo o localizador de imagens duplicadas. Caso você tenha imagens armazenadas no google photos, você pode tentar usar o localizador de fotos duplicadas do google, instalar o localizador de fotos duplicadas do windows 10 ou o localizador de fotos duplicadas do mac (dependendo do seu sistema operacional). No entanto, neste artigo, vamos esclarecer como desenvolver um incrível localizador de fotos duplicadas usando a API REST, que pode ser usada em qualquer plataforma.
- API de processamento de imagem
- Encontre imagens duplicadas usando Java
- Encontrar foto duplicada usando comandos cURL
API de processamento de imagem
Uma variedade de aplicativos está disponível para processamento de imagem, oferecendo recursos para criar, editar e manipular arquivos de imagem. Eles também fornecem recursos, incluindo pesquisa de imagens com base em técnicas de pesquisa reversa de imagens ou qualquer outro algoritmo. No entanto, se você estiver interessado em ter uma solução programática baseada em API REST com base na pesquisa reversa de imagens, Aspose.Imaging Cloud é a escolha definitiva. Seu poderoso mecanismo de pesquisa ajuda os desenvolvedores a adicionar recursos de pesquisa reversa de imagens em seus aplicativos em qualquer plataforma sem problemas. Você pode até iniciar a operação de comparação de imagens para encontrar fotos duplicadas entre várias outras imagens. Como resultado desta operação, você obtém a lista de imagens mais semelhantes de acordo com as seguintes condições:
- Grau de similaridade
- O limite mínimo de similaridade
- Algoritmo de comparação
Agora, para ter processamento de imagem semelhante e recursos de localizador de imagens duplicados no aplicativo Java, precisamos usar Aspose.Imaging Cloud SDK for Java como um wrapper em torno da Cloud API. Portanto, a próxima etapa é adicionar sua referência no projeto java, incluindo as seguintes informações no pom.xml do projeto de tipo de compilação maven.
<repositories>
<repository>
<id>aspose-cloud</id>
<name>artifact.aspose-cloud-releases</name>
<url>https://artifact.aspose.cloud/repo</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-imaging-cloud</artifactId>
<version>22.4</version>
</dependency>
</dependencies>
Agora, se você não criou uma conta no Aspose Cloud Dashboard, pode se inscrever para uma avaliação gratuita por meio de um endereço de e-mail válido. Agora faça o login usando a conta recém-criada e procure/crie ID do cliente e Segredo do cliente em Cloud Dashboard. Esses detalhes são necessários para fins de autenticação nas seções a seguir.
Encontre imagens duplicadas usando Java
A pesquisa reversa de imagens é uma técnica que ajuda a pesquisar imagens visualmente semelhantes com base em sua imagem de amostra. Abaixo estão os casos de uso mais comuns para esse recurso:
Procure por imagem duplicada e remova as duplicatas Pesquise imagens semelhantes de conteúdo Pesquise por conteúdo impróprio Pesquisar imagens assinadas digitalmente
Atualmente, nossa API oferece suporte à pesquisa de imagens baseada em conteúdo, pesquisa de imagens duplicadas, pesquisa de imagens por tags registradas personalizadas, comparação de imagens e detecção de similaridade e operações de extração de recursos de imagem. Agora, nesta seção, discutiremos os detalhes sobre como encontrar imagens duplicadas usando a técnica de imagem reversa. Agora, para atender a esse requisito, usamos o algoritmo AKAZE para detecção de recursos e o algoritmo RandomBinaryTree para correspondência de recursos no exemplo. Seguiremos estas etapas para encontrar as imagens duplicadas:
- Carregar imagens para armazenamento em nuvem
- Criar contexto de pesquisa
- Extrair recursos de imagem
- Encontrar Imagens Duplicadas
Carregar imagens para armazenamento em nuvem
Use o trecho de código a seguir para fazer upload de arquivos de imagem da unidade local para o armazenamento em nuvem
- Em primeiro lugar, crie um objeto de ImagingApi ao fornecer ClientID e Client
- Em segundo lugar, leia todos os arquivos de imagem do diretório especificado
- Filtre apenas arquivos de imagem e adicione-os à lista filtrada
- Carregue as imagens para o armazenamento em nuvem usando o método uploadFile(…) enquanto usa o objeto UploadFileRequest como argumento
// Obtenha ClientID e ClientSecret em https://dashboard.aspose.cloud/
String clientId = "7ef10407-c1b7-43bd-9603-5ea9c6db83cd";
String clientSecret = "ba7cc4dc0c0478d7b508dd8ffa029845";
// criar objeto de imagem
ImagingApi imageApi = new ImagingApi(clientSecret, clientId);
File directory = new File("/Users/");
//Obtenha todos os arquivos da pasta
File[] allFiles = directory.listFiles();
if (allFiles == null || allFiles.length == 0) {
throw new RuntimeException("No files present in the directory: " + directory.getAbsolutePath());
}
//Defina as extensões de imagem necessárias aqui.
List<String> supportedImageExtensions = Arrays.asList("jpg", "png", "gif", "webp");
int counter =0;
//Filtrar apenas arquivos de imagem
List<File> acceptedImages = new ArrayList<>();
for (File file : allFiles) {
//Analisar a extensão do arquivo
String fileExtension = file.getName().substring(file.getName().lastIndexOf(".") + 1);
//Verifique se a extensão está listada em supportedImageExtensions
if (supportedImageExtensions.stream().anyMatch(fileExtension::equalsIgnoreCase)) {
//Adicione a imagem à lista filtrada
acceptedImages.add(file);
// carregar a primeira apresentação do PowerPoint
byte[] bytes = Files.readAllBytes(file.toPath());
// criar solicitação de upload de arquivo
UploadFileRequest request = new UploadFileRequest(acceptedImages.get(counter).getName(),bytes,null);
// carregar arquivo de imagem para armazenamento em nuvem
imageApi.uploadFile(request);
// aumentar contador de arquivos
counter+=1;
}
}
Criar contexto de pesquisa
- Primeiro, precisamos especificar o algoritmo de detecção de recursos como akaze
- Em segundo lugar, especifique o algoritmo para correspondência de recursos como randomBinaryTree
- Em terceiro lugar, crie uma solicitação de pesquisa de imagens usando o objeto CreateImageSearchRequest
- Agora crie o status de contexto de pesquisa por meio do método createImageSearch(…)
// especificar algoritmo para detecção de recursos
String detector = "akaze";
// especificar algoritmo para correspondência de recursos
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
// Criar solicitação de pesquisa de imagens
CreateImageSearchRequest createSearchContextRequest = new CreateImageSearchRequest(detector,matchingAlgorithm, folder, storage);
// criar status de contexto de pesquisa
SearchContextStatus status = imageApi.createImageSearch(createSearchContextRequest);
// obter ID de status do contexto de pesquisa
String searchContextId = status.getId();
Extrair recursos de imagem
Agora é hora de extrair os recursos das imagens e adicioná-los ao contexto de pesquisa.
// Extraia recursos de imagens e adicione-os ao contexto de pesquisa
for (File file : allFiles)
{
CreateImageFeaturesRequest request = new CreateImageFeaturesRequest(searchContextId, null, null, "internal", null,null);
imageApi.createImageFeatures(request);
}
Encontrar Imagens Duplicadas
- Especifique o valor do limite de similaridade
- Em segundo lugar, crie um conjunto de imagens duplicado usando o objeto ImageDuplicatesSet
- Agora percorra a lista de imagens duplicadas e encontre similaridade de imagem usando o método getSimilarity(…)
// especifique o valor do limite de similaridade
Double similarityThreshold = 90.0;
// criar conjunto de imagens duplicado
ImageDuplicatesSet result = imageApi.findImageDuplicates(
new FindImageDuplicatesRequest(status.getId(), similarityThreshold, folder, storage));
// imprimir a contagem de imagens 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());
}
}
Encontrar foto duplicada usando comandos cURL
Nesta seção, aproveitaremos o uso de comandos cURL para acessar APIs REST por meio do terminal de linha de comando. Agora, como pré-requisito, precisamos primeiro gerar um token de acesso JWT (com base nas credenciais do cliente) ao executar o seguinte 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"
Esta etapa espera que todas as imagens sejam carregadas no armazenamento em nuvem e agora precisamos criar um ID de contexto de pesquisa por meio da chamada da API CreateImageSearch. Por favor, execute o seguinte 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>"
corpo da resposta
{
"id": "0b9ac539-07fb-462a-91cb-8a8d5069ba4d",
"searchStatus": "Idle"
}
Execute o seguinte comando para encontrar duplicatas de imagem usando a chamada API FindImageDuplicates. No comando a seguir, o ID do contexto de pesquisa gerado acima é usado.
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>"
Conclusão
Neste artigo, aprendemos sobre os detalhes de como encontrar imagens duplicadas usando o Java Cloud SDK. Da mesma forma, aprendemos como os comandos cURL podem servir como um localizador de imagens duplicadas. Caso precise experimentar essas APIs no navegador, tente usar a Referência da API do swagger. Da mesma forma, é altamente recomendável explorar a Documentação do produto para conhecer outros recursos interessantes oferecidos por esta API. Além disso, observe que todos os nossos Cloud SDKs são publicados sob a licença MIT, portanto, considere fazer o download do código-fonte completo do GitHub e modificá-lo de acordo com seus requisitos. Em caso de problemas, considere entrar em contato conosco para uma resolução rápida por meio do [fórum de suporte ao produto] gratuito 9.
Artigos relacionados
Por favor, visite os links a seguir para saber mais sobre: