Perpustakaan OMR Jawa

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:

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

Perpustakaan OMR Jawa

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:

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.

Lihat juga