Tutoriel : Charger et analyser un fichier avec Azure Functions et le Stockage Blob
Dans ce tutoriel, vous allez apprendre à charger une image dans le Stockage Blob Azure et à la traiter à l’aide d’Azure Functions et de la Vision par ordinateur. Vous allez également voir comment implémenter des déclencheurs et des liaisons de fonction Azure dans le cadre de ce processus. Ensemble, ces services analysent une image chargée comprenant du texte, ils extraient le texte, puis ils stockent le texte dans une ligne de base de données à des fins d’analyse ou à d’autres fins.
Le Stockage Blob Azure est une solution Microsoft de stockage d’objets hautement scalable conçue pour le cloud. Le Stockage d’objets blob est conçu pour stocker des images et des documents, envoyer des fichiers multimédias en streaming, gérer les données de sauvegarde et d’archive, etc. Pour en savoir plus sur le Stockage Blob, consultez la page de présentation.
Azure Functions est une solution d’ordinateur serverless qui vous permet d’écrire et d’exécuter de petits blocs de code comme des fonctions serverless basées sur des événements et hautement scalables. Pour en savoir plus sur Azure Functions, consultez la page de présentation.
Dans ce didacticiel, vous apprendrez à :
- Charger des images et des fichiers dans le Stockage Blob
- Utiliser un déclencheur d’événements de fonction Azure pour traiter les données chargées dans le Stockage Blob
- Utiliser Azure AI services pour analyser une image
- Écrire des données dans le Stockage Table à l’aide de liaisons de sortie de fonction Azure
Prérequis
- Compte Azure avec un abonnement actif. Créez un compte gratuitement.
- Visual Studio 2022 installé.
Créer le compte de stockage et le conteneur
La première étape consiste à créer le compte de stockage qui contiendra les données d’objet blob chargées, qui dans ce scénario, seront des images comprenant du texte. Un compte de stockage offre plusieurs services. Toutefois, dans ce tutoriel, nous utiliserons le Stockage Blob et le Stockage Table.
Connectez-vous au portail Azure.
Dans la barre de recherche située en haut du portail, lancez une recherche sur Stockage, puis sélectionnez le résultat Comptes de stockage.
Dans la page Comptes de stockage, sélectionnez + Créer en haut à gauche.
Dans la page Créer un compte de stockage, entrez les valeurs suivantes :
- Abonnement : choisissez l’abonnement souhaité.
- Groupe de ressources : sélectionnez Créer nouveau, entrez le nom
msdocs-storage-function
, puis choisissez OK. - Nom du compte de stockage : entrez une valeur de
msdocsstoragefunction
. Le nom du compte de stockage doit être unique dans Azure. Vous serez peut-être obligé d’ajouter des chiffres après le nom, par exemplemsdocsstoragefunction123
. - Région : sélectionnez la région la plus proche de vous.
- Performances : choisissez Standard.
- Redondance : conservez la valeur sélectionnée par défaut.
Sélectionnez Vérifier + créer en bas pour qu’Azure valide les informations que vous avez entrées. Une fois les paramètres validés, choisissez Créer. Azure commencera alors à provisionner le compte de stockage, ce qui peut prendre un moment.
Créer le conteneur
Une fois le compte de stockage provisionné, sélectionnez Accéder à la ressource. L’étape suivante consiste à créer un conteneur de stockage à l’intérieur du compte afin d’y placer les images chargées à des fins d’analyse.
Dans le volet de navigation, choisissez Conteneurs.
Dans la page Conteneurs, sélectionnez + Conteneur en haut. Dans le volet déroulant, sous Nom, entrez imageanalysis, puis vérifiez que le Niveau d’accès public est défini sur Objet blob (accès en lecture anonyme pour les objets blob uniquement). Sélectionnez ensuite Créer.
Vous devriez voir votre nouveau conteneur s’afficher dans la liste de conteneurs.
Récupérer la chaîne de connexion
La dernière étape consiste à récupérer notre chaîne de connexion pour le compte de stockage.
Dans le volet de navigation de gauche, sélectionnez l’onglet Clés d’accès.
Dans la page Clés d’accès, sélectionnez Afficher les clés. Copiez la valeur de la chaîne de connexion sous la section key1 et collez-la quelque part pour une utilisation ultérieure. Vous devrez également noter le nom du compte de stockage
msdocsstoragefunction
pour plus tard.
Vous aurez besoin de ces valeurs pour connecter la fonction Azure à ce compte de stockage.
Créer le service Vision par ordinateur
Ensuite, créez le compte de service Vision par ordinateur qui traitera nos fichiers chargés. Vision par ordinateur fait partie d’Azure AI services et offre diverses fonctionnalités permettant d’extraire les données des images. Pour en savoir plus sur Vision par ordinateur, consultez la page de présentation.
Dans la barre de recherche située en haut du portail, lancez une recherche sur Ordinateur, puis sélectionnez le résultat Vision par ordinateur.
Dans la page Vision par ordinateur, sélectionnez + Créer.
Dans la page Créer Vision par ordinateur, entrez les valeurs suivantes :
- Abonnement : choisissez l’abonnement souhaité.
- Groupe de ressources : utilisez le groupe de ressources
msdocs-storage-function
que vous avez créé précédemment. - Région : sélectionnez la région la plus proche de vous.
- Nom : entrez le nom
msdocscomputervision
. - Niveau tarifaire : choisissez Gratuit si ce niveau est disponible, sinon, choisissez Standard S1.
- Cochez la case Avis sur l’IA responsable si vous acceptez les conditions.
Sélectionnez Vérifier + créer en bas. Azure prendra un moment pour valider les informations que vous avez entrées. Une fois les paramètres validés, choisissez Créer. Azure commencera alors à provisionner le service Vision par ordinateur, ce qui peut prendre un moment.
Une fois l’opération terminée, sélectionnez Accéder à la ressource.
Récupérer les clés
Ensuite, nous devons trouver la clé secrète et l’URL du point de terminaison du service Vision par ordinateur à utiliser dans notre application de fonction Azure.
Dans la page de présentation Vision par ordinateur, sélectionnez Clés et point de terminaison.
Dans la page Clés et point de terminaison, copiez la valeur de Key 1 et les valeurs de Point de terminaison, puis collez-les quelque part pour les utiliser plus tard.
Télécharger et configurer l’exemple de projet
Le code de la fonction Azure utilisée dans ce tutoriel est disponible dans ce dépôt GitHub. Vous pouvez également cloner le projet à l’aide de la commande ci-dessous.
git clone https://github.com/Azure-Samples/msdocs-storage-bind-function-service.git \
cd msdocs-storage-bind-function-service/dotnet
Le code de l’exemple de projet effectue les tâches suivantes :
- Récupère les variables d’environnement pour se connecter au compte de stockage et au service Vision par ordinateur
- Accepte le fichier chargé en tant que paramètre d’objet blob
- Analyse l’objet blob à l’aide du service Vision par ordinateur
- Envoie le texte de l’image analysée vers une nouvelle ligne de table à l’aide de liaisons de sortie
Une fois que vous avez téléchargé et ouvert le projet, vous devez comprendre quelques concepts essentiels compris dans la méthode principale Run
ci-dessous. La fonction Azure utilise des liaisons de déclencheur et de sortie, qui sont appliquées à l’aide d’attributs à la signature de méthode Run
.
L’attribut Table
utilise deux paramètres. Le premier paramètre spécifie le nom de la table dans laquelle écrire la valeur de texte de l’image analysée qui est retournée par la fonction. Le deuxième paramètre Connection
tire (pull) une chaîne de connexion Stockage Table à partir des variables d’environnement afin que la fonction Azure puisse y accéder.
L’attribut BlobTrigger
est utilisé pour lier la fonction à l’événement de chargement dans le Stockage Blob, et fournit cet objet blob chargé à la fonction Run
. Le déclencheur d’objets blob a deux paramètres qui lui sont propres : un pour le nom du conteneur d’objets blob à monitorer pour les chargements, et un autre pour la chaîne de connexion de notre compte de stockage.
// 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; }
}
Ce code récupère également les valeurs de configuration essentielles des variables d’environnement, telles que la chaîne de connexion du compte de stockage et la clé Vision par ordinateur. Nous allons ajouter ces variables d’environnement à notre environnement de fonction Azure après son déploiement.
La fonction ProcessImage
utilise également une deuxième méthode appelée AnalyzeImage
, affichée ci-dessous. Ce code utilise le point de terminaison d’URL et la clé de notre compte Vision par ordinateur pour demander à ce serveur de traiter notre image. La requête retourne tout le texte détecté dans l’image. Celui-ci sera ensuite écrit dans le Stockage Table à l’aide de la liaison de sortie de la méthode 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();
}
Exécution locale
Si vous souhaitez exécuter le projet localement, vous pouvez renseigner les variables d’environnement à l’aide du fichier local.settings.json. Dans ce fichier, renseignez les espaces réservés avec les valeurs que vous avez enregistrées précédemment lors de la création des ressources Azure.
Même si le code de la fonction Azure s’exécute localement, il se connectera quand même aux services actifs dans Azure, plutôt qu’en utilisant des émulateurs locaux.
{
"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"
}
}
Déployer le code dans Azure Functions
Vous êtes maintenant prêt à déployer l’application dans Azure à l’aide de Visual Studio. Vous pouvez également créer l’application Azure Functions dans Azure en même temps qu’une partie du processus de déploiement.
Pour commencer, sélectionnez avec le bouton droit le nœud du projet ProcessImage, puis sélectionnez Publier.
Dans l’écran Publier, sélectionnez Azure et choisissez Suivant.
Sélectionnez Application de fonction Azure (Windows) ou Application de fonction Azure (Linux) dans l’écran suivant, puis choisissez à nouveau Suivant.
À l’étape Instance de Functions, choisissez l’abonnement dans lequel vous souhaitez effectuer le déploiement. Ensuite, sélectionnez le symbole vert + sur le côté droit de la boîte de dialogue.
Une nouvelle boîte de dialogue s’ouvre. Entrez les valeurs suivantes pour votre nouvelle application de fonction.
- Nom : entrez msdocsprocessimage ou quelque chose de similaire.
- Nom de l’abonnement : choisissez l’abonnement que vous souhaitez utiliser.
- Groupe de ressources : choisissez le groupe de ressources
msdocs-storage-function
que vous avez créé précédemment. - Type de plan : sélectionnez Consommation.
- Emplacement : vous pouvez choisir la région la plus proche.
- Stockage Azure : sélectionnez le compte de stockage que vous avez créé précédemment.
Une fois que vous avez renseigné toutes ces valeurs, sélectionnez Créer. Visual Studio et Azure commenceront à provisionner les ressources demandées, ce qui prendra quelques instants.
Une fois le processus terminé, sélectionnez Terminer pour fermer la boîte de dialogue.
La dernière étape pour déployer la fonction Azure consiste à sélectionner Publier en haut à droite de l’écran. La publication de la fonction peut également prendre quelques instants. Une fois la publication terminée, votre application s’exécute dans Azure.
Connecter les services
La fonction Azure a bien été déployée, mais elle ne peut pas encore se connecter au compte de stockage et au service Vision par ordinateur. Les clés et les chaînes de connexion doivent d’abord être ajoutées aux paramètres de configuration de l’application Azure Functions.
En haut du portail Azure, lancez une recherche sur fonction, puis sélectionnez Application de fonction dans les résultats.
Dans l’écran Application de fonction, sélectionnez l’application de fonction que vous avez créée dans Visual Studio.
Dans la page de présentation Application de fonction, sélectionnez Configuration sur la gauche. Cela ouvre une page dans laquelle vous pouvez gérer différents types de paramètres de configuration pour l’application. Pour l’instant, c’est la section Paramètres d’application qui nous intéresse.
L’étape suivante consiste à ajouter des paramètres pour le nom du compte de stockage et la chaîne de connexion, la clé secrète Vision par ordinateur et le point de terminaison Vision par ordinateur.
Sous l’onglet Paramètre d’application, sélectionnez + Nouveau paramètre d’application. Dans le menu volant qui s’affiche, entrez les valeurs suivantes :
- Nom : entrez la valeur ComputerVisionKey.
- Valeur : collez la clé Vision par ordinateur que vous avez enregistrée précédemment.
Cliquez sur OK pour ajouter ce paramètre à votre application.
Répétez ensuite ce processus pour le point de terminaison du service Vision par ordinateur, en utilisant les valeurs suivantes :
- Nom : entrez la valeur ComputerVisionEndpoint.
- Valeur : collez l’URL du point de terminaison que vous avez enregistrée précédemment.
Répétez cette étape pour la connexion du compte de stockage en utilisant les valeurs suivantes :
- Nom : entrez la valeur StorageConnection.
- Valeur : collez la chaîne de connexion que vous avez enregistrée précédemment.
Enfin, répétez ce processus pour le nom du compte de stockage, en utilisant les valeurs suivantes :
- Nom : entrez la valeur StorageAccountName.
- Valeur : entrez le nom du compte de stockage que vous avez créé.
Une fois que vous avez ajouté ces paramètres d’application, n’oubliez pas de sélectionner Enregistrer en haut de la page de configuration. Une fois l’enregistrement terminé, vous pouvez également sélectionner Actualiser pour être sûr que les paramètres ont été appliqués.
Toutes les variables d’environnement qui sont nécessaires pour connecter la fonction Azure à différents services sont désormais configurées.
Charger une image dans le Stockage Blob
Vous êtes maintenant prêt à tester l’application ! Vous pouvez charger un objet blob dans le conteneur, puis vérifier que le texte de l’image a été enregistré dans le Stockage Table.
Tout d’abord, en haut du portail Azure, lancez une recherche sur Stockage, puis sélectionnez Compte de stockage. Dans la page Compte de stockage, sélectionnez le compte que vous avez créé précédemment.
Ensuite, sélectionnez Conteneurs sur la gauche, puis accédez au conteneur ImageAnalysis que vous avez créé précédemment. À partir de là, vous pouvez charger une image de test directement dans le navigateur.
Vous pouvez utiliser les quelques exemples d’images inclus dans le dossier images situé à la racine de l’exemple de projet téléchargeable. Vous pouvez également utiliser l’une de vos propres images.
En haut de la page ImageAnalysis, sélectionnez Charger. Dans le menu volant qui s’ouvre, sélectionnez l’icône de dossier sur la droite pour ouvrir un navigateur de fichiers. Choisissez l’image que vous souhaitez charger, puis sélectionnez Charger.
Le fichier doit apparaître à l’intérieur de votre conteneur d’objets blob. Ensuite, vous pouvez vérifier que le chargement a déclenché la fonction Azure et que le texte de l’image a été analysé et enregistré dans le Stockage Table correctement.
À l’aide des barres de navigation situées en haut de la page, remontez d’un niveau dans votre compte de stockage. Recherchez puis sélectionnez Navigateur de stockage sur la gauche, puis sélectionnez Tables.
Une table ImageText doit désormais être disponible. Cliquez sur le tableau pour afficher un aperçu des lignes de données qu’il contient. Vous devez voir une entrée pour le texte de l’image traitée pour notre chargement. Vous pouvez vérifier cela à l’aide de l’horodatage ou en affichant le contenu de la colonne Texte.
Félicitations ! Vous venez de traiter une image qui a été chargée dans le Stockage Blob à l’aide d’Azure Functions et de Vision par ordinateur.
Nettoyer les ressources
Si vous ne comptez pas continuer à utiliser cette application, vous pouvez supprimer les ressources que vous avez créées en supprimant le groupe de ressources.
- Dans le volet de navigation principal, sélectionnez Groupes de ressources.
- Sélectionnez le groupe de ressources
msdocs-storage-function
dans la liste. - Sélectionnez le bouton Supprimer un groupe de ressources en haut de la page de présentation du groupe de ressources.
- Entrez le nom du groupe de ressources msdocs-storage-function dans la boîte de dialogue de confirmation.
- Sélectionnez Supprimer. Le processus de suppression du groupe de ressources peut prendre quelques minutes.