API de busca reversa de imagens

Estamos empolgados em informá-lo sobre os novos recursos introduzidos na API Aspose.Imaging Cloud. Agora, ela suporta fonte de imagem baseada na web para busca reversa de imagens. O recurso de correção de distorção de imagem também torna a API imbatível. Estamos continuamente trabalhando e melhorando para oferecer as melhores soluções possíveis.

A pesquisa reversa de imagens é útil para encontrar imagens duplicadas ou semelhantes. Ela também pode ajudar a monitorar conteúdo obsceno ou gráfico. Você também pode combater violações de direitos autorais ou falsificações de marcas registradas pesquisando imagens digitalmente assinadas com a busca reversa. Além disso, a correção de inclinação de imagem é outro recurso que agrega valor à API Aspose.Imaging Cloud. Ele também é relevante para documentos PDF digitalizados onde imagens inclinadas frequentemente existem. Esses documentos PDF são frequentemente convertidos em documentos PDF pesquisáveis onde os resultados podem ser melhorados corrigindo a inclinação das imagens. Vamos dissecar esses recursos abaixo.

Pesquisa Reversa de Imagem usando Aspose.Imaging Cloud SDK para Python

Vários SDKs estão disponíveis para se comunicar com a API Aspose.Imaging Cloud. Os SDKs cuidam de todos os pequenos detalhes para que você possa prosseguir com suas necessidades sem complicações. Os SDKs incluem .NET, Java, Python, PHP, Ruby, Android e Node.js. Aqui, estaremos trabalhando com um exemplo em Python:

Primeiramente, você precisaria de um sign up gratuito na Aspose.Cloud. Instale Python 2.7 ou posterior e adicione o seguinte PyPi package ao seu requirements.txt.

aspose-imaging-cloud>=20.1

Agora importe as dependências conforme abaixo:

import aspose-imaging-cloud

Agora, você pode usar o código Python abaixo para chamar as APIs e testar o recurso:

    def search_image_from_web_source(self):
        """Finds the similar images from the URL source"""
        print('Finds similar images from URL:')

        similarity_threshold = 30.0
        max_count = 3
        folder = ImagingAiBase.CLOUD_PATH  # Folder with image to process
        storage = None  # We are using default Cloud Storage

        # Adicione imagens do site ao contexto de pesquisa
        image_source_url = urllib.quote_plus('https://www.f1news.ru/interview/hamilton/140909.shtml')
        self._imaging_api.create_web_site_image_features(
            requests.CreateWebSiteImageFeaturesRequest(self._search_context_id, image_source_url, folder, storage))

        self._wait_idle(self._search_context_id)

        # Baixe a imagem do site
        image_data = req.get('https://cdn.f1ne.ws/userfiles/hamilton/140909.jpg')
        path = os.path.abspath(os.path.join(ImagingAiBase.OUTPUT_FOLDER, 'WebSearchSample.jpg'))
        with open(path, "wb") as f:
            f.write(image_data.content)

        # Redimensionar imagem baixada para demonstrar as capacidades do mecanismo de busca
        resized_image = self._imaging_api.create_resized_image(requests.CreateResizedImageRequest(
            path, 600, 400, "jpg", storage=storage))

        # Carregar imagem para a nuvem
        image_name = 'ReverseSearch.jpg'
        self._imaging_api.upload_file(requests.UploadFileRequest(ImagingAiBase.CLOUD_PATH + "/" + image_name,
                                                                 resized_image, storage))

        # Encontre imagens similares no contexto de busca
        find_response = self._imaging_api.find_similar_images(
            requests.FindSimilarImagesRequest(self._search_context_id, similarity_threshold, max_count,
                                              image_id=ImagingAiBase.CLOUD_PATH + "/" + image_name,
                                              folder=folder, storage=storage))

        print('Similar images found: ' + str(len(find_response.results)))
        print('Similar image id: ' + find_response.results[0].image_id)
        print('Similarity: ' + str(find_response.results[0].similarity))

A fonte de imagem baseada em site para busca reversa de imagem está bem elaborada neste exemplo. Ela inclui uma etapa adicional de redimensionamento da imagem para demonstrar a eficiência da API. As dimensões da imagem podem diferir, mas a API produzirá resultados confiáveis e precisos. A seguir está a captura de tela da saída:

Como você pode notar, o número de imagens semelhantes, a URL e a porcentagem de similaridade são mostrados pelos parâmetros na resposta da API.

Desenho de Imagem usando Aspose.Imaging Cloud SDK para .NET

As imagens contêm muitas informações e o processamento de imagens assumiu muita importância atualmente. Um caso de uso muito comum são imagens inclinadas em documentos PDF digitalizados ou frequentemente nas imagens de câmeras de telefones celulares. A API Aspose.Imaging Cloud agora inclui a funcionalidade de endireitar as imagens. Você pode endireitar as imagens nos formatos BMP, GIF, JPEG, JPEG2000, PSD, TIFF, WEBP e PNG. Vamos considerar um exemplo em .NET para endireitar uma imagem TIFF.

using System;
using System.IO;
using Aspose.Imaging.Cloud.Sdk.Api;
using Aspose.Imaging.Cloud.Sdk.Model.Requests;

