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

IronOCR을 사용하여 C#에서 이미지를 읽는 방법

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

IronOCR는 광학 문자 인식 기술을 사용하여 JPG, PNG, GIF, TIFF, 및 BMP 형식의 이미지에서 텍스트를 추출합니다. NuGet 패키지를 설치한 후에는 단 한 줄의 코드만으로 기본적인 텍스트 추출이 가능합니다.

OCR(광학 문자 인식) 기술은 이미지에서 텍스트를 인식하고 추출합니다. 이 프로그램은 스캔한 페이지, 사진 또는 기타 이미지 파일에서 텍스트 콘텐츠를 추출하여 인쇄된 문서를 디지털화합니다. IronOCR은 Tesseract 5 의 고급 머신러닝 알고리즘과 독자적인 이미지 전처리 기술을 결합하여 업계 최고 수준의 정확도를 제공합니다.

라이브러리는 jpg, png, gif, tiff, 및 bmp 형식을 지원합니다. 이미지 필터는 일반적인 품질 문제를 자동으로 보정하여 읽기 능력을 향상시킵니다. IronOCR은 Tesseract 5 와 고급 전처리 기술을 결합하여 고해상도 스캔 이미지부터 압축된 웹 이미지에 이르기까지 다양한 이미지 품질 및 형식에서 정확한 결과를 제공합니다.

빠른 시작: IronOCR로 이미지 파일 읽기

단 한 줄의 코드로 이미지에서 텍스트를 추출하세요. 이 예제는 이미지를 로드하고 Read 메서드를 사용하여 IronTesseract에서 텍스트를 읽습니다. 이 라이브러리는 이미지 전처리 및 텍스트 추출을 자동으로 처리합니다.

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

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

    var result = new IronTesseract().Read(new OcrImageInput("Potter.png"));
  3. 실제 운영 환경에서 테스트할 수 있도록 배포하세요.

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

    arrow pointer


IronOCR로 이미지를 읽는 방법은 무엇인가요?

먼저 IronTesseract 클래스를 인스턴스화합니다. 'using' 문을 사용하여 이미지 파일 경로와 함께 OcrImageInput 객체를 생성합니다. 이는 자원의 적절한 처리를 보장합니다. IronOCR은 jpg, png, gif, tiff 및 bmp 형식을 지원합니다. Read 메서드를 사용하여 OCR을 실행합니다. 이 라이브러리는 이미지 형식을 자동으로 감지하고 적절한 전처리를 적용합니다.

신규 사용자는 Windows용 설치 가이드를 참조하거나 NuGet 패키지 옵션을 살펴보세요. 크로스 플랫폼 개발을 위해서는 Linux 설정 또는 macOS 설치를 확인하세요.

참고해 주세요
2025.6 버전부터:

  • 이제 TIFF 이미지 로딩 속도가 일관적으로 향상되었습니다.
  • TIFF 이미지 읽기 성능은 컴퓨터의 GPU 성능에 따라 향상됩니다. 일부 사용자는 최대 두 배 빠른 속도를 경험할 수 있는 반면, 다른 사용자는 이전 버전과 유사한 성능을 경험할 수 있습니다.
    )}]
/* :path=/static-assets/ocr/content-code-examples/how-to/input-images-read.cs */
using IronOcr;

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

// Add image
using var imageInput = new OcrImageInput("Potter.png");

// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);

// Display the extracted text
Console.WriteLine(ocrResult.Text);

// Get confidence level
double confidence = ocrResult.Confidence;
Console.WriteLine($"Confidence: {confidence}%");
/* :path=/static-assets/ocr/content-code-examples/how-to/input-images-read.cs */
using IronOcr;

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

// Add image
using var imageInput = new OcrImageInput("Potter.png");

// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);

// Display the extracted text
Console.WriteLine(ocrResult.Text);

// Get confidence level
double confidence = ocrResult.Confidence;
Console.WriteLine($"Confidence: {confidence}%");
$vbLabelText   $csharpLabel
IronOCR 텍스트 추출 데모: 해리 포터 페이지 이미지를 코드 편집기에서 일반 텍스트로 변환

TIFF 및 GIF 이미지를 읽는 방법에 대해서는 '다중 프레임/페이지 GIF 및 TIFF 읽는 방법'을 참조하세요. 여러 페이지로 구성된 파일의 경우, 다중 페이지 TIFF 처리 예제를 참조하십시오.

