Bạn có cần một thư viện Java OMR đơn giản nhưng giàu tính năng không? Bạn có muốn nhận dạng các dấu hiệu quang học trong hình ảnh được quét không? Hãy thử Aspose.OMR for Java - Một thư viện lớp Java để thực hiện các thao tác Nhận dạng nhãn hiệu quang học (OMR) trong các ứng dụng dựa trên Java. Chúng ta hãy xem nhanh các tính năng của API Java nói trên để xem cách nhận dạng nhãn hiệu quang học ở nhiều định dạng hình ảnh khác nhau và thu thập dữ liệu do con người đánh dấu từ các cuộc khảo sát, bảng câu hỏi hoặc bài kiểm tra có chứa MCQ.
Tự động tạo Mẫu OMR bằng Thư viện Java OMR
Aspose.OMR for Java cung cấp một bộ tính năng hoàn chỉnh từ việc tạo mẫu OMR đến nhận dạng các nhãn hiệu quang học để thu thập dữ liệu. API hỗ trợ tạo tệp mẫu OMR hoặc hình ảnh từ các đánh dấu văn bản đơn giản. Bạn có thể chỉ cần chuyển đánh dấu văn bản của mẫu tới API và nó sẽ tạo mẫu cho bạn. Sau đây là đánh dấu văn bản mẫu cho mẫu 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________________________________
Bạn có thể chỉ cần lưu đánh dấu văn bản trong tệp văn bản có phần mở rộng .txt. Sau khi hoàn tất, bạn có thể tạo mẫu bằng các bước sau:
- Tạo đối tượng OmrEngine.
- Gọi phương thức OmrEngine.generateTemplate() chấp nhận đường dẫn của tệp văn bản đánh dấu.
- Lưu mẫu bằng phương pháp GenerationResult.save.
Mẫu mã sau đây cho biết cách tạo mẫu OMR từ đánh dấu văn bản bằng Java.
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++)
{
// tạo mẫu cuộc gọi cung cấp đường dẫn đến tệp txt có đánh dấu
GenerationResult res = engine.generateTemplate(GenerationMarkups[i]);
// kiểm tra trong trường hợp có lỗi
if (res.getErrorCode() != 0)
{
System.out.println("ERROR CODE: " + res.getErrorCode());
}
// lưu kết quả tạo: hình ảnh và mẫu .omr
res.save(outputDirectory, GenerationMarkupsNoExt[i]);
}
đầu ra
Nhận dạng dấu quang học (OMR) trong hình ảnh bằng Java
Để thực hiện OMR trong hình ảnh, bạn chỉ cần hai thứ - mẫu OMR đã chuẩn bị sẵn (.omr) và hình ảnh (biểu mẫu/trang tính do người dùng điền) để thực hiện OMR. API hỗ trợ OMR cho các định dạng hình ảnh sau:
Sau đây là các bước để thực hiện OMR trong ảnh:
- Tạo đối tượng OmrEngine.
- Tạo đối tượng TemplateProcessor và khởi tạo nó bằng đường dẫn của mẫu OMR.
- Nhận dạng hình ảnh bằng phương pháp TemplateProcessor.recognizeImage() và nhận kết quả ở định dạng CSV hoặc JSON.
Mẫu mã sau đây cho biết cách nhận dạng nhãn hiệu quang học trong ảnh bằng Java.
String[] UserImages = new String[] { "Sheet1.jpg", "Sheet2.jpg" };
String[] UserImagesNoExt = new String[] { "Sheet1", "Sheet2" };
String outputDirectory = "Result";
String templatePath = "Sheet.omr";
// khởi tạo công cụ và nhận bộ xử lý mẫu cung cấp đường dẫn đến tệp .omr
OmrEngine engine = new OmrEngine();
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
System.out.println("Template loaded.");
// vòng lặp hình ảnh
for (int i = 0; i < UserImages.length; i++) {
// đường dẫn đến hình ảnh để được công nhận
String imagePath = UserImages[i];
System.out.println("Processing image: " + imagePath);
// nhận dạng hình ảnh và nhận kết quả
RecognitionResult result = templateProcessor.recognizeImage(imagePath);
// xuất kết quả dưới dạng chuỗi csv
String csvResult = result.getCsv();
String json = result.getJson();
// lưu csv vào thư mục đầu ra
PrintWriter wr = new PrintWriter(new FileOutputStream(UserImagesNoExt[i] + ".csv"), true);
wr.println(csvResult);
}
Sử dụng Ngưỡng nhận dạng tùy chỉnh cho OMR
Bạn cũng có thể tinh chỉnh kết quả OMR bằng cách xác định ngưỡng tùy chỉnh trong khoảng từ 0 đến 100. Việc tăng ngưỡng khiến API nghiêm ngặt hơn trong việc nhận dạng câu trả lời. Các giá trị ngưỡng có thể được đặt trong phương thức TemplateProcessor.recognizeImage() làm tham số thứ hai như được hiển thị trong mẫu mã Java sau đây.
String[] UserImages = new String[] { "Sheet1.jpg", "Sheet2.jpg" };
String[] UserImagesNoExt = new String[] { "Sheet1", "Sheet2" };
String outputDirectory = "Result";
String templatePath = "Sheet.omr";
int customThreshold = 40;
// khởi tạo công cụ và nhận bộ xử lý mẫu cung cấp đường dẫn đến tệp .omr
OmrEngine engine = new OmrEngine();
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
System.out.println("Template loaded.");
// vòng lặp hình ảnh
for (int i = 0; i < UserImages.length; i++) {
// đường dẫn đến hình ảnh để được công nhận
String imagePath = UserImages[i];
System.out.println("Processing image: " + imagePath);
// nhận dạng hình ảnh và nhận kết quả
RecognitionResult result = templateProcessor.recognizeImage(imagePath, customThreshold);
// xuất kết quả dưới dạng chuỗi csv
String csvResult = result.getCsv();
String json = result.getJson();
// lưu csv vào thư mục đầu ra
PrintWriter wr = new PrintWriter(new FileOutputStream(UserImagesNoExt[i] + ".csv"), true);
wr.println(csvResult);
}
Tính toán lại kết quả OMR
Trong một số trường hợp, bạn có thể muốn tính toán lại kết quả OMR với các giá trị ngưỡng khác nhau. Thay vì gọi đi gọi lại TemplateProcessor.recognizeImage() trong những trường hợp như vậy, bạn có thể định cấu hình API để tính toán lại tự động bằng phương pháp TemplateProcessor.recalculate() để cải thiện hiệu quả xử lý hình ảnh. Mẫu mã sau đây cho biết cách triển khai tính toán lại kết quả OMR.
String[] UserImages = new String[] { "Sheet1.jpg", "Sheet2.jpg" };
String[] UserImagesNoExt = new String[] { "Sheet1", "Sheet2" };
String outputDirectory = "Result";
String templatePath = "Sheet.omr";
// init engine và nhận bộ xử lý mẫu
OmrEngine engine = new OmrEngine();
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
System.out.println("Template loaded.");
// Đặt ngưỡng tùy chỉnh để sử dụng trong tính toán lại
// giá trị này nằm trong phạm vi (0 đến 100)
// đại diện cho tỷ lệ phần trăm pixel đen cần thiết trên hình ảnh bong bóng được nhận dạng
// tức là giá trị càng thấp - càng ít pixel đen cần thiết để bong bóng được tính là lấp đầy và ngược lại
int CustomThreshold = 40;
// vòng lặp hình ảnh
for (int i = 0; i < UserImages.length; i++)
{
String image = UserImages[i];
String imagePath = image;
System.out.println("Processing image: " + imagePath);
// nhận dạng hình ảnh
RecognitionResult result = templateProcessor.recognizeImage(imagePath);
// lấy chuỗi csv xuất
String stringRes = result.getCsv();
// lưu csv vào thư mục đầu ra
String outputName = UserImagesNoExt[i] + ".csv";
PrintWriter wr = new PrintWriter(new FileOutputStream(outputName), true);
wr.println(stringRes);
System.out.println("Export done. Path: " + outputName);
// tính toán lại kết quả nhận dạng với ngưỡng tùy chỉnh
templateProcessor.recalculate(result, CustomThreshold);
// lấy chuỗi csv xuất
stringRes = result.getCsv();
// lưu kết quả tính toán lại
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();
}
Trong trường hợp bạn có bất kỳ câu hỏi hoặc thắc mắc nào liên quan đến thư viện Java OMR của chúng tôi, hãy liên hệ với chúng tôi qua diễn đàn của chúng tôi nếu có bất kỳ câu hỏi hoặc thắc mắc nào.