Utilisation d'IronOCR pour lire des documents sur AWS Lambda
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 :
Allez dans
Projet > Gérer les paquets NuGet...
Sélectionnez
Browse
, puis recherchezIronOcr
etIronOcr.Linux
- 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
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.