VintaSoft Forms Processing .NET Plug-in을 사용하여 OMR 마크 인식

블로그 카테고리: 폼 처리.NET

2025/07/28

오늘날 설문지부터 시험지, 투표용지에 이르기까지 수백만 개의 종이 및 전자 양식이 사용되는 세상에서 이러한 양식을 빠르고 정확하게 처리해야 하는 요구 사항은 매년 증가하고 있습니다. 이러한 프로세스를 자동화하는 핵심 도구 중 하나가 광학 마크 인식(OMR)입니다.

OMR(광학 마크 인식)은 소프트웨어가 종이 또는 전자 문서의 미리 정해진 위치에 특수 마크(일반적으로 체크 표시, 채워진 사각형 또는 원)의 존재 여부를 기록하고 분석할 수 있도록 하는 기술입니다. 이를 통해 수동 입력 없이 대량의 데이터를 신속하게 처리할 수 있어 오류를 최소화하고 워크플로 속도를 높일 수 있습니다.



OMR의 등장과 발전 과정에 대한 간략한 역사

광학 마크 인식(OMR) 기술은 20세기 후반, 유사한 양식, 설문지, 시험지 등을 대량으로 자동화하여 처리해야 하는 필요성이 대두되면서 개발되기 시작했습니다. 최초의 산업용 시스템은 교육 기관의 요구에 맞춰 미국에서 등장했는데, 당시에는 학생들의 대규모 시험 결과를 신속하고 정확하게 계산해야 하는 필요성이 있었습니다.

OMR 개발 초기에는 특수 장비, 즉 용지의 음영 영역(채워진 원 또는 사각형)을 기록하는 대형 광센서가 장착된 스캐너가 사용되었습니다. 이를 통해 수동 검증에 비해 응답 검증에 필요한 시간을 크게 단축하고 데이터 분석을 더욱 객관적으로 만들 수 있었습니다.

이후 디지털 이미지 처리 기술로의 전환과 함께 OMR 기술은 발전했습니다. 개인용 컴퓨터와 소프트웨어의 등장으로 스캐너나 프린터 종류에 관계없이 OMR을 사용할 수 있게 되었습니다. 이는 기업, 교육 기관, 정부 기관 등 대량의 표준 문서를 빠르고 정확하게 처리해야 하는 모든 분야에서 OMR을 대규모로 활용할 수 있는 가능성을 열어주었습니다.

오늘날 최신 OMR 솔루션은 종이 문서뿐만 아니라 전자 문서 작업까지 자동화할 수 있도록 지원하며, OMR 기술을 통합 디지털 플랫폼에 통합함으로써 더욱 뛰어난 유연성, 생산성 및 최종 데이터 품질을 보장합니다.


OMR의 작동 방식 및 적용 분야

OMR은 설문지나 시험지 등 양식에서 채점 영역을 선택한 후 특수 소프트웨어를 사용하여 자동으로 스캔하는 원리입니다. 이를 통해 다음과 같은 작업을 수행할 수 있습니다.

OMR은 표시를 위한 지정된 영역이 있는 특수 양식 템플릿을 생성하는 것으로 시작됩니다. 양식을 작성하고 스캔(또는 전자적으로 수신)하면 소프트웨어가 이미지를 분석하여 각 OMR 영역의 위치와 경계를 파악하고 사용자가 표시한 내용을 기록합니다.

전체 과정은 여러 기술적 단계로 구성됩니다.

활용 분야:

OMR은 유사한 종이 또는 전자 데이터의 대량 흐름을 빠르고 정확하게 디지털화해야 하는 모든 분야에서 사용됩니다.


VintaSoft Forms Processing .NET Plug-in for OMR의 기능은 무엇인가요?

최신 라벨 인식 솔루션은 빠를 뿐만 아니라 구성도 유연합니다. 이 분야의 기술 선도 기업 중 하나가 VintaSoft Forms Processing .NET Plug-in입니다.

이 SDK는 자동 양식 식별 및 정렬, 광학 마크 인식, 텍스트 및 바코드 필드 인식을 완벽하게 지원합니다. 주요 기능은 다음과 같습니다.


