• 시작하기
  • 개발가이드
  • API 레퍼런스
  • 릴리즈 노트
Search Results for

    Show / Hide Table of Contents
    • Quick Start
    • Classification
    • Detection
    • Segmentation
    • IAD (Image Anomaly Detection)
    • OCR
    • IEN (Image Enhancement)

    OCR


    이 문서는 SaigieVision을 통해 이미지를 'OCR(문자인식)' 하는 방법에 대해 설명합니다.

    여러분이 앞서 제공된 Quick Start 를 끝냈다면, 'OCR'을 수행하는 방법은 그리 어렵지 않습니다.

    아래 코드 블럭은 간단하게 OCR 검사 진행 방법에 대해서 설명합니다.

    {
        // Prepare
        SrImage srImage = new SrImage(@"..\..\sample.png");
        string modelPath = @"..\..\model.saigeocr";
        int gpuIndex = 0;
    
        // Initialize
        OCREngine engine = new OCREngine(modelPath, gpuIndex);
    
        // Model Info
        ModelInfo model = engine.GetModelInfo();
    
        // Option
        OCROption option = engine.GetInferenceOption();
        option.PolygonScoreThreshold = 0.9;
        option.TextSizeRangeMin = 0;
        option.TextSizeRangeMax = 4608;
        option.MaxNumOfTextObjects = 0;
        option.TextScoreThreshold = 0.6;
    
        // option.TextFormatting.Length = 0;
        // option.TextFormatting.EngLower[0] = true;
        // option.TextFormatting.EngUpper[0] = true;
        // option.TextFormatting.Kor[0] = true;
        // option.TextFormatting.Number[0] = true;
        // option.TextFormatting.Symbol[0] = false;
    
        engine.SetInferenceOption(option);
    
        // Inspection & Get Result
        OCRResult result = engine.Inspection(srImage);
        Console.WriteLine($"Contour Count:{result.TextObjects.Length}");
        Console.WriteLine($"ImreadTime:{result.InspectionTime.ImreadTime}");
        Console.WriteLine($"InferenceTime:{result.InspectionTime.InferenceTime}");
        Console.WriteLine($"PostProcessingTime:{result.InspectionTime.PostProcessingTime}");
        foreach (var textObjects in result.TextObjects)
        {
            Console.WriteLine($"Text:{textObjects.Text}");
            Console.WriteLine($"TextScore:{textObjects.TextScore}");
            Console.WriteLine($"TextSize:{textObjects.TextSize}");
            Console.WriteLine($"ContourScore:{textObjects.ContourScore}");
        }
    
        // optional
        srImage.Dispose();
    }
    

    Prepare

        SrImage srImage = new SrImage(@"..\..\sample.png");
        string modelPath = @"..\..\model.saigeocr";
        int gpuIndex = 0;
    

    OCREngine 을 사용하기 위해 필요한 모든 데이터를 준비하는 과정입니다. 일반적으로 아래와 같은 3가지를 요구합니다.

    • 검사에 사용할 GPU
    • 검사에 사용할 샘플 이미지들
    • 검사에 사용할 모델( .saigeocr 파일)

    SaigeVision은 NVIDIA사의 GPU만을 지원하고 있습니다.
    GPU Index에 대해서는 명령 프롬프트 (command) 창을 통해 nvidia-smi 명령어를 입력하면 GPU의 index를 확인할 수 있습니다.

    이미지는 SrImage 객체를 통해 생성 가능합니다. 8bit, 16bit 형태의 이미지를 GrayScale, RGB, RGBA 형태로 제공이 됩니다.

    Initialize

        OCREngine engine = new OCREngine(modelPath, gpuIndex)
    

    OCREngine 생성자에서 .saigeocr 모델파일에 대한 경로와 GPU Index를 매개변수로 설정하여 생성합니다.

    Model Info (Optional)

        ModelInfo model = engine.GetModelInfo();
    

    ModelInfo 는 .saigeocr 모델 파일에 대한 정보를 확인할 수 있습니다. 일반적으로 아래와 같은 정보를 확인할 수 있습니다.

    • Network Type (어떤 종류의 딥러닝 네트워크를 사용했는지 나타냅니다)
    • Classes Information (클래스 정보입니다. name, color에 대한 정보들을 확인할 수 있습니다.)
    • Developer Version (모델을 학습할 때 사용한 SaigeVision Developer의 버전입니다.)
    • Server Version (모델을 학습할 때 사용한 SaigeVision Developer의 구성 요소 중 서버의 버전입니다.)
    • Module Version (모델을 학습할 때 사용한 SaigeVision Developer의 구성 요소 중 딥러닝 모듈의 버전입니다.)
    • Roi Information (ROI 정보입니다.)
    • Resize Factor (Segmentation, IEN 전용, 인풋 이미지에 적용되는 리사이즈 비율입니다. 추론 이미지에도 동일하게 적용됩니다.)
    • Crop Size (Segmentation, IEN 전용, 학습 때 사용된 패치의 사이즈입니다. 추론 이미지와는 관련 없습니다)
    • Image Resize (IAD, CLS 전용, 인풋 이미지에 적용되는 리사이즈 입니다. 추론 이미지에도 동일하게 적용됩니다)

    자세한 내용은 Model Info 문서를 통하여 확인할 수 있습니다.

    Module 은 .saigeocr 모델 파일에

    Option (Optional)

        OCROption option = engine.GetInferenceOption();
        option.PolygonScoreThreshold = 0.9;
        option.TextSizeRangeMin = 0;
        option.TextSizeRangeMax = 4608;
        option.MaxNumOfTextObjects = 0;
        option.TextScoreThreshold = 0.6;
    
        option.TextFormatting.Length = 0;
        option.TextFormatting.EngLower[0] = true;
        option.TextFormatting.EngUpper[0] = true;
        option.TextFormatting.Kor[0] = true;
        option.TextFormatting.Number[0] = true;
        option.TextFormatting.Symbol[0] = false;
    
        engine.SetInferenceOption(option);
    

    OCROption 에서 GetInferenceOption() 을 통해서 옵션에 대해서 정보를 받을 수 있습니다.
    SetInferenceOption() 을 통해서 옵션에 대해서 설정을 할 수 있습니다.
    옵션은 아래와 같은 정보들을 설정할 수 있습니다.

    • Calc Time (추론 API 실행에 소요되는 시간을 세분화하여 출력할지 결정합니다.)

    • Batch Size (추론을 한 번 수행할 때 추론하는 이미지의 개수입니다.)

    • PolygonScoreThreshold (검출된 글자영역인 polygon score 값이 이 값보다 작으면 최종 결과에서 제외됩니다.)

    • TextSizeRangeMin (검출된 글자영역 크기의 유효범위 하한값입니다.)

    • TextSizeRangeMax (검출된 글자영역 크기의 유효범위 상한값입니다.)

    • MaxNumOfTextObjects (한 번에 출력할 수 있는 글자 오브젝트의 최대 검출 개수입니다.)

    • TextScoreThreshold (인식된 글자 오브젝트의 text score 값이 이 값보다 작으면 최종 결과에서 제외됩니다.)

    • TextFormatting.Length (인식하려는 글자의 수를 지정합니다.)

    • TextFormatting.EngLower (영소문자를 포함하는지 여부를 지정하는 변수입니다.)

    • TextFormatting.EngUpper (영대문자를 포함하는지 여부를 지정하는 변수입니다.)

    • TextFormatting.Kor (한글을 포함하는지 여부를 지정하는 변수입니다.)

    • TextFormatting.Number (숫자를 포함하는지 여부를 지정하는 변수입니다.)

    • TextFormatting.Symbol (기호를 포함하는지 여부를 지정하는 변수입니다. 지원하는 기호: ``.,'"·●°_~-+±=※#%&@:/!?(){}[]<>`)*



    글자 수에 관계 없이 글자 집합을 지정하는 방식 (By Character Set)

    • length 값을 0으로 설정합니다.
    • 각 문자집합 bool 배열의 첫 번째 값을 지정합니다.
    • 예시: 영소문자, 숫자만 인식하는 경우
    SaigeInferenceOption option;
    option.TextFormatting.Length = 0;
    option.TextFormatting.EngLower[0] = true;
    option.TextFormatting.EngUpper[0] = false;
    option.TextFormatting.Kor[0] = false;
    option.TextFormatting.Number[0] = true;
    option.TextFormatting.Symbol[0] = false;
    

    글자 수와 패턴을 지정하는 방식 (By Character Pattern)

    • length 값을 0 초과, MaxLenOfTextFormatting 이하로 설정합니다.
    • 각 문자집합 bool 배열의 0 ~ length-1 까지의 값을 지정합니다.
    • 예시: 000가1234 (숫자 3자리, 한글 1자리, 숫자 4자리)
    SaigeInferenceOption option;
    option.TextFormatting.Length = 8;
    SaigeInitTextFormatting(option.TextFormatting); // 모든 옵션값을 false로 초기화해주는 함수
    for (int i = 0; i < options.TextFormatting.length; i++)
    {
        options.textFormatting.number[i] = true;
    }
    options.TextFormatting.number[3] = false;
    options.TextFormatting.kor[3] = true;
    

    자세한 내용은 OCR Option 문서를 통하여 확인할 수 있습니다.

    Inspection & Result

        OCRResult result = engine.Inspection(srImage);
        Console.WriteLine($"Contour Count:{result.TextObjects.Length}");
        Console.WriteLine($"ImreadTime:{result.InspectionTime.ImreadTime}");
        Console.WriteLine($"InferenceTime:{result.InspectionTime.InferenceTime}");
        Console.WriteLine($"PostProcessingTime:{result.InspectionTime.PostProcessingTime}");
        foreach (var textObjects in result.TextObjects)
        {
            Console.WriteLine($"Text:{textObjects.Text}");
            Console.WriteLine($"TextScore:{textObjects.TextScore}");
            Console.WriteLine($"TextSize:{textObjects.TextSize}");
            Console.WriteLine($"ContourScore:{textObjects.ContourScore}");
        }
    

    코드에서 볼수 있는 것처럼 'Inspection'을 수행하는 주 함수는 engine.Inspect()입니다. 모든 종류의 Engine들은 이러한 공통의 Inspect() 함수를 보유하고 있습니다. 또한, 다양한 사용을 위해 여러 형태로 중첩 되어 있습니다. 비동기 혹은 다수의 이미지들을 검사하는 등의 여러 시나리오에서 선택적으로 사용할 수 있습니다.

    OCRResult 에서 결과에 대한 모든 정보를 확인할 수 있습니다. OCR 의 경우 아래와 같은 정보를 결과로 확인할 수 있습니다. 일부 결과 정보에 대해서는 OCRResult 에서 true로 반영해야 정보를 받아올 수 있습니다.

    • Insepction Time (추론 API 실행에 소요된 시간을 밀리초 단위로 받아 옵니다.)

    Optional

        srImage.Dispose();
    

    이 예제에서는 검사에 사용했던 Bitmap들을 더 이상 사용할 곳이 없이게 Dispose() 합니다.

    • Improve this Doc
    In This Article
    Back to top Generated by DocFX