API de búsqueda inversa de imágenes

Estamos emocionados de informarle sobre las nuevas características introducidas en Aspose.Imaging Cloud API. Ahora soporta fuentes de imágenes basadas en la web para la búsqueda de imágenes inversa. La función de corrección de inclinación de imágenes también hace que la API no tenga comparación. Estamos trabajando y mejorando continuamente para ofrecerle las mejores soluciones posibles.

La búsqueda inversa de imágenes es útil para encontrar imágenes duplicadas o similares. También puede ayudar a monitorear contenido obsceno o gráfico. También puede contrarrestar violaciones de derechos de autor o falsificaciones de marcas registradas buscando imágenes digitalmente firmadas con la búsqueda inversa. Además, la corrección de sesgo de imágenes es otra característica que añade valor a la API de Aspose.Imaging Cloud. También es relevante para documentos PDF escaneados donde a menudo existen imágenes sesgadas. Tales documentos PDF se convierten con frecuencia en documentos PDF buscables donde los resultados pueden mejorarse corrigiendo el sesgo de las imágenes. Desglosemos estas características a continuación.

Búsqueda inversa de imágenes utilizando Aspose.Imaging Cloud SDK para Python

Varios SDKs están disponibles para comunicarse con la API de Aspose.Imaging Cloud. Los SDKs se encargan de todos los detalles menores para que pueda proceder con sus requisitos sin problemas. Los SDKs incluyen .NET, Java, Python, PHP, Ruby, Android y Node.js. Aquí trabajaremos con un ejemplo en Python:

Primero que nada, necesitarías un sign up gratuito en Aspose.Cloud. Instala Python 2.7 o posterior y luego añade el siguiente PyPi package a tu requirements.txt.

aspose-imaging-cloud>=20.1

Ahora importa las dependencias como se indica a continuación:

import aspose-imaging-cloud

Ahora, puedes usar el siguiente código de Python para llamar a las API y probar la función:

    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

        # Añadir imágenes del sitio web al contexto de búsqueda
        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)

        # Descarga la imagen del sitio web
        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)

        # Cambiar el tamaño de la imagen descargada para demostrar las capacidades del motor de búsqueda
        resized_image = self._imaging_api.create_resized_image(requests.CreateResizedImageRequest(
            path, 600, 400, "jpg", storage=storage))

        # Sube la imagen a la nube
        image_name = 'ReverseSearch.jpg'
        self._imaging_api.upload_file(requests.UploadFileRequest(ImagingAiBase.CLOUD_PATH + "/" + image_name,
                                                                 resized_image, storage))

        # Encuentra imágenes similares en el contexto de búsqueda
        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))

La fuente de imágenes basada en la web para la búsqueda inversa de imágenes está bien elaborada en este ejemplo. Incluye un paso adicional de redimensionar la imagen para demostrar la eficiencia de la API. Las dimensiones de la imagen pueden variar, pero la API producirá resultados confiables y precisos. A continuación se presenta la captura de pantalla de la salida:

Como puedes notar, el número de imágenes similares, la URL y el porcentaje de similitud se muestran mediante los parámetros en la respuesta de la API.

Image Deskewing using Aspose.Imaging Cloud SDK for .NET

Las imágenes contienen mucha información y el procesamiento de imágenes ha adquirido mucha importancia en estos días. Un caso de uso muy común son las imágenes sesgadas en documentos PDF escaneados o a menudo en las imágenes de cámaras de teléfonos móviles. La API de Aspose.Imaging Cloud ahora incluye la función de enderezar las imágenes. Puedes enderezar las imágenes en formatos BMP, GIF, JPEG, JPEG2000, PSD, TIFF, WEBP y PNG. Consideremos un ejemplo en .NET para enderezar una imagen TIFF.

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

namespace AsposeImagingCloudSdkExamples
{
    /// <summary>
    /// Ejemplo de corrección de inclinación de imagen.
    /// </summary>
    /// <seealso cref=\"AsposeImagingCloudSDKExamples.ImagingBase\" />
    class DeskewImage : ImagingBase
    {
        /// <summary>
        /// Inicializa una nueva instancia de la <see cref=\"DeskewImage\"/> clase.
        /// </summary>
        /// <param name=\"imagingApi\">La API de imagen.</param>
        public DeskewImage(ImagingApi imagingApi) : base(imagingApi)
        {
            PrintHeader("Deskew image example:");
        }

        /// <summary>
        /// Obtiene el nombre del archivo de imagen de ejemplo.
        /// </summary>
        /// <value>
        /// El nombre del archivo de imagen de ejemplo.
        /// </value>
        /// <remarks>
        /// Los formatos de entrada podrían ser uno de los siguientes:
        /// BMP, GIF, JPEG, JPEG2000, PSD, TIFF, WEBP, PNG
        /// </remarks>
        protected override string SampleImageFileName => "Sample_05_Scan1_SkewToLeft.tif";

        private const string SaveImageFormat = "tif";

        /// <summary>
        /// Deskews una imagen de un almacenamiento en la nube.
        /// </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();
        }

        /// <summary>
        /// Deskew una imagen existente y subir la imagen actualizada a un almacenamiento en la nube.
        /// </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();
        }

        /// <summary>
        /// Deskews una imagen. Los datos de la imagen se envían en un flujo de solicitud.
        /// </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 ejemplo sube una imagen de muestra a Cloud Storage, la endereza y sube la imagen actualizada a Cloud Storage. A continuación se muestran las capturas de pantalla de las imágenes TIFF de entrada y salida.

Entrada de imagen TIFF

Output TIFF Image (Deskewed)

Aspose.Imaging Cloud SDK para Ruby

Otra adición importante en la línea de SDKs es que hemos publicado Aspose.Imaging Cloud SDK for Ruby. Te permite integrar funciones de procesamiento de imágenes robustas en tus aplicaciones Ruby.

Le animamos a que pruebe estas funciones eficientes de la API y comparta sus experiencias con nosotros. Háganos saber si tiene alguna sugerencia o consulta. Esperamos su respuesta a través de Free Support Forums.

Artículo relacionado:

Introduciendo Aspose.Imaging Cloud V3