자신감 수준이 중요한 이유는 무엇일까요?

신뢰도 수준은 IronOCR이 추출한 텍스트의 정확도에 대해 얼마나 확신하는지를 나타냅니다. 일반적으로 85% 이상의 값은 신뢰할 수 있는 결과를 나타냅니다. 점수가 낮을 경우 이미지 전처리 또는 수동 검토가 필요할 수 있습니다. 신뢰도 점수를 사용하여 문서에 자동으로 사람 검증 필요 표시를 하거나 추가 이미지 최적화 필터를 작동시킬 수 있습니다.

어떤 경우에 서로 다른 이미지 형식을 사용해야 할까요?

PNG 및 TIFF 형식은 무손실 압축 덕분에 최고의 OCR 결과를 제공합니다. 단일 페이지 문서에는 PNG 형식을, 여러 페이지로 구성된 스캔 이미지에는 TIFF 형식을 사용하십시오. JPEG는 사진에 적합하지만 압축 과정에서 화질 저하를 일으킬 수 있습니다. BMP는 압축되지 않은 고품질 영상이지만 파일 크기가 더 큽니다. GIF는 제한된 색상을 사용하는 단순한 그래픽에 적합합니다. 형식별 최적화 에 대해 자세히 알아보세요.

흔히 발생하는 이미지 판독 오류는 무엇입니까?

일반적인 오류로는 낮은 이미지 해상도(200 DPI 미만), 기울어진 텍스트, 낮은 대비 또는 지원되지 않는 언어 등이 있습니다. IronOCR은 대부분의 문제를 자동으로 수정하지만, 심각한 문제의 경우 수동 전처리가 필요할 수 있습니다. 해결 방법은 문제 해결 가이드를 참조하세요.

이미지를 바이트 형식으로 가져오려면 어떻게 해야 하나요?

OcrImageInput 클래스는 파일 경로, 바이트, AnyBitmap, Stream 또는 Image 객체로 이미지를 수락합니다. AnyBitmapIronSoftware.Drawing.AnyBitmap에서 덧붙여진 비트맵 객체입니다. 이러한 유연성 덕분에 데이터베이스, 웹 API, 클라우드 스토리지 등 다양한 데이터 소스와 원활하게 통합할 수 있습니다.

이러한 유연성은 데이터베이스, 웹 서비스 또는 메모리 스트림의 이미지를 다룰 때 유용합니다. 고급 스트림 처리에 대해서는 입력 스트림을 사용한 OCR을 참조하십시오. System.Drawing 통합 가이드는 레거시 코드 호환성을 위한 추가 예제를 제공합니다.

:path=/static-assets/ocr/content-code-examples/how-to/input-images-import-byte.cs
using IronOcr;
using System.IO;

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

// Read byte from file
byte[] data = File.ReadAllBytes("Potter.tiff");

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

파일 경로 대신 바이트 배열을 사용해야 하는 경우는 언제인가요?

바이트 배열은 이미지가 데이터베이스, 웹 서비스 또는 암호화된 소스에서 제공되는 경우에 가장 효과적입니다. 파일이 임시 디스크 저장 공간을 필요로 하지 않기 때문에 보안성이 더 뛰어납니다. 클라우드 애플리케이션, 마이크로서비스 또는 민감한 문서를 처리할 때는 바이트 배열을 사용하십시오. 대용량 이미지 모음을 로컬에서 일괄 처리할 때는 파일 경로를 사용하는 것이 여전히 더 효율적입니다.

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

// Method 1: From URL
var imageFromUrl = AnyBitmap.FromUri("https://example.com/document.jpg");
using var urlInput = new OcrImageInput(imageFromUrl);

// Method 2: From Stream
using var fileStream = File.OpenRead("document.png");
using var streamInput = new OcrImageInput(fileStream);

// Method 3: From System.Drawing (with IronSoftware.Drawing)
var bitmap = AnyBitmap.FromFile("scan.bmp");
using var bitmapInput = new OcrImageInput(bitmap);

// Process any of these inputs
IronTesseract ocr = new IronTesseract();
OcrResult result = ocr.Read(bitmapInput);
using IronOcr;
using IronSoftware.Drawing;
using System.IO;

// Method 1: From URL
var imageFromUrl = AnyBitmap.FromUri("https://example.com/document.jpg");
using var urlInput = new OcrImageInput(imageFromUrl);

