Tutorial: Cargar y analizar un archivo con Azure Functions y Blob Storage

En este tutorial, aprenderá a cargar una imagen en Azure Blob Storage y procesarla mediante Azure Functions y Computer Vision. También aprenderá a implementar desencadenadores y enlaces de Azure Functions como parte de este proceso. Juntos, estos servicios analizarán una imagen cargada que contiene texto, extraerán el texto de ella y, a continuación, almacenarán el texto en una fila de base de datos para realizar análisis posteriores u otros fines.

Azure Blob Storage es la solución de almacenamiento de objetos de Microsoft para la nube y es escalable de forma masiva. Blob Storage está diseñado para almacenar imágenes y documentos, transmitir archivos multimedia, administrar datos de copia de seguridad y archivo, y mucho más. Puede obtener más información sobre Blob Storage en la página de información general.

Azure Functions es una solución de equipo sin servidor que permite escribir y ejecutar pequeños bloques de código como funciones controladas por eventos altamente escalables y sin servidor. Puede obtener más información sobre Azure Functions en la página de información general.

En este tutorial, aprenderá a:

  • Upload imágenes y archivos en Blob Storage
  • Uso de un desencadenador de eventos de Azure Functions para procesar los datos cargados en Blob Storage
  • Usar servicios de Azure AI para analizar una imagen
  • Escritura de datos en Table Storage mediante enlaces de salida de Azure Function

Requisitos previos

Creación de una cuenta de almacenamiento y un contenedor

El primer paso es crear la cuenta de almacenamiento que contendrá los datos de blobs cargados, que en este escenario serán imágenes que contienen texto. Una cuenta de almacenamiento ofrece varios servicios diferentes, pero en este tutorial se usa Blob Storage y Table Storage.

Inicie sesión en Azure Portal.

  1. En la barra de búsqueda en la parte superior del portal, busque Almacenamiento y seleccione el resultado etiquetado como Cuentas de almacenamiento.

  2. En la página Cuentas de almacenamiento, seleccione + Crear en la parte superior izquierda.

  3. En la página Crear una cuenta de almacenamiento, escriba los siguientes valores:

    • Suscripción: elija la suscripción preferida.
    • Grupo de recursos: seleccione Create new (Crear nuevo) e ingrese un nombre de msdocs-storage-function. Luego, seleccione OK.
    • Nombre de la cuenta de almacenamiento: escriba un valor de msdocsstoragefunction. El nombre de la cuenta de almacenamiento debe ser único en Azure, por lo que es posible que tenga que agregar números después del nombre, como msdocsstoragefunction123.
    • Región: Seleccione la región más cercana a usted.
    • Rendimiento: elija Estándar.
    • Redundancia: Deje el valor predeterminado seleccionado.

    Captura de pantalla en la que se muestra cómo crear una cuenta de almacenamiento en Azure.

  4. Seleccione Revisar y crear en la parte inferior y Azure validará la información que especificó. Una vez validada la configuración, elija Crear y Azure comenzará a aprovisionar la cuenta de almacenamiento, lo que puede tardar un momento.

Cree el contenedor.

  1. Una vez aprovisionada la cuenta de almacenamiento, seleccione Ir al recurso. El siguiente paso es crear un contenedor de almacenamiento dentro de la cuenta para almacenar imágenes cargadas para su análisis.

  2. En el panel de navegación, elija Contenedores.

  3. En la página Contenedores, seleccione + Contenedor en la parte superior. En el panel de diapositivas, escriba un nombre de imageanalysis y asegúrese de que el nivel de acceso público esté establecido en Blob (acceso de lectura anónimo solo para blobs). Seleccione Crear.

    Captura de pantalla que muestra cómo crear un contenedor de almacenamiento.

Debería ver que el nuevo contenedor aparece en la lista de contenedores.

Recuperación de la cadena de conexión

El último paso es recuperar la cadena de conexión de la cuenta de almacenamiento.

  1. En el panel de navegación de la izquierda, seleccione la pestaña Claves de acceso.

  2. En la página Claves acceso, seleccione Mostrar claves. Copie el valor de la cadena de conexión en la sección key1 y péguelo en algún lugar para usarlo más adelante. También querrá anotar el nombre de la cuenta de almacenamiento msdocsstoragefunction para más adelante.

    Captura de pantalla que muestra cómo acceder al contenedor de almacenamiento.

Estos valores serán necesarios cuando necesitemos conectar la función de Azure a esta cuenta de almacenamiento.

Crear el servicio Computer Vision