기업이 VintaSoft OMR을 선택하는 이유

기업에게 있어 대량의 설문지, 시험 또는 표준 양식을 처리하는 것은 정확성이 요구되는 작업일 뿐만 아니라 비즈니스 프로세스를 최적화해야 하는 이유이기도 합니다. VintaSoft Forms Processing .NET Plug-in을 사용하면 다음과 같은 이점을 얻을 수 있습니다.


기술적 관점: VintaSoft에서 OMR이 작동하는 방식

실행 과정에서 소프트웨어는 먼저 수신된 도형 이미지가 어떤 템플릿에 속하는지 판별하고, 정렬한 다음 OMR 필드 분석을 시작합니다. 이러한 아키텍처를 통해 회전, 오프셋 또는 크기 변경이 있는 상태로 스캔된 도형도 처리할 수 있습니다.

양식 템플릿은 WinForms 또는 WPF 애플리케이션 내에서 코드 편집기와 시각적 편집기를 모두 사용하여 생성됩니다. 개발자는 OMR 필드의 유형과 모양을 사용자 지정하고, 자체 작업 및 문서 형식에 맞게 아키텍처를 확장할 수 있습니다.

광학 마크 인식(OMR)은 대량의 종이 및 전자 문서를 빠르고 안정적으로 처리하기 위한 최신 표준입니다. VintaSoft Forms Processing .NET Plug-in을 사용하면 프로세스가 유연하고 정확하며 모든 기업 시스템에 통합 가능하고 디지털 비즈니스 전환 요구 사항을 완벽하게 준수하게 됩니다.


다음은 OMR 마크가 포함된 작성된 양식을 식별하고 인식하는 방법을 보여주는 C# 코드입니다.
/// <summary>
/// Recognizes the form with OMR fields.
/// </summary>
/// <param name="formRecognitionManager">The form recognition manager.</param>
/// <param name="image">The image.</param>
public static void RecognizeFormWithOmrFields(
    Vintasoft.Imaging.FormsProcessing.FormRecognitionManager formRecognitionManager,
    Vintasoft.Imaging.VintasoftImage image)
{
    // if your form template contains OCR fields,
    // make sure OCR engine manager is initialized before recognition
    // (otherwise recognition will return null (Nothing)),
    // see OCR field recognition examples

    // recognize filled form in an image
    Vintasoft.Imaging.FormsProcessing.FormRecognitionResult recognitionResult = 
        formRecognitionManager.Recognize(image);

    // get the result of image comparison
    Vintasoft.Imaging.FormsProcessing.TemplateMatching.ImageImprintCompareResult imageCompareResult =
        recognitionResult.TemplateMatchingResult.ImageCompareResult;
    // if result is not reliable
    if (!imageCompareResult.IsReliable)
    {
        // matching template is not found
        System.Console.WriteLine("Matching template is not found.");
    }
    else
    {
        // get recognized page
        Vintasoft.Imaging.FormsProcessing.FormRecognition.FormPage recognizedPage = 
            recognitionResult.RecognizedPage;
        // get form field count
        if (recognizedPage.Items.Count == 0)
        {
            System.Console.WriteLine("No form fields were recognized.");
        }
        else
        {
            System.Console.WriteLine(string.Format(
                "Recognized form field count: {0}",
                recognizedPage.Items.Count));
            // for each recognized form field
            foreach (Vintasoft.Imaging.FormsProcessing.FormRecognition.FormField recognizedField in recognizedPage.Items)
            {
                if (recognizedField is Vintasoft.Imaging.FormsProcessing.FormRecognition.Omr.OmrField)
                {
                    Vintasoft.Imaging.FormsProcessing.FormRecognition.Omr.OmrField omrField = 
                        (Vintasoft.Imaging.FormsProcessing.FormRecognition.Omr.OmrField)recognizedField;
                    // write field info
                    System.Console.WriteLine(string.Format(
                        "  OMR field: name: {0}; state: {1}; confidence: {2:F1}%",
                        omrField.Name,
                        omrField.State,
                        omrField.Confidence * 100));
                }
            }
        }
    }
}