
개요
광학 마크 인식(OMR)은 사람들이 테스트나 설문조사와 같은 특별히 제작된 문서 양식에 표기한 데이터를 읽고 캡처하는 전자적 프로세스입니다. 사용자에 의해 채워진 버블 또는 사각형 입력을 포함합니다. 자바에서 이미지로부터 데이터 추출하기를 사용하여 이러한 설문지, 질문지 또는 시험지의 스캔된 이미지를 효율적으로 처리할 수 있으며, 이를 통해 사용자 입력을 프로그램적으로 읽을 수 있습니다. 이 문서에서는 자바를 사용하여 OMR을 수행하고 이미지로부터 데이터를 추출하는 방법을 안내합니다.
이 문서에서는 다음과 같은 주제를 다룰 것입니다:
- 이미지에서 데이터 추출을 위한 자바 OMR API
- 자바에서 이미지로부터 데이터 추출하기
- 여러 이미지에서 OMR 수행 및 데이터 추출하기
- 임계값으로 OMR 데이터 추출하기
- 재계산으로 OMR 데이터 추출하기
이미지를 통해 데이터 추출을 위한 자바 OMR API
OMR 작업을 수행하고 자바에서 이미지로부터 데이터 추출하기를 위해 Aspose.OMR for Java API를 사용할 것입니다. 이 강력한 도구는 답안지, 테스트, 객관식 시험지, 퀴즈, 피드백 양식, 설문조사 및 투표용지의 디자인, 생성 및 인식을 가능하게 합니다.
API 내의 OmrEngine 클래스는 템플릿 생성 및 이미지 처리를 담당합니다. getTemplateProcessor(String templatePath) 메서드는 템플릿 및 이미지를 처리하기 위해 맞춤형 TemplateProcessor 인스턴스를 초기화합니다. 이미지를 인식하기 위해서는 recognizeImage(String imagePath) 메서드를 사용할 수 있으며, 이 메서드는 모든 OMR 요소를 RecognitionResult 클래스 인스턴스로 반환합니다. getCsv() 메서드를 사용하면 인식 결과를 포함하는 CSV 문자열을 생성할 수 있습니다. 또한 recalculate(RecognitionResult result, int recognitionThreshold) 메서드를 사용하면 사용자 지정 매개변수로 인식 결과를 다듬을 수 있습니다.
API의 pom.xml 구성을 Maven 기반 자바 애플리케이션에 추가하거나 JAR 파일을 다운로드하시기 바랍니다.
<repository>
<id>AsposeJavaAPI</id>
<name>Aspose Java API</name>
<url>http://repository.aspose.com/repo/</url>
</repository>
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-omr</artifactId>
<version>19.12</version>
</dependency>
자바에서 이미지로부터 데이터 추출하기
OMR 작업을 수행하기 위해서는 준비된 OMR 템플릿 파일(.omr)과 사용자에 의해 채워진 양식이나 시트의 이미지가 필요합니다. 자바에서 OMR 작업을 사용하여 이미지로부터 데이터 추출하기 과정은 다음 단계를 포함합니다:
- 첫째, OmrEngine 클래스의 인스턴스를 생성합니다.
- 다음으로, getTemplateProcessor() 메서드를 호출하고 OMR 템플릿 파일 경로를 인수로 전달하여 TemplateProcessor 클래스 객체를 초기화합니다.
- 그런 다음, 이미지 경로를 인수로 사용하여 recognizeImage() 메서드를 호출하여 RecognitionResult 객체를 가져옵니다.
- 그 후, getCsv() 메서드를 사용하여 CSV 문자열로 인식 결과를 얻습니다.
- 마지막으로, CSV 결과를 로컬 디스크에 CSV 파일로 저장합니다.
다음 코드 샘플은 OMR 데이터를 CSV 형식으로 변환하여 자바에서 이미지로부터 데이터 추출하기를 수행하는 방법을 보여줍니다.
// This code example demonstrates how to perform OMR on an image and extract data | |
// OMR Template file path | |
String templatePath = "C:\\Files\\OMR\\Sheet.omr"; | |
// Image file path | |
String imagePath = "C:\\Files\\OMR\\Sheet1.png"; | |
// Initialize OMR Engine | |
OmrEngine engine = new OmrEngine(); | |
// Get template processor | |
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath); | |
// Recognize image | |
RecognitionResult result = templateProcessor.recognizeImage(imagePath); | |
// Get results in CSV | |
String csvResult = result.getCsv(); | |
// Save CSV file | |
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1.csv"), true); | |
wr.println(csvResult); |