A continuación, cree la cuenta de servicio Computer Vision que procesará los archivos cargados. Computer Vision forma parte de los servicios de Azure AI y ofrece una variedad de características para extraer datos de imágenes. Puede conocer más sobre Computer Vision en la página de información general.

  1. En la barra de búsqueda en la parte superior del portal, busque Equipo y seleccione el resultado etiquetado como Computer Vision.

  2. En la página Computer Vision, seleccione + Crear.

  3. En la página Crear Computer Vision, escriba los siguientes valores:

    • Suscripción: elija la suscripción preferida.
    • Grupo de recursos: use el msdocs-storage-function grupo de recursos creado anteriormente.
    • Región: Seleccione la región más cercana a usted.
    • Nombre: escriba en un nombre de msdocscomputervision.
    • Plan de tarifa: elija Gratis si está disponible; de lo contrario, elija Estándar S1.
    • Active la casilla Aviso de IA responsable si acepta los términos.

    Captura de pantalla que muestra cómo crear un servicio de Computer Vision.

  4. En la parte inferior, seleccione Revisar y crear. Azure tardará un momento en validar la información que escribió. Una vez validada la configuración, elija Crear y Azure comenzará a aprovisionar el servicio de Computer Vision, lo que puede tardar un momento.

  5. Una vez finalizada la operación, seleccione Ir al Recurso.

Recuperación de las claves

A continuación, es necesario encontrar la clave secreta y la dirección URL del punto de conexión del servicio Computer Vision que se va a usar en nuestra aplicación de funciones de Azure.

  1. En la página de información general de Computer Vision, seleccione Claves y punto de conexión.

  2. En la página Claves y Punto de conexión, copie el valor clave 1 y los valores de EndPoint y péguelos en algún lugar para usarlos más adelante.

    Una captura de pantalla que muestra cómo recuperar las claves y el punto de conexión de URL de un servicio de Computer Vision.

Descarga y configuración del proyecto de ejemplo

El código de la función de Azure que se usa en este tutorial se puede encontrar en este repositorio de GitHub. También puede clonar el proyecto mediante el comando siguiente.

git clone https://github.com/Azure-Samples/msdocs-storage-bind-function-service.git \
cd msdocs-storage-bind-function-service/dotnet

El código de proyecto de ejemplo hace las siguientes tareas:

  • Recupera variables de entorno para conectarse a la cuenta de almacenamiento y al servicio Computer Vision.
  • Acepta el archivo cargado como un parámetro de blob.
  • Analiza el blob mediante el servicio Computer Vision.
  • Envía el texto de la imagen analizada a una nueva fila de tabla mediante enlaces de salida.

Una vez que haya descargado y abierto el proyecto, hay algunos conceptos esenciales para comprender en el método principal Run que se muestra a continuación. La función de Azure utiliza enlaces desencadenadores y de salida, que se aplican mediante atributos en la firma del método Run.

El atributoTable usa dos parámetros. El primer parámetro especifica el nombre de la tabla para escribir el valor de texto de imagen analizado devuelto por la función. El segundo Connection parámetro extrae una cadena de conexión de Table Storage de las variables de entorno para que nuestra función de Azure tenga acceso a ella.

El atributo BlobTrigger se usa para enlazar nuestra función al evento de carga en Blob Storage y proporciona ese blob cargado a la función Run. El desencadenador de blobs tiene dos parámetros propios: uno para el nombre del contenedor de blobs para supervisar las cargas y otro para la cadena de conexión de nuestra cuenta de almacenamiento de nuevo.

// Azure Function name and output Binding to Table Storage
[FunctionName("ProcessImageUpload")]
[return: Table("ImageText", Connection = "StorageConnection")]
// Trigger binding runs when an image is uploaded to the blob container below
public async Task<ImageContent> Run([BlobTrigger("imageanalysis/{name}", 
        Connection = "StorageConnection")]Stream myBlob, string name, ILogger log)
{
    // Get connection configurations
    string subscriptionKey = Environment.GetEnvironmentVariable("ComputerVisionKey");
    string endpoint = Environment.GetEnvironmentVariable("ComputerVisionEndpoint");
    string imgUrl = $"https://{ Environment.GetEnvironmentVariable("StorageAccountName")}
                        .blob.core.windows.net/imageanalysis/{name}";

    ComputerVisionClient client = new ComputerVisionClient(
        new ApiKeyServiceClientCredentials(subscriptionKey)) { Endpoint = endpoint };

    // Get the analyzed image contents
    var textContext = await AnalyzeImageContent(client, imgUrl);

    return new ImageContent { 
        PartitionKey = "Images",
        RowKey = Guid.NewGuid().ToString(), Text = textContext 
    };
}

public class ImageContent
{
    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public string Text { get; set; }
}

