Java OMR knihovna

Potřebujete jednoduchou, ale na funkce bohatou Java OMR knihovnu? Chcete rozpoznat optické značky na naskenovaných obrázcích? Vyzkoušejte Aspose.OMR for Java – knihovna tříd Java pro provádění operací optického rozpoznávání značek (OMR) v aplikacích založených na Javě. Pojďme si rychle projít funkce zmíněného Java API, abychom viděli, jak rozpoznat optické značky v různých formátech obrázků a jak zachytit data označená člověkem z průzkumů, dotazníků nebo testů obsahujících MCQ.

Dynamicky vytvořte šablonu OMR pomocí knihovny Java OMR

Aspose.OMR for Java poskytuje kompletní sadu funkcí od vytvoření šablony OMR po rozpoznání optických značek pro zachycení dat. API podporuje generování souboru šablony OMR nebo obrázku z jednoduchých textových značek. Jednoduše můžete předat textové označení šablony do API a ono vám šablonu vygeneruje. Následuje ukázka textového označení pro šablonu 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________________________________

Textové označení můžete jednoduše uložit do textového souboru s příponou .txt. Po dokončení můžete šablonu vygenerovat pomocí následujících kroků:

Následující ukázka kódu ukazuje, jak vygenerovat šablonu OMR z textového označení pomocí 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++)
{
    // generování šablony volání poskytující cestu k souboru txt s označením
    GenerationResult res = engine.generateTemplate(GenerationMarkups[i]);

    // zkontrolujte v případě chyb
    if (res.getErrorCode() != 0)
    {
        System.out.println("ERROR CODE: " + res.getErrorCode());
    }

    // uložit výsledek generování: obrázek a šablonu .omr
    res.save(outputDirectory, GenerationMarkupsNoExt[i]);
}

Výstup

Java OMR knihovna

Optické rozpoznávání značek (OMR) v obrázcích pomocí Java

Abyste mohli provádět OMR v obrázcích, potřebujete pouze dvě věci – připravenou šablonu OMR (.omr) a obrázky (uživatelem vyplněné formuláře/listy), na kterých lze OMR provádět. Rozhraní API podporuje OMR pro následující formáty obrázků:

Následují kroky k provedení OMR na snímcích:

Následující ukázka kódu ukazuje, jak rozpoznat optické značky v obrázcích pomocí Java.

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

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

// inicializujte stroj a získejte procesor šablony poskytující cestu k souboru .omr
OmrEngine engine = new OmrEngine();
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
System.out.println("Template loaded.");

// smyčka obrázků
for (int i = 0; i < UserImages.length; i++) {
    // cestu k obrazu, který má být rozpoznán
    String imagePath = UserImages[i];
    System.out.println("Processing image: " + imagePath);

    // rozpoznat obraz a získat výsledek
    RecognitionResult result = templateProcessor.recognizeImage(imagePath);

    // exportovat výsledky jako řetězec csv
    String csvResult = result.getCsv();

    String json = result.getJson();

    // uložit csv do výstupní složky
    PrintWriter wr = new PrintWriter(new FileOutputStream(UserImagesNoExt[i] + ".csv"), true);
    wr.println(csvResult);
}

Použití vlastního prahu rozpoznání pro OMR

Výsledky OMR můžete také doladit definováním vlastního prahu mezi 0 až 100. Zvýšením prahu bude API přísnější při rozpoznávání odpovědí. Prahové hodnoty lze nastavit v metodě TemplateProcessor.recognizeImage() jako druhý parametr, jak ukazuje následující ukázka kódu Java.

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

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

// inicializujte stroj a získejte procesor šablony poskytující cestu k souboru .omr
OmrEngine engine = new OmrEngine();
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
System.out.println("Template loaded.");

// smyčka obrázků
for (int i = 0; i < UserImages.length; i++) {
    // cestu k obrazu, který má být rozpoznán
    String imagePath = UserImages[i];
    System.out.println("Processing image: " + imagePath);

    // rozpoznat obraz a získat výsledek
    RecognitionResult result = templateProcessor.recognizeImage(imagePath, customThreshold);

    // exportovat výsledky jako řetězec csv
    String csvResult = result.getCsv();

    String json = result.getJson();

    // uložit csv do výstupní složky
    PrintWriter wr = new PrintWriter(new FileOutputStream(UserImagesNoExt[i] + ".csv"), true);
    wr.println(csvResult);
}

Přepočítávání výsledků OMR

V některých případech můžete chtít přepočítat výsledky OMR s jinými prahovými hodnotami. Namísto opakovaného volání TemplateProcessor.recognizeImage() v takových případech můžete nakonfigurovat API pro automatický přepočet pomocí metody TemplateProcessor.recalculate() a zlepšit tak efektivitu zpracování obrazu. Následující ukázka kódu ukazuje, jak implementovat přepočet výsledků OMR.

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

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

// init engine a získejte procesor šablon
OmrEngine engine = new OmrEngine();
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
System.out.println("Template loaded.");

// Nastavte vlastní práh pro použití při přepočtu
// tato hodnota je v rozsahu (0 až 100)
// představuje procento požadovaných černých pixelů na obrázku bublin, které mají být rozpoznány
// tj. čím nižší je hodnota – tím méně černých pixelů je potřeba k tomu, aby se bublina počítala jako vyplněná a naopak
int CustomThreshold = 40;

// smyčka obrázků
for (int i = 0; i < UserImages.length; i++)
{
    String image = UserImages[i];
    String imagePath = image;
    System.out.println("Processing image: " + imagePath);

    // rozpoznat obrázek
    RecognitionResult result = templateProcessor.recognizeImage(imagePath);

    // získat export csv řetězec
    String stringRes = result.getCsv();

    // uložit csv do výstupní složky
    String outputName = UserImagesNoExt[i] + ".csv";

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

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

    // přepočítat výsledky rozpoznávání s vlastním prahem
    templateProcessor.recalculate(result, CustomThreshold);

    // získat export csv řetězec
    stringRes = result.getCsv();

    // uložit přepočítané výsledky
    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();
}

V případě, že byste měli nějaké dotazy nebo dotazy týkající se naší knihovny Java OMR, kontaktujte nás prostřednictvím našeho fóra pro jakékoli dotazy nebo dotazy.

Viz také