AWS Lambda Üzerinde Belgeleri OCR Yapma Yöntemleri

This article was translated from English: Does it need improvement?
Translated
View the article in English
Amazon Lambda Architecture Logo related to AWS Lambda Üzerinde Belgeleri OCR Yapma Yöntemleri

Bu nasıl yapılır makalesi, IronOCR kullanarak bir AWS Lambda işlevinin kurulumu için adım adım bir rehber sunar. Bu rehberi izleyerek, IronOCR'yi yapılandırmayı ve S3 kovasında saklanan belgeleri etkili bir şekilde okumayı öğreneceksiniz.

Kurulum

Bu makalede bir S3 kovası kullanılacak, bu yüzden AWSSDK.S3 paketi gereklidir.

IronOCR ZIP kullanıyorsanız, geçici klasörü ayarlamak zorunludur.

// Set temporary folder path and log file path for IronOCR.
var awsTmpPath = @"/tmp/";
IronOcr.Installation.InstallationPath = awsTmpPath;
IronOcr.Installation.LogFilePath = awsTmpPath;
// Set temporary folder path and log file path for IronOCR.
var awsTmpPath = @"/tmp/";
IronOcr.Installation.InstallationPath = awsTmpPath;
IronOcr.Installation.LogFilePath = awsTmpPath;
' Set temporary folder path and log file path for IronOCR.
Dim awsTmpPath = "/tmp/"
IronOcr.Installation.InstallationPath = awsTmpPath
IronOcr.Installation.LogFilePath = awsTmpPath
$vbLabelText   $csharpLabel

Bugün IronOCR ile projenizde ücretsiz bir deneme ile başlayın.

İlk Adım:
green arrow pointer

Bir AWS Lambda Projesi Oluşturun

Visual Studio ile, kapsayıcılaştırılmış bir AWS Lambda oluşturmak kolay bir işlemdir:

Konteyner görüntüsü seçin

Paket Bağımlılıklarını Ekleyin

.NET 8'de IronOCR kütüphanesini AWS Lambda üzerinde kullanmak için ek bir bağımlılık yüklemeye gerek yoktur. Projenin Dockerfile dosyasını aşağıdakiyle değiştirin:

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

# Update all installed packages
RUN dnf update -y

WORKDIR /var/task

# Copy build artifacts from the host machine into the Docker image
COPY "bin/Release/lambda-publish" .

FunctionHandler Kodunu Düzenleyin

Bu örnek, bir görüntüyü bir S3 kovasından alır, işlemler ve aranabilir bir PDF olarak aynı kovaya geri kaydeder. IronOCR ZIP kullanırken geçici klasörün ayarlanması zorunludur, çünkü kütüphane, DLL'lerden çalışma zamanı klasörünü kopyalamak için yazma izinleri gerektirir.

using Amazon.Lambda.Core;
using Amazon.S3;
using Amazon.S3.Model;
using IronOcr;
using System;
using System.IO;
using System.Threading.Tasks;

// 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 IronOcrZipAwsLambda
{
    public class Function
    {
        // Initialize the S3 client with a specific region endpoint
        private static readonly IAmazonS3 _s3Client = new AmazonS3Client(Amazon.RegionEndpoint.APSoutheast1);

        /// <summary>
        /// Function handler to process OCR on the PDF stored in S3.
        /// </summary>
        /// <param name="context">The ILambdaContext that provides methods for logging and describing the Lambda environment.</param>
        public async Task FunctionHandler(ILambdaContext context)
        {
            // Set up necessary paths for IronOCR
            var awsTmpPath = @"/tmp/";
            IronOcr.Installation.InstallationPath = awsTmpPath;
            IronOcr.Installation.LogFilePath = awsTmpPath;

            // Set license key for IronOCR
            IronOcr.License.LicenseKey = "IRONOCR-MYLICENSE-KEY-1EF01";

            string bucketName = "deploymenttestbucket"; // Your bucket name
            string pdfName = "sample";
            string objectKey = $"IronPdfZip/{pdfName}.pdf";
            string objectKeyForSearchablePdf = $"IronPdfZip/{pdfName}-SearchablePdf.pdf";

            try
            {
                // Retrieve the PDF file from S3
                var pdfData = await GetPdfFromS3Async(bucketName, objectKey);

                // Initialize IronTesseract for OCR processing
                IronTesseract ironTesseract = new IronTesseract();
                OcrInput ocrInput = new OcrInput();
                ocrInput.LoadPdf(pdfData);
                OcrResult result = ironTesseract.Read(ocrInput);

                // Log the OCR result
                context.Logger.LogLine($"OCR result: {result.Text}");

                // Upload the searchable PDF to S3
                await UploadPdfToS3Async(bucketName, objectKeyForSearchablePdf, result.SaveAsSearchablePdfBytes());
                context.Logger.LogLine($"PDF uploaded successfully to {bucketName}/{objectKeyForSearchablePdf}");
            }
            catch (Exception e)
            {
                context.Logger.LogLine($"[ERROR] FunctionHandler: {e.Message}");
            }
        }

        /// <summary>
        /// Retrieves a PDF from S3 and returns it as a byte array.
        /// </summary>
        private async Task<byte[]> GetPdfFromS3Async(string bucketName, string objectKey)
        {
            var request = new GetObjectRequest
            {
                BucketName = bucketName,
                Key = objectKey
            };

            using (var response = await _s3Client.GetObjectAsync(request))
            using (var memoryStream = new MemoryStream())
            {
                await response.ResponseStream.CopyToAsync(memoryStream);
                return memoryStream.ToArray();
            }
        }

        /// <summary>
        /// Uploads the generated searchable PDF back to S3.
        /// </summary>
        private async Task UploadPdfToS3Async(string bucketName, string objectKey, byte[] pdfBytes)
        {
            using (var memoryStream = new MemoryStream(pdfBytes))
            {
                var request = new PutObjectRequest
                {
                    BucketName = bucketName,
                    Key = objectKey,
                    InputStream = memoryStream,
                    ContentType = "application/pdf"
                };

                await _s3Client.PutObjectAsync(request);
            }
        }
    }
}
using Amazon.Lambda.Core;
using Amazon.S3;
using Amazon.S3.Model;
using IronOcr;
using System;
using System.IO;
using System.Threading.Tasks;

