C#에서 OCR 처리를 위해 입력 이미지를 사용하는 방법

C#에서 OCR을 위해 스트림에서 데이터를 읽는 방법

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

IronOCR는 스트림을 OcrInput 또는 OcrImageInput 생성자에 전달하여 C#에서 이미지 데이터를 직접 읽으며, 파일을 디스크에 저장하지 않고 효율적으로 OCR 처리를 수행할 수 있습니다.

스트림은 읽거나 쓸 수 있는 이진 정보의 연속적인 흐름입니다. 프로그래밍에서 스트림은 메모리 용량보다 큰 데이터를 관리 가능한 작은 단위로 나누어 효율적으로 처리합니다.

IronOCR의 가져오기 방법은 이미지 데이터 스트림을 직접 허용합니다. 스트림 데이터를 가져오기 메서드에 전달하면 해당 메서드가 필요한 모든 단계를 자동으로 처리합니다. 고급 시나리오를 위해 OcrInput 클래스를 탐색하여 다양한 입력 형식을 준비하는 광범위한 옵션을 제공합니다.

as-heading:2(빠른 시작: OCR 입력을 위한 스트림 사용 (몇 초 만에))

이 예제는 IronOCR에 System.IO.Stream를 제공하여 즉각적인 OCR을 수행하고 파일 경로를 건너뛰고 최소한의 코드로 인식된 텍스트를 검색하는 방법을 보여줍니다.

  1. NuGet 패키지 관리자를 사용하여 https://www.nuget.org/packages/IronOcr 설치하기

    PM > Install-Package IronOcr
  2. 다음 코드 조각을 복사하여 실행하세요.

    using var input = new IronOcr.OcrInput(stream);
    var result = new IronOcr.IronTesseract().Read(input);
  3. 실제 운영 환경에서 테스트할 수 있도록 배포하세요.

    무료 체험판으로 오늘 프로젝트에서 IronOCR 사용 시작하기

    arrow pointer


IronOCR로 스트림을 읽는 방법은 무엇인가요?

먼저, OCR을 수행하기 위해 IronTesseract 클래스를 인스턴스화하십시오. FromFile 메서드를 AnyBitmap에서 사용하여 이미지 파일을 가져옵니다. 이 AnyBitmap 객체는 이미지 데이터를 스트림으로 변환합니다. 다음으로, using 문을 사용하여 이미지 스트림을 GetStream 메서드와 함께 전달하여 OcrImageInput 객체를 생성합니다. 마지막으로, OCR을 수행하기 위해 Read 메서드를 사용하십시오.

:path=/static-assets/ocr/content-code-examples/how-to/input-streams-read-streams.cs
using IronOcr;
using IronSoftware.Drawing;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Read image file to AnyBitmap
AnyBitmap anyBitmap = AnyBitmap.FromFile("Potter.tiff");

// Import image stream
using var imageInput = new OcrImageInput(anyBitmap.GetStream());
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
$vbLabelText   $csharpLabel

스트림 기반 OCR은 이미지 업로드를 수신하거나, 데이터베이스에서 이미지를 처리하거나, 디스크에 기록해서는 안 되는 임시 데이터를 처리하는 웹 애플리케이션에 유용합니다. 스트림 접근 방식은 System.Drawing 객체 및 기타 이미지 조작 라이브러리와 매끄럽게 통합됩니다.

OCR에 Streams를 사용하는 이유는 무엇일까요?

스트림을 사용하면 .NET 개발자에게 여러 가지 이점이 있습니다.

  1. 메모리 효율성 : 전체 파일을 메모리에 로드하는 대신 데이터를 청크 단위로 처리합니다.
  2. 보안 : 디스크에 임시 파일을 생성하지 않고 민감한 문서를 처리합니다.
  3. 성능 : 파일 시스템 작업에서 발생하는 I/O 오버헤드를 제거합니다.
  4. 유연성 : 웹 업로드, 데이터베이스 BLOB 및 인메모리 변환 작업을 지원합니다.

IronOCR은 여러 페이지로 구성된 문서를 처리하거나 PDF 스트림을 처리할 때에도 강력한 성능을 제공하면서도 동일한 간단한 API를 유지합니다. 스캔한 문서를 다룰 때 IronOCR의 기능을 활용하면 스트림 처리를 통해 스캔한 문서를 효율적으로 읽을 수 있습니다.

스트림 OCR에서 스캔 영역을 지정하려면 어떻게 해야 하나요?

