Java OMR Kitaplığı

Basit ama zengin özelliklere sahip bir Java OMR kitaplığına mı ihtiyacınız var? Taranmış görüntülerdeki optik işaretleri tanımak istiyor musunuz? Java tabanlı uygulamalarda Optik İşaret Tanıma (OMR) işlemlerini gerçekleştirmek için bir Java sınıf kitaplığı olan Aspose.OMR for Java‘yı deneyin. Çeşitli görüntü formatlarındaki optik işaretleri nasıl tanıyacağınızı ve anketlerden, anketlerden veya MCQ’ları içeren testlerden insan tarafından işaretlenmiş verileri nasıl yakalayacağınızı görmek için söz konusu Java API’sinin özelliklerine hızlıca bir göz atalım.

Java OMR Kitaplığını Kullanarak Dinamik Olarak OMR Şablonu Oluşturun

Aspose.OMR for Java, OMR şablonu oluşturmaktan verileri yakalamak için optik işaretleri tanımaya kadar eksiksiz bir özellik seti sağlar. API, basit metin işaretlemelerinden OMR şablon dosyasının veya görüntünün oluşturulmasını destekler. Şablonun metin işaretlemesini API’ye iletebilirsiniz ve o, şablonu sizin için oluşturacaktır. Aşağıda, bir OMR şablonu için örnek bir metin işaretlemesi yer almaktadır.

?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________________________________

Metin işaretlemesini .txt uzantılı bir metin dosyasına kaydedebilirsiniz. İşiniz bittiğinde, aşağıdaki adımları kullanarak şablonu oluşturabilirsiniz:

Aşağıdaki kod örneği, Java kullanılarak metin işaretlemesinden OMR şablonunun nasıl oluşturulacağını gösterir.

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++)
{
    // işaretleme ile txt dosyasına yol sağlayan çağrı şablonu oluşturma
    GenerationResult res = engine.generateTemplate(GenerationMarkups[i]);

    // hata durumunda kontrol edin
    if (res.getErrorCode() != 0)
    {
        System.out.println("ERROR CODE: " + res.getErrorCode());
    }

    // oluşturma sonucunu kaydet: görüntü ve .omr şablonu
    res.save(outputDirectory, GenerationMarkupsNoExt[i]);
}

Çıktı

Java OMR Kitaplığı

Java Kullanan Görüntülerde Optik İşaret Tanıma (OMR)

Görüntülerde OMR gerçekleştirmek için sadece iki şeye ihtiyacınız vardır - hazırlanmış OMR şablonu (.omr) ve üzerinde OMR gerçekleştirmek için görüntüler (kullanıcı tarafından doldurulan formlar/tablolar). API, aşağıdaki görüntü biçimleri için OMR’yi destekler:

Görüntülerde OMR gerçekleştirme adımları aşağıda verilmiştir:

Aşağıdaki kod örneği, Java kullanılarak görüntülerdeki optik işaretlerin nasıl tanınacağını gösterir.

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

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

// motoru başlat ve .omr dosyasına yol sağlayan şablon işlemciyi al
OmrEngine engine = new OmrEngine();
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
System.out.println("Template loaded.");

// görüntüler döngüsü
for (int i = 0; i < UserImages.length; i++) {
    // tanınacak görüntünün yolu
    String imagePath = UserImages[i];
    System.out.println("Processing image: " + imagePath);

    // görüntüyü tanı ve sonucu al
    RecognitionResult result = templateProcessor.recognizeImage(imagePath);

    // sonuçları csv dizisi olarak dışa aktar
    String csvResult = result.getCsv();

    String json = result.getJson();

    // csv'yi çıktı klasörüne kaydet
    PrintWriter wr = new PrintWriter(new FileOutputStream(UserImagesNoExt[i] + ".csv"), true);
    wr.println(csvResult);
}

OMR için Özel Tanıma Eşiği Kullanma

Ayrıca, 0 ile 100 arasında özel bir eşik tanımlayarak OMR sonuçlarında ince ayar yapabilirsiniz. Eşiği artırmak, API’nin yanıtları tanımada daha katı olmasını sağlar. Eşik değerleri, aşağıdaki Java kod örneğinde gösterildiği gibi TemplateProcessor.recognizeImage() yönteminde ikinci parametre olarak ayarlanabilir.

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

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

// motoru başlat ve .omr dosyasına yol sağlayan şablon işlemciyi al
OmrEngine engine = new OmrEngine();
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
System.out.println("Template loaded.");

// görüntüler döngüsü
for (int i = 0; i < UserImages.length; i++) {
    // tanınacak görüntünün yolu
    String imagePath = UserImages[i];
    System.out.println("Processing image: " + imagePath);

    // görüntüyü tanı ve sonucu al
    RecognitionResult result = templateProcessor.recognizeImage(imagePath, customThreshold);

    // sonuçları csv dizisi olarak dışa aktar
    String csvResult = result.getCsv();

    String json = result.getJson();

    // csv'yi çıktı klasörüne kaydet
    PrintWriter wr = new PrintWriter(new FileOutputStream(UserImagesNoExt[i] + ".csv"), true);
    wr.println(csvResult);
}

OMR Sonuçlarının Yeniden Hesaplanması

Bazı durumlarda OMR sonuçlarını farklı eşik değerleri ile yeniden hesaplamak isteyebilirsiniz. Bu gibi durumlarda tekrar tekrar TemplateProcessor.recognizeImage() öğesini çağırmak yerine, görüntü işleme verimliliğini artırmak için TemplateProcessor.recalculate() yöntemini kullanarak API’yi otomatik yeniden hesaplama için yapılandırabilirsiniz. Aşağıdaki kod örneği, OMR sonuçlarının yeniden hesaplanmasının nasıl uygulanacağını gösterir.

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

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

// init motoru ve get şablon işlemcisi
OmrEngine engine = new OmrEngine();
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
System.out.println("Template loaded.");

// Yeniden hesaplamada kullanmak için özel eşik belirleyin
// bu değer aralık içindedir (0 ila 100)
// tanınması için balon görüntüsündeki gerekli siyah piksellerin yüzdesini temsil eder
// yani değer ne kadar düşükse - balonun dolu olarak sayılması için gereken siyah piksel sayısı o kadar az olur ve bunun tersi de geçerlidir.
int CustomThreshold = 40;

// görüntüler döngüsü
for (int i = 0; i < UserImages.length; i++)
{
    String image = UserImages[i];
    String imagePath = image;
    System.out.println("Processing image: " + imagePath);

    // görüntüyü tanı
    RecognitionResult result = templateProcessor.recognizeImage(imagePath);

    // ihracat csv dizesini al
    String stringRes = result.getCsv();

    // csv'yi çıktı klasörüne kaydet
    String outputName = UserImagesNoExt[i] + ".csv";

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

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

    // tanıma sonuçlarını özel eşikle yeniden hesapla
    templateProcessor.recalculate(result, CustomThreshold);

    // ihracat csv dizesini al
    stringRes = result.getCsv();

    // yeniden hesaplanan sonuçları kaydet
    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 kitaplığımızla ilgili herhangi bir sorunuz veya sorunuz olması durumunda, herhangi bir sorunuz veya sorunuz için forumumuz aracılığıyla bizimle iletişime geçin.

Ayrıca bakınız