// Method 2: From Stream
using var fileStream = File.OpenRead("document.png");
using var streamInput = new OcrImageInput(fileStream);

// Method 3: From System.Drawing (with IronSoftware.Drawing)
var bitmap = AnyBitmap.FromFile("scan.bmp");
using var bitmapInput = new OcrImageInput(bitmap);

// Process any of these inputs
IronTesseract ocr = new IronTesseract();
OcrResult result = ocr.Read(bitmapInput);
$vbLabelText   $csharpLabel

이미지 바이트에 대한 메모리 관리가 중요한 이유는 무엇입니까?

대용량 이미지는 특히 여러 문서를 동시에 처리할 때 상당한 메모리를 소모합니다. 'using' 문을 사용하면 리소스가 적절하게 해제됩니다. 일괄 처리를 위해서는 동시 작업 수를 제한하는 큐 시스템을 구현하는 것을 고려해 보세요. 멀티스레딩 가이드는 효율적인 메모리 관리 기법을 보여줍니다.

입력 유형이 다를 경우 성능에 어떤 영향을 미칠까요?

파일 경로를 사용하면 IronOCR이 데이터를 직접 읽기 때문에 로컬 파일의 경우 가장 빠른 성능을 제공합니다. 바이트 배열은 전체 이미지를 메모리에 로드해야 하지만 유연성을 제공합니다. 스트림은 데이터를 점진적으로 읽어 메모리 사용량과 성능 사이의 균형을 유지합니다. 대량 처리 시 최적의 성능을 위해서는 성능 튜닝 가이드를 참조하십시오.

스캔 영역을 지정하는 방법은 무엇입니까?

어느 이미지 영역을 처리할지 특정하기 위해 CropRectangle를 인스턴스화할 때 OcrImageInput를 전달합니다. 스캔 영역을 제한하면 성능이 크게 향상됩니다. 아래 예시에서는 장 번호와 제목만 읽습니다. 이 기술은 문서의 특정 영역을 대상으로 할 때 처리 시간을 최대 90%까지 단축합니다.

복잡한 레이아웃이나 여러 영역의 경우 이미지의 OCR 영역을 참조하세요. 콘텐츠 영역 가이드에서는 고급 영역 선택 기법을 설명합니다.

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

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

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

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

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

지역을 지정하면 성능이 향상되는 이유는 무엇입니까?

관련 이미지 영역만 처리하면 계산 오버헤드가 60~90% 감소합니다. OCR 엔진은 입력 영역의 모든 픽셀을 분석하므로 영역이 작을수록 처리 속도가 빨라집니다. 이 접근 방식은 대상 텍스트 영역 외부에 있는 머리글, 바닥글 또는 장식 요소로 인한 간섭을 제거하여 정확도를 향상시킵니다.

원본 이미지와 디버그 출력 모두에서 빨간색 사각형으로 '8장' 제목을 강조 표시하는 OCR 스캔 영역 데모입니다.

여러 스캔 영역을 언제 사용해야 할까요?

양식, 송장 또는 다단 레이아웃과 같이 텍스트 영역이 명확하게 구분된 문서에는 여러 영역을 사용하십시오. 논리적인 텍스트 흐름을 유지하기 위해 각 영역을 별도로 처리하십시오. 이 접근 방식은 표 데이터를 추출 하거나 구조화된 문서에서 특정 필드를 읽는 데 효과적입니다.

좌표계 규칙에는 어떤 것들이 있나요?

IronOCR은 왼쪽 상단 모서리를 원점(0,0)으로 하는 표준 픽셀 좌표를 사용합니다. X는 오른쪽으로 증가하고, Y는 아래쪽으로 증가합니다. 직사각형의 매개변수는 (X, Y, 너비, 높이)입니다. 정확한 영역 선택을 위해서는 이미지 편집 도구를 사용하여 픽셀 좌표를 식별하거나 애플리케이션에 시각적 영역 선택기를 구현하십시오.

고급 이미지 처리 기술은 어떻게 적용할 수 있나요?

IronOCR은 OCR 정확도를 향상시키기 위한 포괄적인 이미지 전처리 기능을 제공합니다. 저화질 이미지, 스캔 문서 또는 까다로운 작업 환경을 다룰 때는 필터를 적용하세요. 필터 마법사는 특정 이미지에 가장 적합한 필터 조합을 찾는 데 도움을 줍니다.