큰 이미지에서 성능을 향상시키고 특정 영역의 특정 읽기를 얻으려면 CropRectangle 클래스를 활용하십시오. OcrImageInput 생성자는 두 번째 매개변수로 CropRectangle 객체를 허용하여 이미지 문서의 어느 영역을 읽어야 하는지 지정할 수 있게 합니다. 아래 코드 예시는 장 번호와 제목 영역만 읽도록 지정합니다.

:path=/static-assets/ocr/content-code-examples/how-to/input-streams-read-specific-region.cs
using IronOcr;
using IronSoftware.Drawing;
using System;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Read image file to AnyBitmap
AnyBitmap anyBitmap = AnyBitmap.FromFile("Potter.tiff");

// Specify crop region
Rectangle scanRegion = new Rectangle(800, 200, 900, 400);

// Add image
using var imageInput = new OcrImageInput(anyBitmap.GetStream(), ContentArea: scanRegion);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);

// Output the result to console
Console.WriteLine(ocrResult.Text);
$vbLabelText   $csharpLabel

이 기술은 이미지의 특정 영역을 OCR 로 인식해야 하거나 텍스트가 예측 가능한 위치에 나타나는 구조화된 문서를 처리할 때 특히 유용합니다. 테이블이나 구조화된 데이터와 관련된 더 복잡한 시나리오의 경우, 문서에서 테이블을 읽는 방법을 살펴보세요.

출력 결과에서 스캔 영역은 어떻게 표시되나요?

OCR 데모: 사진 뷰어에서 문서가 표시되고 디버그 콘솔에 '제8장 죽음의 날 파티'라는 텍스트가 추출되어 나타납니다.

어떤 고급 스트림 처리 기법을 사용할 수 있나요?

스트림을 처리할 때는 IronOCR의 추가 기능을 활용하여 인식 정확도를 높이세요. 이미지 최적화 필터는 OCR 처리 전에 스트림 데이터에 직접 적용할 수 있습니다.

using IronOcr;
using IronSoftware.Drawing;
using System.IO;

// Process stream with filters
public string ProcessStreamWithFilters(Stream imageStream)
{
    IronTesseract ocrTesseract = new IronTesseract();

    // Configure for better accuracy
    ocrTesseract.Configuration.BlackListCharacters = "~`$#^*_}{][|\\";
    ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;

    using var input = new OcrImageInput(imageStream);

    // Apply preprocessing filters
    input.Deskew();
    input.DeNoise();
    input.Sharpen();

    var result = ocrTesseract.Read(input);
    return result.Text;
}
using IronOcr;
using IronSoftware.Drawing;
using System.IO;

// Process stream with filters
public string ProcessStreamWithFilters(Stream imageStream)
{
    IronTesseract ocrTesseract = new IronTesseract();

    // Configure for better accuracy
    ocrTesseract.Configuration.BlackListCharacters = "~`$#^*_}{][|\\";
    ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;

    using var input = new OcrImageInput(imageStream);

    // Apply preprocessing filters
    input.Deskew();
    input.DeNoise();
    input.Sharpen();

    var result = ocrTesseract.Read(input);
    return result.Text;
}
$vbLabelText   $csharpLabel

이미지 처리 성능을 향상시키려면 필터 마법사를 사용하여 특정 문서 유형에 맞는 최적의 전처리 단계를 자동으로 결정하세요. 또한 스트림에 회전되거나 기울어진 이미지가 있는 경우 이미지 방향 수정 기능을 사용하면 OCR 정확도를 크게 향상시킬 수 있습니다.

다양한 스트림 소스를 어떻게 활용하나요?

IronOCR은 다양한 스트림 소스를 원활하게 처리합니다. 웹 양식에서 업로드된 파일을 처리하든, 데이터베이스에서 이미지를 검색하든, 형식을 변환하든, API는 일관성을 유지합니다.

// From MemoryStream
byte[] imageBytes = GetImageBytesFromDatabase();
using var memoryStream = new MemoryStream(imageBytes);
using var input = new OcrImageInput(memoryStream);

// From FileStream
using var fileStream = new FileStream("document.png", FileMode.Open);
using var input2 = new OcrImageInput(fileStream);

// From network stream
using var webClient = new WebClient();
using var networkStream = webClient.OpenRead("https://example.com/image.jpg");
using var input3 = new OcrImageInput(networkStream);
// From MemoryStream
byte[] imageBytes = GetImageBytesFromDatabase();
using var memoryStream = new MemoryStream(imageBytes);
using var input = new OcrImageInput(memoryStream);

// From FileStream
using var fileStream = new FileStream("document.png", FileMode.Open);
using var input2 = new OcrImageInput(fileStream);

// From network stream
using var webClient = new WebClient();
using var networkStream = webClient.OpenRead("https://example.com/image.jpg");
using var input3 = new OcrImageInput(networkStream);
$vbLabelText   $csharpLabel