namespace AsposeImagingCloudSdkExamples
{
    /// <resumo>
    /// Exemplo de correção de inclinação da imagem.
    /// </summary>
    /// <seealso cref=\"AsposeImagingCloudSDKExamples.ImagingBase\" />
    class DeskewImage : ImagingBase
    {
        /// <resumo>
        /// Inicializa uma nova instância da classe <see cref=\"DeskewImage\"/>.
        /// </summary>
        /// <param name=\"imagingApi\">A API de imagem.</param>
        public DeskewImage(ImagingApi imagingApi) : base(imagingApi)
        {
            PrintHeader("Deskew image example:");
        }

        /// <resumo>
        /// Obtém o nome do arquivo da imagem de exemplo.
        /// </summary>
        /// <value>
        /// O nome do arquivo de imagem de exemplo.
        /// </value>
        /// <remarks>
        /// Os formatos de entrada podem ser um dos seguintes:
        //BMP, GIF, JPEG, JPEG2000, PSD, TIFF, WEBP, PNG
        /// </remarks>
        protected override string SampleImageFileName => "Sample_05_Scan1_SkewToLeft.tif";

        private const string SaveImageFormat = "tif";

        /// <resumo>
        /// Deskews uma imagem de um armazenamento em nuvem.
        /// </summary>
        public void DeskewImageFromStorage()
        {
            Console.WriteLine("Deskew the image from cloud storage");

            UploadSampleImageToCloud();

            bool resizeProportionally = true;
            string bkColor = "white";
            string folder = CloudPath; // Input file is saved at the Examples folder in the storage
            string storage = null; // We are using default Cloud Storage

            var request = new DeskewImageRequest(SampleImageFileName, resizeProportionally, bkColor, folder, storage);

            Console.WriteLine($"Call DeskewImage with params: resizeProportionally:{resizeProportionally}, bkColor:{bkColor}");

            using (Stream updatedImage = this.ImagingApi.DeskewImage(request))
            {
                SaveUpdatedSampleImageToOutput(updatedImage, false, SaveImageFormat);
            }

            Console.WriteLine();
        }

        /// <resumo>
        /// Corrija a inclinação de uma imagem existente e faça o upload da imagem atualizada para um armazenamento em nuvem.
        /// </summary>
        public void DeskewImageAndUploadToStorage()
        {
            Console.WriteLine("Deskews the image and upload to cloud storage");

            UploadSampleImageToCloud();

            bool resizeProportionally = true;
            string bkColor = null;
            string folder = CloudPath; // Input file is saved at the Examples folder in the storage
            string storage = null; // We are using default Cloud Storage

            var request = new DeskewImageRequest(SampleImageFileName, resizeProportionally, bkColor, folder, storage);

            Console.WriteLine($"Call DeskewImage with params: resizeProportionally:{resizeProportionally}, bkColor:{bkColor}");

            using (Stream updatedImage = this.ImagingApi.DeskewImage(request))
            {
                UploadImageToCloud(GetModifiedSampleImageFileName(false, SaveImageFormat), updatedImage);
            }

            Console.WriteLine();
        }

        /// <resumo>
        /// Deskews uma imagem. Os dados da imagem são passados em um fluxo de solicitação.
        /// </summary>
        public void CreateDeskewedImageFromRequestBody()
        {
            Console.WriteLine("Deskews the image from request body");

            using (FileStream inputImageStream = File.OpenRead(Path.Combine(ExampleImagesFolder, SampleImageFileName)))
            {
                bool resizeProportionally = true;
                string bkColor = "white";
                string storage = null; // We are using default Cloud Storage
                string outPath = null; // Path to updated file (if this is empty, response contains streamed image)

                var request = new CreateDeskewedImageRequest(inputImageStream, resizeProportionally, bkColor, outPath, storage);

                Console.WriteLine($"Call DeskewImage with params: resizeProportionally:{resizeProportionally}, bkColor:{bkColor}");

                using (Stream updatedImage = this.ImagingApi.CreateDeskewedImage(request))
                {
                    SaveUpdatedSampleImageToOutput(updatedImage, true, SaveImageFormat);
                }
            }

            Console.WriteLine();
        }
    }
}

Este exemplo faz o upload de uma imagem de amostra para o Cloud Storage, corrige a inclinação e faz o upload da imagem atualizada para o Cloud Storage. Abaixo estão as capturas de tela das imagens TIFF de entrada e saída.

Entrada de Imagem TIFF

Saída de Imagem TIFF (Desviada)

Aspose.Imaging Cloud SDK para Ruby

Outra adição importante na linha de SDKs é que publicamos Aspose.Imaging Cloud SDK for Ruby. Ele permite que você integre recursos robustos de processamento de imagem em suas aplicações Ruby.

Nós o incentivamos a experimentar esses recursos eficientes da API e compartilhar suas experiências conosco. Fique à vontade para nos informar se você tem alguma sugestão ou dúvida. Estamos ansiosos para ouvir de você através dos Free Support Forums.

Artigo Relacionado:

Apresentando o Aspose.Imaging Cloud V3