// 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 IronOcrZipAwsLambda
{
    public class Function
    {
        // Initialize the S3 client with a specific region endpoint
        private static readonly IAmazonS3 _s3Client = new AmazonS3Client(Amazon.RegionEndpoint.APSoutheast1);

        /// <summary>
        /// Function handler to process OCR on the PDF stored in S3.
        /// </summary>
        /// <param name="context">The ILambdaContext that provides methods for logging and describing the Lambda environment.</param>
        public async Task FunctionHandler(ILambdaContext context)
        {
            // Set up necessary paths for IronOCR
            var awsTmpPath = @"/tmp/";
            IronOcr.Installation.InstallationPath = awsTmpPath;
            IronOcr.Installation.LogFilePath = awsTmpPath;

            // Set license key for IronOCR
            IronOcr.License.LicenseKey = "IRONOCR-MYLICENSE-KEY-1EF01";

            string bucketName = "deploymenttestbucket"; // Your bucket name
            string pdfName = "sample";
            string objectKey = $"IronPdfZip/{pdfName}.pdf";
            string objectKeyForSearchablePdf = $"IronPdfZip/{pdfName}-SearchablePdf.pdf";

            try
            {
                // Retrieve the PDF file from S3
                var pdfData = await GetPdfFromS3Async(bucketName, objectKey);

                // Initialize IronTesseract for OCR processing
                IronTesseract ironTesseract = new IronTesseract();
                OcrInput ocrInput = new OcrInput();
                ocrInput.LoadPdf(pdfData);
                OcrResult result = ironTesseract.Read(ocrInput);

                // Log the OCR result
                context.Logger.LogLine($"OCR result: {result.Text}");

                // Upload the searchable PDF to S3
                await UploadPdfToS3Async(bucketName, objectKeyForSearchablePdf, result.SaveAsSearchablePdfBytes());
                context.Logger.LogLine($"PDF uploaded successfully to {bucketName}/{objectKeyForSearchablePdf}");
            }
            catch (Exception e)
            {
                context.Logger.LogLine($"[ERROR] FunctionHandler: {e.Message}");
            }
        }

        /// <summary>
        /// Retrieves a PDF from S3 and returns it as a byte array.
        /// </summary>
        private async Task<byte[]> GetPdfFromS3Async(string bucketName, string objectKey)
        {
            var request = new GetObjectRequest
            {
                BucketName = bucketName,
                Key = objectKey
            };

            using (var response = await _s3Client.GetObjectAsync(request))
            using (var memoryStream = new MemoryStream())
            {
                await response.ResponseStream.CopyToAsync(memoryStream);
                return memoryStream.ToArray();
            }
        }

        /// <summary>
        /// Uploads the generated searchable PDF back to S3.
        /// </summary>
        private async Task UploadPdfToS3Async(string bucketName, string objectKey, byte[] pdfBytes)
        {
            using (var memoryStream = new MemoryStream(pdfBytes))
            {
                var request = new PutObjectRequest
                {
                    BucketName = bucketName,
                    Key = objectKey,
                    InputStream = memoryStream,
                    ContentType = "application/pdf"
                };

                await _s3Client.PutObjectAsync(request);
            }
        }
    }
}
Imports Amazon.Lambda.Core
Imports Amazon.S3
Imports Amazon.S3.Model
Imports IronOcr
Imports System
Imports System.IO
Imports System.Threading.Tasks

