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.
AWS Lambda'da Belgeleri OCR Yapma Yöntemleri
- Belgeleri OCR yapmak için bir C# kütüphanesini indir
- Proje şablonunu oluşturun ve seçin
- FunctionHandler kodunu düzenleyin
- Projeyi yapılandırın ve dağıtın
- İşlevi çalıştırın ve sonuçları S3'te kontrol edin
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
Bugün IronOCR ile projenizde ücretsiz bir deneme ile başlayın.
Bir AWS Lambda Projesi Oluşturun
Visual Studio ile, kapsayıcılaştırılmış bir AWS Lambda oluşturmak kolay bir işlemdir:
- AWS Araç Kitini Visual Studio için yükleyin.
- 'AWS Lambda Projesi (.NET Core - C#)' seçeneğini seçin.
- '.NET 8 (Kapsayıcı Görüntü)' şablonunu seçin, ardından 'Bitir' 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
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.

