Utilisation d'IronOCR pour lire des documents sur AWS Lambda

This article was translated from English: Does it need improvement?
Translated
View the article in English

Cet article pratique vous guide à travers les étapes de la configuration d'une fonction AWS Lambda avec IronOCR. Grâce à ce guide, vous apprendrez à configurer IronOCR et à lire des documents à partir d'un Bucket S3.

1. Créer un AWS Lambda avec un modèle de conteneur

Pour qu'IronOCR fonctionne correctement, certaines dépendances doivent être installées sur sa machine - pour s'assurer que ces dépendances sont installées, la fonction Lambda doit être conteneurisée.

Avec Visual Studio, la création d'un AWS Lambda conteneurisé est un processus facile : il suffit d'installer l'extension AWS Tookit pour Visual Studio, sélectionnez un modèle AWS Lambda C#, puis un blueprint Container Image, puis sélectionnez "Terminer".

2. Ajouter les dépendances d'un paquet

Modifiez le fichier docker du projet avec ce qui suit :


# Régler sur dotnet:5 ou dotnet:6 pour .NET 5/6

FROM public.ecr.aws/lambda/dotnet:7

WORKDIR /var/task

RUN yum update -y

RUN yum install -y amazon-linux-extras

RUN amazon-linux-extras install epel -y

RUN yum install -y libgdiplus

COPY "bin/Release/lambda-publish" .

3. Installer les paquets NuGet IronOcr et IronOcr.Linux

Pour installer les paquets IronOcr et IronOcr.Linux dans Visual Studio :

  1. Allez dans Projet > Gérer les paquets NuGet...

  2. Sélectionnez Browse, puis recherchez IronOcr et IronOcr.Linux

  3. Sélectionnez les paquets et installez-les.

4. Modifier le code de FunctionHandler

Cet exemple permet d'extraire une image d'un bac S3 et de la lire. Il utilise la classe Image de SixLabors pour charger l'image dans IronOCR. Pour que l'exemple fonctionne, un panier S3 doit être configuré et le fichier SixLabors.ImageSharp Le paquet NuGet doit être installé.

:path=/static-assets/ocr/content-code-examples/how-to/iron-ocr-aws-lambda-sample.cs
using Amazon;
using Amazon.Lambda.Core;
using Amazon.S3;
using Amazon.S3.Model;
using SixLabors.ImageSharp;
using IronOcr;

// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]

namespace IronOcrAWSLambda;

public class Function
{
	private readonly IAmazonS3 _s3Client;
	private readonly string accessKey;
	private readonly string secretKey;

	public Function()
	{
		accessKey = "ACCESS-KEY";
		secretKey = "SECRET-KEY";
		_s3Client = new AmazonS3Client(accessKey, secretKey);
	}
	public async Task<string> FunctionHandler(string input, ILambdaContext context)
	{
		IronOcr.License.LicenseKey = "IRONOCR-LICENSE-KEY";
		string bucketName = "S3-BUCKET-NAME";

		var getObjectRequest = new GetObjectRequest
		{
			BucketName = bucketName,
			Key = input,
		};

		using (GetObjectResponse response = await _s3Client.GetObjectAsync(getObjectRequest))
		{
			// Read the content of the object
			using (Stream responseStream = response.ResponseStream)
			{
				Console.WriteLine("Reading image from S3");
				Image image = Image.Load(responseStream);

				Console.WriteLine("Reading image with IronOCR");
				IronTesseract ironTesseract = new IronTesseract();
				OcrInput ocrInput = new OcrInput(image);
				OcrResult result = ironTesseract.Read(ocrInput);

				return result.Text;
			}
		}
	}
}
Imports Amazon
Imports Amazon.Lambda.Core
Imports Amazon.S3
Imports Amazon.S3.Model
Imports SixLabors.ImageSharp
Imports IronOcr

' Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
<Assembly: LambdaSerializer(GetType(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))>

Namespace IronOcrAWSLambda

	Public Class [Function]
		Private ReadOnly _s3Client As IAmazonS3
		Private ReadOnly accessKey As String
		Private ReadOnly secretKey As String

		Public Sub New()
			accessKey = "ACCESS-KEY"
			secretKey = "SECRET-KEY"
			_s3Client = New AmazonS3Client(accessKey, secretKey)
		End Sub
		Public Async Function FunctionHandler(ByVal input As String, ByVal context As ILambdaContext) As Task(Of String)
			IronOcr.License.LicenseKey = "IRONOCR-LICENSE-KEY"
			Dim bucketName As String = "S3-BUCKET-NAME"

			Dim getObjectRequest As New GetObjectRequest With {
				.BucketName = bucketName,
				.Key = input
			}

			Using response As GetObjectResponse = Await _s3Client.GetObjectAsync(getObjectRequest)
				' Read the content of the object
				Using responseStream As Stream = response.ResponseStream
					Console.WriteLine("Reading image from S3")
					Dim image As Image = System.Drawing.Image.Load(responseStream)

					Console.WriteLine("Reading image with IronOCR")
					Dim ironTesseract As New IronTesseract()
					Dim ocrInput As New OcrInput(image)
					Dim result As OcrResult = ironTesseract.Read(ocrInput)

					Return result.Text
				End Using
			End Using
		End Function
	End Class
End Namespace
VB   C#

5. Augmenter la mémoire et le délai d'attente

La quantité de mémoire à allouer dans la Lambda varie en fonction de la taille des documents lus et du nombre de documents lus en même temps. Pour commencer, fixez la taille de la mémoire à 512 Mo et le délai d'attente à 300 secondes dans aws-lambda-tools-defaults.json :


"function-memory-size" : 512,

"Fonction-timeout" : 300

6. Publier

Pour publier dans Visual Studio, il suffit de faire un clic droit sur la solution et de sélectionner Publish to AWS Lambda..., puis de définir les configurations. Pour en savoir plus sur la publication d'une Lambda, consultez la page Site web de l'AWS.

7. Essayez-le !

Vous pouvez activer la fonction Lambda soit par l'intermédiaire de la fonction Console Lambda ou par l'intermédiaire de Visual Studio.