' 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 IronOcrZipAwsLambda
	Public Class [Function]
		' Initialize the S3 client with a specific region endpoint
		Private Shared ReadOnly _s3Client As IAmazonS3 = New AmazonS3Client(Amazon.RegionEndpoint.APSoutheast1)

		''' <summary>
		''' Function handler to process OCR on the PDF stored in S3.
		''' </summary>
		''' <param name="context">The ILambdaContext that provides methods for logging and describing the Lambda environment.</param>
		Public Async Function FunctionHandler(ByVal context As ILambdaContext) As Task
			' Set up necessary paths for IronOCR
			Dim awsTmpPath = "/tmp/"
			IronOcr.Installation.InstallationPath = awsTmpPath
			IronOcr.Installation.LogFilePath = awsTmpPath

			' Set license key for IronOCR
			IronOcr.License.LicenseKey = "IRONOCR-MYLICENSE-KEY-1EF01"

			Dim bucketName As String = "deploymenttestbucket" ' Your bucket name
			Dim pdfName As String = "sample"
			Dim objectKey As String = $"IronPdfZip/{pdfName}.pdf"
			Dim objectKeyForSearchablePdf As String = $"IronPdfZip/{pdfName}-SearchablePdf.pdf"

			Try
				' Retrieve the PDF file from S3
				Dim pdfData = Await GetPdfFromS3Async(bucketName, objectKey)

				' Initialize IronTesseract for OCR processing
				Dim ironTesseract As New IronTesseract()
				Dim ocrInput As New OcrInput()
				ocrInput.LoadPdf(pdfData)
				Dim result As OcrResult = ironTesseract.Read(ocrInput)

				' Log the OCR result
				context.Logger.LogLine($"OCR result: {result.Text}")

				' Upload the searchable PDF to S3
				Await UploadPdfToS3Async(bucketName, objectKeyForSearchablePdf, result.SaveAsSearchablePdfBytes())
				context.Logger.LogLine($"PDF uploaded successfully to {bucketName}/{objectKeyForSearchablePdf}")
			Catch e As Exception
				context.Logger.LogLine($"[ERROR] FunctionHandler: {e.Message}")
			End Try
		End Function

		''' <summary>
		''' Retrieves a PDF from S3 and returns it as a byte array.
		''' </summary>
		Private Async Function GetPdfFromS3Async(ByVal bucketName As String, ByVal objectKey As String) As Task(Of Byte())
			Dim request = New GetObjectRequest With {
				.BucketName = bucketName,
				.Key = objectKey
			}

			Using response = Await _s3Client.GetObjectAsync(request)
			Using memoryStream As New MemoryStream()
				Await response.ResponseStream.CopyToAsync(memoryStream)
				Return memoryStream.ToArray()
			End Using
			End Using
		End Function

		''' <summary>
		''' Uploads the generated searchable PDF back to S3.
		''' </summary>
		Private Async Function UploadPdfToS3Async(ByVal bucketName As String, ByVal objectKey As String, ByVal pdfBytes() As Byte) As Task
			Using memoryStream As New MemoryStream(pdfBytes)
				Dim request = New PutObjectRequest With {
					.BucketName = bucketName,
					.Key = objectKey,
					.InputStream = memoryStream,
					.ContentType = "application/pdf"
				}

				Await _s3Client.PutObjectAsync(request)
			End Using
		End Function
	End Class
End Namespace
$vbLabelText   $csharpLabel

Try bloğundan önce, IronPdfZip dizininde 'sample.pdf' dosyasının okuma işlemi için ayarlandığından emin olun. Daha sonra GetPdfFromS3Async yöntemi kullanılarak PDF baytı alınır ve bu bayt LoadPdf yöntemine aktarılır.

Bellek ve Zaman Aşımını Artırın

Lambda fonksiyonunda tahsis edilen bellek miktarı, işlenen belgelerin boyutuna ve aynı anda işlenen belge sayısına bağlı olarak değişecektir. Temel ayar olarak, aws-lambda-tools-defaults.json içinde belleği 512 MB'ye ve zaman aşımını 300 saniyeye ayarlayın.

{
    "function-memory-size": 512,
    "function-timeout": 300
}

Bellek yetersiz olduğunda, program 'Çalışma zamanı hatayla çıktı: sinyal: öldürüldü.' hatasını verecektir. Bellek boyutunu artırmak bu sorunu çözebilir. Daha fazla bilgi için sorun giderme makalesine bakın: AWS Lambda - Çalışma Süresi Sinyali: Kapatıldı.

Yayınla

