Uso de IronOcr para leer documentos en AWS Lambda
Este artículo explicativo le guía por los pasos para configurar una función de AWS Lambda con IronOCR. Con esta guía, aprenderás a configurar IronOCR y leer documentos desde un S3 Bucket.
1. Crear un AWS Lambda con una plantilla de contenedor
Para que IronOcr funcione correctamente, ciertas dependencias deben estar instaladas en la máquina de uno, para asegurar que estas dependencias están instaladas, la función Lambda debe ser contenedorizada.
Con Visual Studio, crear un AWS Lambda en contenedor es un proceso sencillo: basta con instalar la aplicación AWS Tookit para Visual StudioSelecciona una plantilla AWS Lambda C#, luego selecciona un blueprint Container Image, luego selecciona "Finish".
2. Añadir dependencias de paquetes
Modifica el dockerfile del proyecto con lo siguiente:
# Establecer en dotnet:5 o dotnet:6 para .NET 5/6
FROM public.ecr.aws/lambda/dotnet:7
WORKDIR /var/task
EJECUTAR yum update -y
EJECUTAR yum install -y amazon-linux-extras
RUN amazon-linux-extras install epel -y
RUN yum install -y libgdiplus
COPIAR "bin/Release/lambda-publish" .
3. Instale los paquetes IronOcr y IronOcr.Linux NuGet
Para instalar los paquetes IronOcr
e IronOcr.Linux
en Visual Studio:
Vaya a
Proyecto > Gestionar paquetes NuGet...
.Seleccione
Browse
y busqueIronOcr
eIronOcr.Linux
.- Selecciona los paquetes e instálalos.
4. Modificar el código de FunctionHandler
Este ejemplo recuperará una imagen de un bucket S3 y la leerá. Utiliza la clase Image
de SixLabors
para cargar la imagen en IronOcr. Para que el ejemplo funcione, se debe configurar un bucket de S3 y el archivo SixLabors.ImageSharp El paquete NuGet debe estar instalado.
: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. Aumentar la memoria y el tiempo de espera
La cantidad de memoria a asignar en la Lambda variará en función del tamaño de los documentos que se lean y de cuántos se lean a la vez. Como referencia, establece el tamaño de la memoria en 512 MB y el tiempo de espera en 300 segundos en aws-lambda-tools-defaults.json
:
"function-memory-size" : 512,
"función-tiempo de espera" : 300
6. Publique
Para publicar en Visual Studio, basta con hacer clic con el botón derecho del ratón en la solución y seleccionar Publish to AWS Lambda...
(Publicar en AWS Lambda...), y a continuación establecer las configuraciones. Puede obtener más información sobre la publicación de una lambda en la página Sitio web de AWS.
7. Pruébalo.
Puede activar la función Lambda a través del botón Consola Lambda o a través de Visual Studio.