using IronOcr;

IronTesseract ocr = new IronTesseract();

using var input = new OcrImageInput("low-quality-scan.jpg");

// Apply image enhancement filters
input.Deskew();  // Correct image rotation
input.DeNoise(); // Remove background noise
input.Binarize(); // Convert to black and white
input.EnhanceResolution(300); // Adjust DPI for better accuracy

// Configure for better accuracy
ocr.Configuration.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
ocr.Configuration.Language = OcrLanguage.English;

OcrResult result = ocr.Read(input);
using IronOcr;

IronTesseract ocr = new IronTesseract();

using var input = new OcrImageInput("low-quality-scan.jpg");

// Apply image enhancement filters
input.Deskew();  // Correct image rotation
input.DeNoise(); // Remove background noise
input.Binarize(); // Convert to black and white
input.EnhanceResolution(300); // Adjust DPI for better accuracy

// Configure for better accuracy
ocr.Configuration.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
ocr.Configuration.Language = OcrLanguage.English;

OcrResult result = ocr.Read(input);
$vbLabelText   $csharpLabel

이미지 최적화 필터저품질 스캔 이미지 보정 방법 에 대해 알아보세요. 색상 보정이 필요한 경우 이미지 색상 보정 가이드를 참조하십시오.

이미지 전처리 필터는 언제 적용해야 할까요?

스캔한 문서, 텍스트가 있는 사진 또는 화질이 좋지 않은 이미지를 처리할 때는 필터를 적용하세요. 일반적인 시나리오로는 기울어진 페이지 교정, 복사본의 배경 소음 제거, 흐릿해진 텍스트 보정 등이 있습니다. DPI 설정 가이드는 해상도 관련 문제를 최적화하는 데 도움이 됩니다.

필터 순서가 중요한 이유는 무엇인가요?

필터 순서는 결과에 상당한 영향을 미칩니다. 회전 보정을 적용한 후에 (Deskew), 잡음 제거를 하고, 마지막으로 대비를 향상시킵니다. 이진화는 일반적으로 마지막 단계에 수행해야 합니다. 순서가 잘못되면 문제가 증폭될 수 있습니다. 예를 들어 노이즈 제거 전에 선명도 조정을 하면 노이즈가 더 두드러지게 나타납니다. 최적의 결과를 얻으려면 다양한 순서를 테스트해 보세요.

흔히 발생하는 전처리 오류는 무엇인가요?

과도한 처리가 가장 흔한 오류입니다. 과도한 선명도 조정은 아티팩트를 생성하고, 과도한 노이즈 제거는 미세한 텍스트 디테일을 제거하며, 부적절한 이진화 임계값은 정보 손실을 초래합니다. 최소한의 전처리만 수행하고 필요할 때만 필터를 추가하세요. 이미지 품질 보정 가이드는 자세한 모범 사례를 제공합니다.

성능을 최적화하려면 어떻게 해야 할까요?

여러 이미지를 처리하거나 대량의 이미지를 일괄 처리할 때 다음과 같은 최적화 방안을 고려하십시오.

  1. IronTesseract 인스턴스 재사용: 여러 작업을 위해 하나의 인스턴스를 만듭니다.
  2. 스캔 영역 지정 : OCR을 관련 이미지 영역으로 제한하면 60~90%의 정확도 향상을 얻을 수 있습니다.
  3. 적절한 이미지 형식을 사용하십시오 : PNG와 TIFF는 JPEG보다 더 나은 결과를 제공합니다.
  4. 전처리 과정을 선택적으로 적용하십시오 : 필요한 경우에만 필터를 사용하십시오.
  5. 병렬 처리 구현 : 배치 작업을 위해 멀티코어 CPU를 활용합니다.

고성능 시나리오의 경우 멀티스레딩 가이드고속 OCR 구성 가이드를 참조하십시오. 진행 상황 추적 기능은 장기 작업을 모니터링하는 데 도움이 됩니다.

인스턴스 재사용이 성능을 향상시키는 이유는 무엇입니까?

IronTesseract 초기화는 언어 데이터를 로드하고 OCR 엔진을 구성하며 200-500ms가 소요됩니다. 인스턴스를 재사용하면 후속 작업에서 발생하는 이러한 오버헤드를 제거할 수 있습니다. 웹 애플리케이션의 경우 싱글턴 인스턴스를, 배치 처리의 경우 공유 인스턴스를 생성하여 효율성을 극대화하십시오.

