자바 OMR 라이브러리

단순하지만 기능이 풍부한 Java OMR 라이브러리가 필요하십니까? 스캔한 이미지에서 광학 표시를 인식하시겠습니까? Aspose.OMR for Java를 사용해 보십시오. Java 기반 애플리케이션에서 OMR(광학 마크 인식) 작업을 수행하는 Java 클래스 라이브러리입니다. 다양한 이미지 형식의 광학 표시를 인식하고 MCQ가 포함된 설문조사, 설문지 또는 테스트에서 사람이 표시한 데이터를 캡처하는 방법을 알아보기 위해 해당 Java API의 기능을 간략히 살펴보겠습니다.

Java OMR 라이브러리를 사용하여 동적으로 OMR 템플릿 생성

Aspose.OMR for Java는 OMR 템플릿 생성에서 데이터 캡처를 위한 광학 표시 인식에 이르기까지 완전한 기능 세트를 제공합니다. API는 간단한 텍스트 마크업에서 OMR 템플릿 파일 또는 이미지 생성을 지원합니다. 템플릿의 텍스트 마크업을 API에 전달하기만 하면 템플릿이 자동으로 생성됩니다. 다음은 OMR 템플릿에 대한 샘플 텍스트 마크업입니다.

?text=Name__________________________________ Date____________

?grid=ID
sections_count=8
#What is Aspose.OMR main function?
() OCR () Capture human-marked data
() There is no main function () Enhance images
#Can Aspose.OMR process photos as well?
() Yes, indeed! () No
#Aspose.OMR is available on any platform, because it is:
() Cross-platform code () Cloud service
#Aspose.OMR works with any kind of OMR forms: tests, exams, questionnaires, surveys, etc.
() Yes, indeed! () No
#Excellent recognition results can be achieved only for filled bubbles at least for:
() 40% () 60% () 75% () 98%
#Do you have to mark up every question on the page?
(Yes) Yes, that will help a lot! (No) No
#Rate your preference from 0 to 9 with "0" being preference towards performance
and "9" being preference towards flexibility.
(0) (1) (2) (3) (4) (5) (6) (7) (8) (9)
#I found aspose omr to be a useful tool. (5 - strongly agree, 1 - strongly disagree)
(5) (4) (3) (2) (1)

?text= Answer sheet section
?answer_sheet=MainQuestions
elements_count=10
columns_count=5

?text=Sign________________________________

확장자가 .txt인 텍스트 파일에 텍스트 마크업을 간단히 저장할 수 있습니다. 완료되면 다음 단계를 사용하여 템플릿을 생성할 수 있습니다.

다음 코드 샘플은 Java를 사용하여 텍스트 마크업에서 OMR 템플릿을 생성하는 방법을 보여줍니다.

String outputDirectory = "GenerationResult";

String[] GenerationMarkups = new String[] { "Sheet.txt", "Grid.txt", "AsposeTest.txt" };
String[] GenerationMarkupsNoExt = new String[] { "Sheet", "Grid", "AsposeTest" };

OmrEngine engine = new OmrEngine();

for (int i = 0; i < GenerationMarkups.length; i++)
{
    // 마크업이 있는 txt 파일에 대한 경로를 제공하는 템플릿 생성 호출
    GenerationResult res = engine.generateTemplate(GenerationMarkups[i]);

    // 오류가 있는지 확인
    if (res.getErrorCode() != 0)
    {
        System.out.println("ERROR CODE: " + res.getErrorCode());
    }

    // 생성 결과 저장: 이미지 및 .omr 템플릿
    res.save(outputDirectory, GenerationMarkupsNoExt[i]);
}

산출

자바 OMR 라이브러리

Java를 사용한 이미지의 광학 마크 인식(OMR)

이미지에서 OMR을 수행하려면 준비된 OMR 템플릿(.omr)과 OMR을 수행할 이미지(사용자가 채운 양식/시트)의 두 가지만 있으면 됩니다. API는 다음 이미지 형식에 대해 OMR을 지원합니다.

다음은 이미지에서 OMR을 수행하는 단계입니다.

다음 코드 샘플은 Java를 사용하여 이미지의 광학 표시를 인식하는 방법을 보여줍니다.

String[] UserImages = new String[] { "Sheet1.jpg", "Sheet2.jpg" };
String[] UserImagesNoExt = new String[] { "Sheet1", "Sheet2" };

String outputDirectory = "Result";
String templatePath = "Sheet.omr";

// 엔진을 초기화하고 .omr 파일에 대한 경로를 제공하는 템플릿 프로세서 가져오기
OmrEngine engine = new OmrEngine();
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
System.out.println("Template loaded.");