최적의 결과를 얻으려면 저해상도 스트림을 사용할 때 DPI 설정을 조정하는 것을 고려하십시오. IronOCR은 DPI를 자동으로 감지하지만, 특정 사용 사례에 따라 수동으로 설정을 변경하면 정확도를 향상시킬 수 있습니다. 여러 페이지로 구성된 문서를 다룰 때는 스트림 처리를 통해 여러 페이지로 된 TIFF 및 GIF 파일을 처리하는 방법을 살펴보세요.

스트림에서 얻은 OCR 결과를 어떻게 처리해야 하나요?

IronOCR은 스트림을 처리한 후 단순 텍스트 추출을 넘어선 풍부한 결과 객체를 제공합니다. OcrResult 클래스는 인식된 텍스트에 대한 신뢰도 점수, 위치 및 구조를 포함한 자세한 정보를 포함합니다:

// Process stream and analyze results
using var input = new OcrImageInput(stream);
var result = new IronTesseract().Read(input);

// Access detailed results
foreach (var page in result.Pages)
{
    Console.WriteLine($"Page {page.PageNumber} Confidence: {page.Confidence}%");

    foreach (var paragraph in page.Paragraphs)
    {
        Console.WriteLine($"Paragraph: {paragraph.Text}");
        Console.WriteLine($"Location: X={paragraph.X}, Y={paragraph.Y}");
    }
}

// Export results
string text = result.Text;
string searchablePdf = result.SaveAsSearchablePdf("output.pdf");
string hocrHtml = result.SaveAsHocrHtml("output.html");
// Process stream and analyze results
using var input = new OcrImageInput(stream);
var result = new IronTesseract().Read(input);

// Access detailed results
foreach (var page in result.Pages)
{
    Console.WriteLine($"Page {page.PageNumber} Confidence: {page.Confidence}%");

    foreach (var paragraph in page.Paragraphs)
    {
        Console.WriteLine($"Paragraph: {paragraph.Text}");
        Console.WriteLine($"Location: X={paragraph.X}, Y={paragraph.Y}");
    }
}

// Export results
string text = result.Text;
string searchablePdf = result.SaveAsSearchablePdf("output.pdf");
string hocrHtml = result.SaveAsHocrHtml("output.html");
$vbLabelText   $csharpLabel

결과 객체는 검색 가능한 PDF 또는 hOCR HTML 형식 으로 내보내는 메서드도 제공하므로 스트림 입력에서 검색 가능한 문서 아카이브를 쉽게 만들 수 있습니다. 디버깅 목적으로 텍스트 강조 표시 기능을 사용하여 IronOCR이 이미지에서 감지한 내용을 시각화할 수 있습니다.

성능 관련 고려 사항은 무엇인가요?

여러 스트림을 처리하거나 고처리량 OCR 솔루션을 구현할 때 다음과 같은 최적화 전략을 고려하십시오.

  1. IronTesseract 인스턴스 재사용: 단일 인스턴스를 만들고 다수의 작업에서 이를 재사용합니다.
  2. 진행 상황 추적 구현 : 대규모 스트림의 경우, 진행 상황 추적을 사용하여 처리 상태를 모니터링하세요.
  3. 병렬 처리: IronOCR는 다중 스트림에 대한 동시 처리를 지원합니다.
  4. 이미지 품질 최적화 : 최적의 해상도와 선명도를 확보하기 위해 스트림을 전처리합니다.

최상의 성능을 위해 빠른 OCR 구성 옵션을 살펴보고 일괄 처리에 멀티스레드 처리를 구현하는 것을 고려해 보세요. 시간에 민감한 애플리케이션을 다룰 때는 타임아웃을 이해하면 장시간 실행되는 OCR 작업을 효과적으로 관리하는 데 도움이 될 수 있습니다.

일반적인 스트림 문제를 해결하는 방법은 무엇인가요?

스트림을 다룰 때 특정한 어려움에 직면할 수 있습니다. 다음은 흔히 발생하는 상황에 대한 해결책입니다.

  • 스트림 위치: IronOCR에 전달하기 전에 스트림 위치를 항상 0로 재설정하십시오.
  • 자원 해제: 적절한 자원 정리를 보장하기 위해 using 문을 사용하십시오.
  • 지원 형식 : IronOCR은 스트림을 통해 JPEG, PNG, TIFF, BMP를 포함한 다양한 이미지 형식을 지원합니다.
  • 메모리 관리 : 대규모 스트림의 경우 청크 처리 또는 스트리밍 방식을 고려하십시오.