병렬 처리는 언제 사용해야 할까요?

병렬 처리는 여러 개의 독립적인 이미지가 필요한 시나리오에서 유용합니다. 여러 페이지 또는 문서를 동시에 처리하되, 동일한 이미지에 대한 병렬 작업은 피하십시오. 최신 CPU는 4~8개의 OCR 작업을 동시에 효율적으로 처리할 수 있습니다. 이미지 크기에 따라 각 작업에 100~500MB의 메모리가 필요하므로 메모리 사용량을 모니터링하십시오.

메모리 사용량과 관련하여 고려해야 할 사항은 무엇입니까?

일반적으로 OCR 작업에는 이미지 파일 크기의 10~20배에 달하는 RAM 용량이 필요합니다. 5MB 크기의 이미지를 처리하는 데 50~100MB의 용량이 사용될 수 있습니다. 대량 처리의 경우, 동시 작업 수를 제한하는 생산자-소비자 패턴을 구현하십시오. 취소 토큰 예시는 메모리 집약적인 작업에 대한 취소 방법을 보여줍니다.

다음 단계는 무엇인가요?

다음 리소스를 활용하여 더욱 복잡한 시나리오에서 텍스트를 추출하세요.

자주 묻는 질문

C#에서 텍스트 추출을 위해 읽을 수 있는 이미지 형식은 무엇인가요?

IronOCR은 JPG, PNG, GIF, TIFF 및 BMP 이미지 형식에서 텍스트를 읽는 것을 지원합니다. 이 라이브러리는 이미지 형식을 자동으로 감지하고 최적의 텍스트 추출 결과를 위해 적절한 전처리를 적용합니다.

이미지 파일에서 텍스트를 한 줄의 코드로 추출하는 방법은 무엇인가요?

IronOCR을 사용하면 단 한 줄의 코드로 텍스트를 추출할 수 있습니다. `var result = new IronTesseract().Read(new OcrImageInput("image.png"));`. 이 코드는 Tesseract 5 OCR 기술을 사용하여 이미지 전처리 및 텍스트 추출을 자동으로 처리합니다.

이미지 판독에 사용되는 OCR 기술은 무엇입니까?

IronOCR은 Tesseract 5의 고급 머신러닝 알고리즘과 독자적인 이미지 전처리 기술을 결합했습니다. 이러한 조합을 통해 고해상도 스캔 이미지부터 압축된 웹 이미지에 이르기까지 다양한 이미지 품질과 형식에서 업계 최고 수준의 정확도를 제공합니다.

이미지를 읽을 때 리소스를 올바르게 처리하는 방법은 무엇인가요?

OcrImageInput 객체를 생성할 때 'using' 문을 사용하여 리소스가 제대로 해제되도록 하십시오. 이 패턴은 메모리와 파일 핸들을 자동으로 관리합니다. 예: `using var ocrInput = new OcrImageInput("image.jpg");`

이미지 파일 전체를 읽는 대신 특정 영역만 읽을 수 있나요?

네, IronOCR은 이미지 내에서 특정 판독 영역을 정의하기 위해 자르기 영역을 지정할 수 있습니다. 이 기능을 통해 OCR 처리가 이미지의 관련 부분에 집중되어 성능과 정확도가 향상됩니다.

이미지에 자동으로 적용되는 전처리 과정은 무엇인가요?

IronOCR은 일반적인 품질 문제를 보정하여 읽기 기능을 향상시키는 이미지 필터를 자동으로 적용합니다. 이 라이브러리는 기본적인 사용 사례의 경우 수동 설정 없이도 형식 감지 및 전처리를 처리합니다.

TIFF 이미지 처리 성능이 향상되었습니까?

IronOCR 버전 2025.6부터 TIFF 이미지 로딩 성능이 일관적으로 향상되었습니다. TIFF 이미지 읽기 성능 향상은 컴퓨터의 GPU 성능에 따라 달라지며, 일부 사용자는 이전 버전보다 최대 두 배 빠른 속도를 경험했습니다.

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

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, 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
샘플을 실행하세요 이미지가 검색 가능한 텍스트로 바뀌는 것을 확인해 보세요.