Este código también recupera valores de configuración esenciales de variables de entorno, como la cadena de conexión de la cuenta de almacenamiento y clave de Computer Vision. Agregaremos estas variables de entorno al entorno de Azure Functions después de implementarlas.

La función ProcessImage también utiliza un segundo método denominado AnalyzeImage, que se muestra a continuación. Este código usa el punto de conexión URL y la clave de nuestra cuenta de Computer Vision para hacer una solicitud a ese servidor para procesar nuestra imagen. La solicitud devolverá todo el texto detectado en la imagen, que se escribirá en Table Storage mediante el enlace de salida en el método Run.

static async Task<string> ReadFileUrl(ComputerVisionClient client, string urlFile)
{
    // Analyze the file using Computer Vision Client
    var textHeaders = await client.ReadAsync(urlFile);
    string operationLocation = textHeaders.OperationLocation;
    Thread.Sleep(2000);
    
    // Complete code omitted for brevity, view in sample project
    
    return text.ToString();
}

Ejecución local

Si desea ejecutar el proyecto localmente, puede propagar las variables de entorno mediante el archivo local.settings.json. Dentro de este archivo, rellene los valores de marcador de posición con los valores que guardó anteriormente al crear los recursos de Azure.

Aunque el código de la función de Azure se ejecutará localmente, se seguirá conectando a los servicios activos en Azure, en lugar de usar emuladores locales.

{
    "IsEncrypted": false,
    "Values": {
      "AzureWebJobsStorage": "UseDevelopmentStorage=true",
      "FUNCTIONS_WORKER_RUNTIME": "dotnet",
      "StorageConnection": "your-storage-account-connection-string",
      "StorageAccountName": "your-storage-account-name",
      "ComputerVisionKey": "your-computer-vision-key",
      "ComputerVisionEndPoint":  "your-computer-vision-endpoint"
    }
}

Implementación del código en Azure Functions

Ya está listo para implementar nuestra aplicación en Azure mediante Visual Studio. También puede crear la aplicación Azure Functions en Azure al mismo tiempo que parte del proceso de implementación.

  1. Para comenzar, seleccione el nodo del proyecto ProcessImage y seleccione Publicar.

  2. En la pantalla del cuadro de diálogo Publicar, seleccione Azure y elija Siguiente.

    Captura de pantalla que muestra cómo seleccionar Azure como destino de implementación.

  3. Seleccione Azure Function App (Windows) o Azure Function App (Linux) en la pantalla siguiente y, a continuación, elija Siguiente de nuevo.

    Captura de pantalla que muestra cómo elegir Azure Functions como destino de implementación específico.

  4. En el paso instancia de Functions, asegúrese de elegir la suscripción en la que desea hacer la implementación. A continuación, seleccione el símbolo verde + en el lado derecho del cuadro de diálogo.

  5. Se abrirá un nuevo diálogo. Escriba los siguientes valores para la nueva aplicación de funciones.

    • Nombre: escriba msdocsprocessimage o algo similar.
    • Nombre de la suscripción: elija la suscripción que quiera usar.
    • Grupo de recursos: use el grupo de recursos msdocs-storage-function creado anteriormente.
    • Tipo de plan: seleccione Consumo.
    • Ubicación: elija la región más cercana.
    • Azure Storage: seleccione la cuenta de almacenamiento que creó anteriormente.

    Captura de pantalla que muestra cómo crear una nueva aplicación de funciones en Azure.

  6. Una vez que haya rellenado todos esos valores, seleccione Crear. Visual Studio y Azure comenzarán a aprovisionar los recursos solicitados, lo que tardará unos minutos en completarse.

  7. Una vez finalizado el proceso, seleccione Finalizar para cerrar el flujo de trabajo del cuadro de diálogo.

  8. El último paso para implementar la función de Azure es seleccionar Publicar en la esquina superior derecha de la pantalla. La publicación de la función también puede tardar unos instantes en completarse. Una vez finalizada, la aplicación se ejecutará en Azure.

Conexión de los servicios