복잡한 문서이거나 표준 OCR이 만족스러운 결과를 제공하지 못하는 경우, 컴퓨터 비전 기능은 텍스트를 더욱 정확하게 찾고 추출하는 데 도움이 될 수 있습니다. 또한, 품질이 낮은 스트림을 처리할 때는 인식률을 크게 향상시킬 수 있는 전처리 기법에 대한 자세한 내용은 저품질 스캔 수정 가이드를 참조하십시오.

스트림 및 기타 입력 방식 작업에 대한 자세한 내용은 종합적인 사용법 가이드코드 예제를 참조하세요.

자주 묻는 질문

이미지 데이터를 디스크에 저장하지 않고 OCR을 수행하려면 어떻게 해야 할까요?

IronOCR은 OcrInput 또는 OcrImageInput 생성자에 이미지 스트림을 직접 전달하여 처리할 수 있습니다. 이를 통해 임시 파일을 생성하지 않고 효율적인 OCR 처리가 가능하므로 웹 업로드, 데이터베이스 BLOB 또는 디스크에 저장해서는 안 되는 민감한 문서를 처리하는 데 이상적입니다.

OCR 처리의 입력으로 사용할 수 있는 스트림 유형은 무엇입니까?

IronOCR은 이미지 데이터를 포함하는 모든 System.IO.Stream을 허용합니다. 여기에는 웹 업로드의 메모리 스트림, 데이터베이스 BLOB 필드의 스트림 또는 이미지 조작 라이브러리에서 생성된 스트림이 포함됩니다. 스트림을 OcrInput 또는 OcrImageInput에 전달하면 라이브러리가 필요한 모든 변환 단계를 자동으로 처리합니다.

C#에서 스트림에 대해 OCR을 수행하는 가장 간단한 방법은 무엇입니까?

가장 빠른 방법은 스트림을 사용하여 OcrInput 객체를 생성하고 Read 메서드를 호출하는 것입니다. 'var input = new IronOcr.OcrInput(stream); var result = new IronOcr.IronTesseract().Read(input);' 이 간단한 코드는 OCR을 수행하고 인식된 텍스트를 즉시 반환합니다.

OCR에서 파일 경로 대신 스트림을 사용해야 하는 이유는 무엇인가요?

IronOCR의 스트림 기반 OCR은 다음과 같은 여러 장점을 제공합니다. 데이터를 청크 단위로 처리하여 메모리 효율성을 높이고, 디스크에 임시 파일을 생성하지 않아 보안을 강화하며, 파일 I/O 오버헤드를 제거하여 성능을 향상시키고, 웹 업로드 또는 데이터베이스 BLOB 작업 시 유연성을 높입니다.

이미지 스트림에서 특정 영역만 읽도록 지정할 수 있나요?

네, IronOCR은 스트림 처리 시 자르기 영역을 지정하여 읽기 영역을 정의할 수 있도록 지원합니다. 이 기능을 통해 전체 문서를 처리하지 않고 이미지의 특정 부분에 OCR을 집중할 수 있으므로 속도와 정확도를 모두 향상시킬 수 있습니다.

스트림 처리는 다른 이미지 조작 라이브러리와 어떻게 통합됩니까?

IronOCR의 스트림 방식은 System.Drawing 객체 및 기타 .NET 이미지 조작 라이브러리와 완벽하게 통합됩니다. AnyBitmap 클래스의 GetStream 메서드를 사용하여 이미지를 스트림으로 변환할 수 있으므로 OCR을 다른 이미지 처리 워크플로와 쉽게 결합할 수 있습니다.

커티스 차우
기술 문서 작성자

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.

커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다.

검토자:
제프 프리츠
제프리 T. 프리츠
.NET 커뮤니티 팀의 수석 프로그램 관리자
제프는 .NET 및 Visual Studio 팀의 수석 프로그램 관리자이기도 합니다. 그는 .NET Conf 가상 컨퍼런스 시리즈의 총괄 프로듀서이며, 개발자를 위한 라이브 스트림 'Fritz and Friends'를 주 2회 진행하며 시청자들과 함께 기술에 대해 이야기하고 코드를 작성합니다. 제프는 Microsoft Build, Microsoft Ignite, .NET Conf, Microsoft MVP Summit 등 주요 Microsoft 개발자 행사를 위한 워크숍, 프레젠테이션 및 콘텐츠 기획을 담당합니다.
시작할 준비 되셨나요?
Nuget 다운로드 5,525,971 | 버전: 2026.3 방금 출시되었습니다
Still Scrolling Icon

아직도 스크롤하고 계신가요?

빠른 증거를 원하시나요? PM > Install-Package IronOcr
샘플을 실행하세요 이미지가 검색 가능한 텍스트로 바뀌는 것을 확인해 보세요.