자바에서 이미지에서 OMR을 수행하고 데이터 추출하기.
이 블로그 포스트에서 사용된 OMR 템플릿을 다운로드하시기 바랍니다.
여러 이미지에서 OMR 수행 및 데이터 추출하기
여러 이미지에서 OMR 작업을 수행하고 각 이미지에 대해 별도의 CSV 파일로 데이터를 추출할 수 있으며, 앞서 설명한 단계들을 반복하여 수행합니다. 자바에서 이미지로부터 데이터 추출하기를 위해서는 모든 이미지를 개별적으로 처리하기 위해 3, 4, 5단계를 반복해야 합니다.
아래는 자바를 사용하여 여러 이미지에서 OMR 데이터를 추출하는 방법을 보여주는 코드 샘플입니다.
// This code example demonstrates how to perform OMR on multiple images and extract data | |
// Working folder path | |
String folderPath = "C:\\Files\\OMR\\"; | |
// OMR Template file path | |
String templatePath = folderPath + "Sheet.omr"; | |
// Image file path | |
String[] UserImages = new String[] { "Sheet1.png", "Sheet2.png" }; | |
// Initialize OMR Engine | |
OmrEngine engine = new OmrEngine(); | |
// Get template processor | |
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath); | |
// Process images one by one in a loop | |
for (int i = 0; i < UserImages.length; i++) | |
{ | |
String image = UserImages[i]; | |
String imagePath = folderPath + image; | |
// Recognize image | |
RecognitionResult result = templateProcessor.recognizeImage(imagePath); | |
// Get results in CSV | |
String csvResult = result.getCsv(); | |
// Save CSV file | |
PrintWriter wr = new PrintWriter(new FileOutputStream(folderPath + "Sheet_" + i + ".csv"), true); | |
wr.println(csvResult); | |
System.out.println(csvResult); | |
} |
임계값으로 OMR 데이터 추출하기
자바에서 광학 마크 인식(OMR) 작업을 수행하기 위해서는 특정 요구사항에 따라 0에서 100 사이의 임계값을 사용합니다. 이 임계값은 자바에서 이미지로부터 데이터 추출하기에 사용되며, API가 답변을 강조하는 정도를 결정합니다. 높은 값은 더욱 엄격하게 하여 인식하는 결과를 이끌어냅니다. 선택한 임계값으로 OMR 처리 시 위에서 언급한 단계를 준수해야 합니다. 특히 3단계에서 recognizeImage(string, int32) 메서드를 호출해야 합니다. 이 오버로드된 메서드는 이미지 파일 경로와 원하는 임계값을 매개변수로 요구합니다.
다음 코드 샘플은 자바를 사용하여 임계값 값을 가진 OMR을 수행하는 방법을 보여줍니다:
// This code example demonstrates how to perform OMR with therashold and extract data from an image | |
// OMR Template file path | |
String templatePath = "C:\\Files\\OMR\\Sheet.omr"; | |
// Image file path | |
String imagePath = "C:\\Files\\OMR\\Sheet1.png"; | |
// Threshold value | |
int CustomThreshold = 40; | |
// Initialize OMR Engine | |
OmrEngine engine = new OmrEngine(); | |
// Get template processor | |
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath); | |
// Recognize image | |
RecognitionResult result = templateProcessor.recognizeImage(imagePath, CustomThreshold); | |
// Get results in CSV | |
String csvResult = result.getCsv(); | |
// Save CSV file | |
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1_threshold.csv"), true); | |
wr.println(csvResult); | |
System.out.println(csvResult); |
재계산으로 OMR 데이터 추출하기
특히 OMR과 관련된 자바에서 이미지로부터 데이터 추출하기를 수행할 때, 다른 임계값을 사용하여 결과를 재계산해야 할 필요가 있을 수 있습니다. API를 구성하면 TemplateProcessor.recalculate() 메서드를 통해 재계산을 자동화할 수 있습니다. 이 방법은 원하는 결과가 달성될 때까지 임계값을 조정하여 여러 이미지 처리를 반복할 수 있게 합니다. 재계산과 함께 OMR 작업을 성공적으로 수행하기 위해서는 아래 단계를 따르세요:
- 첫째, OmrEngine 클래스의 인스턴스를 생성합니다.
- 다음으로, getTemplateProcessor() 메서드를 호출하고 OMR 템플릿 파일 경로를 인수로 사용하는 TemplateProcessor 클래스 객체를 초기화합니다.
- 그런 다음, 이미지 경로를 인수로 사용하여 recognizeImage() 메서드를 호출하여 RecognitionResult 객체를 가져옵니다.
- 다음으로, getCsv() 메서드를 사용하여 인식 결과를 CSV 문자열로 내보냅니다.
- 그런 다음, CSV 결과를 로컬 디스크에 CSV 파일로 저장합니다.
- 다음으로, recalculate() 메서드를 호출합니다. 이 메서드는 RecognitionResult 객체와 임계값을 인수로 받습니다.
- 그 후, getCsv() 메서드를 사용하여 인식 결과를 CSV 문자열로 내보냅니다.
- 마지막으로, CSV 결과를 로컬 디스크에 CSV 파일로 저장합니다.
다음 코드 샘플은 자바를 사용하여 재계산 방법으로 OMR을 수행하는 방법을 보여줍니다:
// OMR Template file path | |
String templatePath = "C:\\Files\\OMR\\Sheet.omr"; | |
// Image file path | |
String imagePath = "C:\\Files\\OMR\\Sheet1.png"; | |
// Threshold value | |
int CustomThreshold = 40; | |
// Initialize OMR Engine | |
OmrEngine engine = new OmrEngine(); | |
// Get template processor | |
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath); | |
// Recognize image | |
RecognitionResult result = templateProcessor.recognizeImage(imagePath, CustomThreshold); | |
// Get results in CSV | |
String csvResult = result.getCsv(); | |
// Save CSV file | |
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1.csv"), true); | |
wr.println(csvResult); | |
// Recalculate | |
// You may apply new threshold value here | |
templateProcessor.recalculate(result, CustomThreshold); | |
// Get recalculated results in CSV | |
csvResult = result.getCsv(); | |
// Save recalculated resultant CSV file | |
PrintWriter finalWr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1_recalculated.csv"), true); | |
finalWr.println(csvResult); |
무료 라이센스 받기
한정된 평가 없이 라이브러리를 사용해 볼 수 있는 무료 임시 라이센스를 받을 수 있는 기회를 제공합니다. 이는 자바에서 이미지로부터 데이터 추출하기와 같은 기능을 탐색할 수 있는 훌륭한 방법으로, 기능을 완전히 평가할 수 있습니다. 아래의 목록 데이터는 참조를 위해 변경되지 않아야 합니다:
- 라이브러리는 대량의 데이터와 효율적으로 작동합니다.
- 기존 시스템과의 통합이 원활합니다.
- 추출된 데이터는 매우 정확하고 신뢰할 수 있습니다.
- 설치 단계는 간단하고 잘 문서화되어 있습니다.
결론
이 문서에서는 다음을 배웠습니다:
- 이미지에서 OMR 작업을 수행하기;
- 프로그램적으로 CSV 형식으로 데이터 추출하기;
- 이미지에서 OMR을 수행할 때 임계값 설정 적용하기;
- 자바를 사용하여 자동화된 프로세스에서 OMR 결과 재계산하기.
또한, 자바에서 이미지로부터 데이터 추출하기를 다룰 때, 문서를 검토하여 Aspose.OMR for Java API에 대해 더 알아볼 수 있습니다. 문제가 발생하면 무료 지원 포럼을 통해 언제든지 문의해 주시기 바랍니다.