La función de Azure se implementó correctamente, pero aún no se puede conectar a nuestra cuenta de almacenamiento y servicios de Computer Vision. Primero se deben agregar las claves correctas y las cadenas de conexión a los valores de configuración de la aplicación Azure Functions.

  1. En la parte superior del Azure Portal, busque función y seleccione Aplicación de funciones en los resultados.

  2. En la pantalla Aplicación de funciones, seleccione la aplicación de funciones que creó en Visual Studio.

  3. En la página de información general de Aplicación de funciones, seleccione Configuración en el panel de navegación izquierdo. Se abrirá una página en la que podemos administrar varios tipos de opciones de configuración para nuestra aplicación. Por ahora, nos interesa la sección Configuración de la aplicación.

  4. El siguiente paso consiste en agregar la configuración del nombre y la cadena de conexión de la cuenta de almacenamiento, la clave secreta de Computer Vision y el punto de conexión de Computer Vision.

  5. En la pestaña Configuración de la aplicación, seleccione + Nueva configuración de la aplicación. En el control flotante que aparece, escriba los valores siguientes:

    • Nombre: escriba un valor de ComputerVisionKey.
    • Valor: pegue la clave de Computer Vision que guardó anteriormente.
  6. Haga clic en OK para agregar esta configuración a la aplicación.

    Captura de pantalla que muestra cómo agregar una nueva configuración de aplicación a una función de Azure.

  7. A continuación, repitamos este proceso para el punto de conexión de nuestro servicio de Computer Vision, con los valores siguientes:

    • Nombre: escriba un valor de ComputerVisionKey.
    • Valor: pegue la dirección URL del punto de conexión que guardó anteriormente.
  8. Repita este paso de nuevo para la conexión de la cuenta de almacenamiento con los valores siguientes:

    • Nombre: escriba un valor de StorageConnection.
    • Valor: pegue la cadena de conexión que guardó anteriormente.
  9. Por último, repita este proceso una vez más para el nombre de la cuenta de almacenamiento, con los valores siguientes:

    • Nombre: escriba un valor de StorageAccountName.
    • Valor: escriba el nombre de la cuenta de almacenamiento que creó.
  10. Después de agregar esta configuración de la aplicación, asegúrese de seleccionar Guardar en la parte superior de la página de configuración. Cuando se complete el guardado, también puede presionar Actualizar para asegurarse de que se selecciona la configuración.

Todas las variables de entorno necesarias para conectar nuestra función de Azure a diferentes servicios están ahora en vigor.

Carga de una imagen en Blob Storage

Ya está todo listo para probar nuestra aplicación. Puede cargar un blob en el contenedor y, a continuación, comprobar que el texto de la imagen se guardó en Table Storage.

  1. En primer lugar, en la parte superior del Azure Portal, busque Almacenamiento y seleccione cuenta de almacenamiento. En la página cuenta de almacenamiento, seleccione la cuenta de almacenamiento que creó anteriormente.

  2. A continuación, seleccione Contenedores en el panel de navegación izquierdo y, a continuación, vaya al contenedor ImageAnalysis que creó anteriormente. Desde aquí puede cargar una imagen de prueba directamente dentro del explorador.

    Captura de pantalla que muestra cómo navegar al contenedor de almacenamiento.

  3. Puede encontrar algunas imágenes de ejemplo incluidas en la carpeta images en la raíz del proyecto de ejemplo descargable, o puede usar una de sus propias imágenes.

  4. En la parte superior de la página ImageAnalysis, seleccione Upload. En el control flotante que se abre, seleccione el icono de carpeta de la derecha para abrir un explorador de archivos. Elija la imagen que desea cargar y, después, seleccione Upload.

    Captura de pantalla que muestra cómo cargar un blob en el contenedor de almacenamiento.

  5. El archivo debe aparecer dentro del contenedor de blobs. A continuación, puede comprobar que la carga desencadenó la función de Azure y que el texto de la imagen se ha analizado y guardado en Table Storage correctamente.

  6. Con las rutas de navegación de la parte superior de la página, navegue por un nivel en la cuenta de almacenamiento. Busque y seleccione Explorador de almacenamiento en el panel de navegación izquierdo y, a continuación, seleccione Tablas.

  7. Ahora debería haber disponible una tabla ImageText. Haga clic en la tabla para obtener una vista previa de las filas de datos dentro de ella. Debería ver una entrada para el texto de la imagen procesada de nuestra carga. Puede comprobarlo mediante la marca de tiempo o en el contenido de la columna Texto.

    Captura de pantalla que muestra una entrada de texto en Azure Table Storage.

¡Enhorabuena! Ha ejecutado correctamente el procesamiento de una imagen que se cargó en Blob Storage mediante Azure Functions y Computer Vision.

Limpieza de recursos

Si no va a seguir usando esta aplicación, puede eliminar los recursos que ha creado al quitar el grupo de recursos.

  1. Seleccione Grupos de recursos en la navegación principal.
  2. Seleccione el grupo de recursos msdocs-storage-function de la lista.
  3. Seleccione el botón Eliminar grupo de recursos en la parte superior de la página de información general del grupo de recursos.
  4. Escriba el nombre del grupo de recursos msdocs-storage-function en el cuadro de diálogo de confirmación.
  5. Seleccione eliminar. El proceso para eliminar el grupo de recursos puede tardar unos minutos en completarse.