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ů:
- Vytvořte objekt OmrEngine.
- Zavolejte metodu OmrEngine.generateTemplate(), která přijímá cestu k souboru s textem značek.
- Uložte šablonu pomocí metody GenerationResult.save.
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
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:
- Vytvořte objekt OmrEngine.
- Vytvořte objekt TemplateProcessor a inicializujte jej s cestou šablony OMR.
- Rozpoznejte obrázky pomocí metody TemplateProcessor.recognizeImage() a získejte výsledky ve formátu CSV nebo JSON.
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.