// 이미지 루프
for (int i = 0; i < UserImages.length; i++) {
    // 인식할 이미지의 경로
    String imagePath = UserImages[i];
    System.out.println("Processing image: " + imagePath);

    // 이미지를 인식하고 결과를 수신
    RecognitionResult result = templateProcessor.recognizeImage(imagePath);

    // 결과를 csv 문자열로 내보내기
    String csvResult = result.getCsv();

    String json = result.getJson();

    // csv를 출력 폴더에 저장
    PrintWriter wr = new PrintWriter(new FileOutputStream(UserImagesNoExt[i] + ".csv"), true);
    wr.println(csvResult);
}

OMR에 대한 사용자 지정 인식 임계값 사용

0에서 100 사이의 사용자 지정 임계값을 정의하여 OMR 결과를 미세 조정할 수도 있습니다. 임계값을 높이면 API가 답변을 인식하는 데 더 엄격해집니다. 임계값은 다음 자바 코드 샘플과 같이 TemplateProcessor.recognizeImage() 메소드에서 두 번째 매개변수로 설정할 수 있습니다.

String[] UserImages = new String[] { "Sheet1.jpg", "Sheet2.jpg" };
String[] UserImagesNoExt = new String[] { "Sheet1", "Sheet2" };

String outputDirectory = "Result";
String templatePath = "Sheet.omr";
int customThreshold = 40;

// 엔진을 초기화하고 .omr 파일에 대한 경로를 제공하는 템플릿 프로세서 가져오기
OmrEngine engine = new OmrEngine();
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
System.out.println("Template loaded.");

// 이미지 루프
for (int i = 0; i < UserImages.length; i++) {
    // 인식할 이미지의 경로
    String imagePath = UserImages[i];
    System.out.println("Processing image: " + imagePath);

    // 이미지를 인식하고 결과를 수신
    RecognitionResult result = templateProcessor.recognizeImage(imagePath, customThreshold);

    // 결과를 csv 문자열로 내보내기
    String csvResult = result.getCsv();

    String json = result.getJson();

    // csv를 출력 폴더에 저장
    PrintWriter wr = new PrintWriter(new FileOutputStream(UserImagesNoExt[i] + ".csv"), true);
    wr.println(csvResult);
}

OMR 결과 재계산

경우에 따라 다른 임계값을 사용하여 OMR 결과를 다시 계산해야 할 수도 있습니다. 이러한 경우 TemplateProcessor.recognizeImage()를 반복적으로 호출하는 대신 TemplateProcessor.recalculate() 메서드를 사용하여 자동 재계산 API를 구성하여 이미지 처리 효율성을 높일 수 있습니다. 다음 코드 샘플은 OMR 결과의 재계산을 구현하는 방법을 보여줍니다.

String[] UserImages = new String[] { "Sheet1.jpg", "Sheet2.jpg" };
String[] UserImagesNoExt = new String[] { "Sheet1", "Sheet2" };

String outputDirectory = "Result";
String templatePath = "Sheet.omr";

// 엔진 초기화 및 템플릿 프로세서 가져오기
OmrEngine engine = new OmrEngine();
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
System.out.println("Template loaded.");

// 재계산에 사용할 사용자 정의 임계값 설정
// 이 값은 범위(0 ~ 100)에 있습니다.
// 인식할 거품 이미지에 필요한 검은색 픽셀의 백분율을 나타냅니다.
// 즉, 값이 낮음 - 거품이 채워진 것으로 계산되는 데 필요한 검은색 픽셀이 적고 그 반대의 경우도 마찬가지입니다.
int CustomThreshold = 40;

// 이미지 루프
for (int i = 0; i < UserImages.length; i++)
{
    String image = UserImages[i];
    String imagePath = image;
    System.out.println("Processing image: " + imagePath);

    // 이미지를 인식
    RecognitionResult result = templateProcessor.recognizeImage(imagePath);

    // 내보내기 csv 문자열 가져오기
    String stringRes = result.getCsv();

    // csv를 출력 폴더에 저장
    String outputName = UserImagesNoExt[i] + ".csv";

    PrintWriter wr = new PrintWriter(new FileOutputStream(outputName), true);
    wr.println(stringRes);

    System.out.println("Export done. Path: " + outputName);

    // 사용자 정의 임계값으로 인식 결과 다시 계산
    templateProcessor.recalculate(result, CustomThreshold);

    // 내보내기 csv 문자열 가져오기
    stringRes = result.getCsv();

    // 다시 계산된 결과 저장
    outputName = UserImagesNoExt[i] + "_recalculated.csv";

    wr = new PrintWriter(new FileOutputStream(outputName), true);
    wr.println(stringRes);

    System.out.println("Recalculated result export done. Path: " + outputName);
    System.out.println();
}

Java OMR 라이브러리와 관련된 질문이나 쿼리가 있는 경우 질문이나 쿼리에 대해 포럼을 통해 문의하십시오.

또한보십시오