Visual Studio'da yayınlamak için, proje üzerine sağ tıklayın ve 'AWS Lambda'ya Yayınla...' seçin, ardından gerekli ayarları yapılandırın. Lambda yayımlamak hakkında daha fazla bilgiyi AWS web sitesinde bulabilirsiniz.

Deneyin!

Lambda işlevini, Lambda konsolu veya Visual Studio aracılığıyla etkinleştirebilirsiniz.

Sıkça Sorulan Sorular

C# kullanarak AWS'de belgeler üzerinde nasıl OCR yapabilirim?

IronOCR'yi AWS Lambda ile entegre ederek Amazon S3 kovalarında saklanan belgelerde OCR gerçekleştirebilirsiniz. Bu, S3'ten belgeleri alan, IronOCR ile işleyip sonuçları tekrar S3'e yükleyen bir C# Lambda işlevi oluşturmayı içerir.

C# ile AWS Lambda üzerine OCR kurmayı içeren adımlar nelerdir?

C# kullanarak AWS Lambda üzerinde OCR kurmak için, IronOCR kütüphanesini indirmeniz, Visual Studio içinde bir AWS Lambda projesi oluşturmanız, fonksiyon yöneticinizi IronOCR'u kullanarak işlemler için yapılandırmanız ve fonksiyonunuzu dağıtmanız gereklidir. Bu kurulum, görüntüleri aranabilir PDF'lere dönüştürmenizi sağlar.

AWS Lambda üzerinde OCR çalıştırmak için önerilen yapılandırma nedir?

AWS Lambda üzerinde IronOCR ile OCR çalıştırırken en iyi performans için en az 512 MB hafıza tahsisi ve 300 saniyelik bir zaman aşımı süresi ayarlamanız önerilir. Bu ayarlar, büyük veya çok sayıda belgenin işlenmesine yardımcı olur.

'Runtime exited with error: signal: killed' hatasını AWS Lambda üzerinde nasıl çözerim?

Bu hata genellikle Lambda fonksiyonunuzun tahsis edilen hafızasını tükettiğini gösterir. Lambda işlevinin yapılandırmasında hafıza tahsisini artırmak, özellikle IronOCR ile büyük belgeleri işlerken bu sorunu çözebilir.

AWS Lambda OCR fonksiyonumu dağıtmadan önce yerel olarak test edebilir miyim?

Evet, AWS Toolkit for Visual Studio kullanarak AWS Lambda OCR fonksiyonunuzu yerel olarak test edebilirsiniz. Bu araç kiti, Lambda yürütmelerini simüle etmek için yerel bir ortam sunar ve böylece fonksiyonunuzu dağıtmadan önce hata ayıklayıp geliştirmenizi sağlar.

AWS Lambda projesinde bir Dockerfile'in amacı nedir?

AWS Lambda projesindeki bir Dockerfile, Lambda fonksiyonunuz için yürütme ortamını ve bağımlılıkları tanımlayan bir konteyner imajı oluşturmak için kullanılır. Bu, fonksiyonunuzun AWS'de sorunsuz çalışması için gerekli tüm bileşenlere sahip olmasını sağlar.

.NET 8 üzerinde AWS Lambda kullanırken IronOCR için ek bağımlılıkları gerekir mi?

.NET 8 üzerinde AWS Lambda kullanırken, IronOCR kütüphanesi ve gerekli AWS SDK paketleri dışında herhangi bir ek bağımlılık gerekmez. Bu, OCR görevlerini yürütmek için entegrasyon sürecini basitleştirir.

C# OCR ile AWS Lambda entegrasyonu için gereklilikler nelerdir?

C# OCR ile AWS Lambda entegrasyonundan önce, S3 için AWS SDK'sını, IronOCR kütüphanesini ve Visual Studio için AWS Toolkit'i kurmanız gerekir. Belgeleri depolamak ve almak için yapılandırılmış bir S3 kovası da gereklidir.

IronOCR bulut uygulamalarında kullanılabilir mi?

Elbette, IronOCR bulut ortamlarına dağıtılabilir, OCR yeteneklerine ihtiyaç duyan web uygulamaları ve hizmetler için uygundur.

IronOCR ile OCR sonuçlarının doğruluğunu nasıl artırırım?

IronOCR ile OCR doğruluğunu artırmak için yüksek kaliteli giriş görüntülerini sağlamaya, uygun dil paketlerini kullanmaya ve kütüphanenin görüntü ön işleme özelliklerinden yararlanmaya özen gösterin.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapı...

Daha Fazla Oku
Başlamaya Hazır mısınız?
Nuget İndirmeler 5,896,332 | Sürüm: 2026.5 just released
Still Scrolling Icon

Hâlâ Kaydırıyor Musunuz?

Hızlıca kanıt ister misiniz? PM > Install-Package IronOcr
örnek çalıştır görüntünüzün aranabilir metin haline gelmesini izleyin.