Verwendung von IronOcr zum Lesen von Dokumenten auf AWS Lambda

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

Dieser Leitfaden führt Sie durch die Schritte zum Einrichten einer AWS Lambda-Funktion mit IronOCR. In diesem Leitfaden erfahren Sie, wie Sie IronOCR einrichten und Dokumente aus einem S3-Bucket lesen können.

1. Erstellen eines AWS Lambda mit einer Container-Vorlage

Damit IronOCR ordnungsgemäß funktioniert, müssen bestimmte Abhängigkeiten auf dem eigenen Rechner installiert sein. Um sicherzustellen, dass diese Abhängigkeiten installiert sind, muss die Lambda-Funktion containerisiert werden.

Mit Visual Studio ist die Erstellung eines containerisierten AWS Lambda ein einfacher Prozess: Installieren Sie einfach dieAWS Tookit für Visual Studiowählen Sie eine AWS Lambda C#-Vorlage und dann einen Container Image-Blaupause aus, und wählen Sie dann "Fertig stellen".

2. Paketabhängigkeiten hinzufügen

Ändern Sie das Dockerfile des Projekts wie folgt:


# Setzen Sie auf dotnet:5 oder dotnet:6 für .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. Installieren Sie die IronOcr und IronOcr.Linux NuGet-Pakete

So installieren Sie die Pakete IronOcr und IronOcr.Linux in Visual Studio:

  1. Gehen Sie zu "Projekt > NuGet-Pakete verwalten..."

  2. Wählen Sie "Durchsuchen" und suchen Sie dann nach "IronOCR" und "IronOCR.Linux"

  3. Wählen Sie die Pakete aus und installieren Sie sie.

4. Ändern Sie den FunctionHandler-Code

In diesem Beispiel wird ein Bild aus einem S3-Bucket abgerufen und gelesen. Es verwendet die Klasse Image von SixLabors, um das Bild in IronOcr zu laden. Damit das Beispiel funktioniert, muss ein S3-Bucket eingerichtet werden und dieSixLabors.ImageSharp Das NuGet-Paket muss installiert sein.

: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. Speicher und Timeout erhöhen

Wie viel Speicher im Lambda zugewiesen werden muss, hängt von der Größe der zu lesenden Dokumente ab und davon, wie viele auf einmal gelesen werden. Setzen Sie die Speichergröße in der Datei aws-lambda-tools-defaults.json zunächst auf 512 MB und die Zeitüberschreitung auf 300 Sekunden:


"function-memory-size" : 512,

"Funktions-Timeout" : 300

6. Veröffentlichen

Um in Visual Studio zu veröffentlichen, klicken Sie einfach mit der rechten Maustaste auf die Lösung und wählen Sie "Auf AWS Lambda veröffentlichen". Mehr über die Veröffentlichung eines Lambdas erfahren Sie auf derAWS-Website.

7. Probieren Sie es aus!

Sie können die Lambda-Funktion entweder über die FunktionLambda-Konsole oder über Visual Studio.