Apakah Anda memerlukan pustaka Java OMR yang sederhana namun kaya fitur? Apakah Anda ingin mengenali tanda optik pada gambar yang dipindai? Coba Anggap.OMR untuk Java - Pustaka kelas Java untuk melakukan operasi Pengenalan Tanda Optik (OMR) dalam aplikasi berbasis Java. Mari kita telusuri fitur Java API tersebut untuk melihat cara mengenali tanda optik dalam berbagai format gambar dan menangkap data yang ditandai manusia dari survei, kuesioner, atau tes yang berisi soal pilihan ganda.
Buat Template OMR Secara Dinamis menggunakan Java OMR Library
Aspose.OMR for Java menyediakan serangkaian fitur lengkap mulai dari membuat template OMR hingga mengenali tanda optik untuk menangkap data. API mendukung pembuatan file template OMR atau gambar dari markup teks sederhana. Anda cukup meneruskan markup teks template ke API dan itu akan menghasilkan template untuk Anda. Berikut ini adalah contoh markup teks untuk template 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________________________________
Anda cukup menyimpan markup teks dalam file teks dengan ekstensi .txt. Setelah selesai, Anda dapat membuat template menggunakan langkah-langkah berikut:
- Buat objek OmrEngine.
- Panggil metode OmrEngine.generateTemplate() yang menerima jalur file teks markup.
- Simpan template menggunakan metode GenerationResult.save.
Contoh kode berikut menunjukkan cara membuat template OMR dari markup teks menggunakan 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++)
{
// panggil pembuatan templat yang menyediakan jalur ke file txt dengan markup
GenerationResult res = engine.generateTemplate(GenerationMarkups[i]);
// memeriksa jika terjadi kesalahan
if (res.getErrorCode() != 0)
{
System.out.println("ERROR CODE: " + res.getErrorCode());
}
// simpan hasil generasi: gambar dan template .omr
res.save(outputDirectory, GenerationMarkupsNoExt[i]);
}
Keluaran
Optical Mark Recognition (OMR) pada Gambar menggunakan Java
Untuk melakukan OMR dalam gambar, Anda hanya memerlukan dua hal - template OMR yang telah disiapkan (.omr) dan gambar (formulir/lembar yang diisi pengguna) untuk melakukan OMR. API mendukung OMR untuk format gambar berikut:
Berikut adalah langkah-langkah untuk melakukan OMR pada gambar:
- Buat objek OmrEngine.
- Buat objek TemplateProcessor dan inisialisasi dengan jalur template OMR.
- Kenali gambar menggunakan metode TemplateProcessor.recognizeImage() dan dapatkan hasil dalam format CSV atau JSON.
Contoh kode berikut menunjukkan cara mengenali tanda optik pada gambar menggunakan Java.
String[] UserImages = new String[] { "Sheet1.jpg", "Sheet2.jpg" };
String[] UserImagesNoExt = new String[] { "Sheet1", "Sheet2" };
String outputDirectory = "Result";
String templatePath = "Sheet.omr";
// inisialisasi mesin dan dapatkan prosesor template yang menyediakan jalur ke file .omr
OmrEngine engine = new OmrEngine();
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
System.out.println("Template loaded.");
// lingkaran gambar
for (int i = 0; i < UserImages.length; i++) {
// jalur ke gambar yang akan dikenali
String imagePath = UserImages[i];
System.out.println("Processing image: " + imagePath);
// mengenali gambar dan menerima hasil
RecognitionResult result = templateProcessor.recognizeImage(imagePath);
// ekspor hasil sebagai string csv
String csvResult = result.getCsv();
String json = result.getJson();
// simpan csv ke folder keluaran
PrintWriter wr = new PrintWriter(new FileOutputStream(UserImagesNoExt[i] + ".csv"), true);
wr.println(csvResult);
}
Menggunakan Batas Pengenalan Khusus untuk OMR
Anda juga dapat menyempurnakan hasil OMR dengan menentukan ambang batas khusus antara 0 hingga 100. Peningkatan ambang membuat API lebih ketat dalam mengenali jawaban. Nilai ambang batas dapat diatur dalam metode TemplateProcessor.recognizeImage() sebagai parameter kedua seperti yang ditunjukkan pada contoh kode Java berikut.
String[] UserImages = new String[] { "Sheet1.jpg", "Sheet2.jpg" };
String[] UserImagesNoExt = new String[] { "Sheet1", "Sheet2" };
String outputDirectory = "Result";
String templatePath = "Sheet.omr";
int customThreshold = 40;
// inisialisasi mesin dan dapatkan prosesor template yang menyediakan jalur ke file .omr
OmrEngine engine = new OmrEngine();
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
System.out.println("Template loaded.");
// lingkaran gambar
for (int i = 0; i < UserImages.length; i++) {
// jalur ke gambar yang akan dikenali
String imagePath = UserImages[i];
System.out.println("Processing image: " + imagePath);
// mengenali gambar dan menerima hasil
RecognitionResult result = templateProcessor.recognizeImage(imagePath, customThreshold);
// ekspor hasil sebagai string csv
String csvResult = result.getCsv();
String json = result.getJson();
// simpan csv ke folder keluaran
PrintWriter wr = new PrintWriter(new FileOutputStream(UserImagesNoExt[i] + ".csv"), true);
wr.println(csvResult);
}
Menghitung Ulang Hasil OMR
Dalam beberapa kasus, Anda mungkin ingin menghitung ulang hasil OMR dengan nilai ambang yang berbeda. Daripada memanggil TemplateProcessor.recognizeImage() berulang kali dalam kasus tersebut, Anda dapat mengonfigurasi API untuk penghitungan ulang otomatis menggunakan metode TemplateProcessor.recalculate() untuk meningkatkan efisiensi pemrosesan gambar. Contoh kode berikut menunjukkan cara menerapkan penghitungan ulang hasil OMR.
String[] UserImages = new String[] { "Sheet1.jpg", "Sheet2.jpg" };
String[] UserImagesNoExt = new String[] { "Sheet1", "Sheet2" };
String outputDirectory = "Result";
String templatePath = "Sheet.omr";
// init engine dan dapatkan prosesor template
OmrEngine engine = new OmrEngine();
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
System.out.println("Template loaded.");
// Tetapkan ambang khusus untuk digunakan dalam penghitungan ulang
// nilai ini berada dalam rentang (0 hingga 100)
// mewakili persentase piksel hitam yang diperlukan pada gambar gelembung untuk dikenali
// yaitu semakin rendah nilainya - semakin sedikit piksel hitam yang diperlukan agar gelembung dihitung sebagai terisi dan sebaliknya
int CustomThreshold = 40;
// lingkaran gambar
for (int i = 0; i < UserImages.length; i++)
{
String image = UserImages[i];
String imagePath = image;
System.out.println("Processing image: " + imagePath);
// mengenali gambar
RecognitionResult result = templateProcessor.recognizeImage(imagePath);
// dapatkan ekspor string csv
String stringRes = result.getCsv();
// simpan csv ke folder keluaran
String outputName = UserImagesNoExt[i] + ".csv";
PrintWriter wr = new PrintWriter(new FileOutputStream(outputName), true);
wr.println(stringRes);
System.out.println("Export done. Path: " + outputName);
// menghitung ulang hasil pengenalan dengan ambang khusus
templateProcessor.recalculate(result, CustomThreshold);
// dapatkan ekspor string csv
stringRes = result.getCsv();
// menyimpan hasil perhitungan ulang
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();
}
Jika Anda memiliki pertanyaan atau pertanyaan terkait perpustakaan Java OMR kami, hubungi kami melalui forum kami untuk pertanyaan atau pertanyaan apa pun.