Optické rozpoznávání značek (OMR) je elektronický proces, který umožňuje čtení a snímání dat označených lidmi na zvláštním typu formuláře dokumentu. Tento formulář dokumentu může být testem nebo průzkumem, který se skládá z bublinových nebo čtvercových vstupů vyplněných uživateli. Můžeme snadno provádět OMR operace na naskenovaných obrázcích takových dotazníků, dotazníků nebo testovacích listů a programově číst uživatelské vstupy. V tomto článku se naučíme, jak provádět OMR a extrahovat data z obrázku v Javě.
Tento článek bude obsahovat následující témata:
- Java OMR API pro extrahování dat z obrázku
- Extrahovat data z obrázku
- Proveďte OMR a extrahujte data z více snímků
- Extrahovat data OMR s prahem
- Extrahovat data OMR s přepočtem
Java OMR API pro extrahování dat z obrázku
K provádění operací OMR a extrahování dat z podporované formáty obrázků budeme používat Aspose.OMR for Java API. Umožňuje navrhovat, vytvářet a rozpoznávat odpovědní archy, testy, papíry MCQ, kvízy, formuláře zpětné vazby, průzkumy a hlasovací lístky.
Třída OmrEngine rozhraní API se stará o vytvoření šablony a zpracování obrazu. Metoda getTemplateProcessor(String templatePath) této třídy vytvoří instanci TemplateProcessor pro zpracování šablon a obrázků. Obrázek můžeme rozpoznat pomocí metody recognizeImage(String imagePath). Vrací všechny prvky OMR jako instanci třídy RecognitionResult. Metoda getCsv() této třídy generuje řetězec CSV s výsledky rozpoznávání. Metoda recalculate(RecognitionResult result, int recognitionThreshold) aktualizuje výsledek rozpoznávání pomocí doladěných parametrů.
Prosím buď stáhněte si JAR API, nebo přidejte následující konfiguraci pom.xml do Java aplikace založené na Maven.
<repository>
<id>AsposeJavaAPI</id>
<name>Aspose Java API</name>
<url>http://repository.aspose.com/repo/</url>
</repository>
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-omr</artifactId>
<version>19.12</version>
</dependency>
Extrahujte data z obrázku v Javě
K provedení operace OMR potřebujeme připravenou šablonu OMR (.omr) spolu s obrázkem uživatelem vyplněných formulářů/listů. Můžeme provést operaci OMR na obrázku a extrahovat data podle následujících kroků:
- Nejprve vytvořte instanci třídy OmrEngine.
- Dále zavolejte metodu getTemplateProcessor() a inicializujte objekt třídy TemplateProcessor. Jako argument bere cestu k souboru šablony OMR.
- Poté získejte objekt RecognitionResult zavoláním metody recognitionImage() s cestou obrázku jako argumentem.
- Poté získejte výsledky rozpoznávání jako řetězce CSV pomocí metody getCsv().
- Nakonec uložte výsledek CSV jako soubor CSV na místní disk.
Následující ukázka kódu ukazuje, jak extrahovat data OMR z obrázku ve formátu CSV pomocí Java.
// Tento příklad kódu ukazuje, jak provést OMR na obrázku a extrahovat data
// Cesta k souboru šablony OMR
String templatePath = "C:\\Files\\OMR\\Sheet.omr";
// Cesta k souboru obrázku
String imagePath = "C:\\Files\\OMR\\Sheet1.png";
// Inicializujte OMR Engine
OmrEngine engine = new OmrEngine();
// Získejte procesor šablon
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
// Rozpoznat obrázek
RecognitionResult result = templateProcessor.recognizeImage(imagePath);
// Získejte výsledky ve formátu CSV
String csvResult = result.getCsv();
// Uložit soubor CSV
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1.csv"), true);
wr.println(csvResult);
stáhněte si šablonu OMR použitou v tomto příspěvku na blogu.
Proveďte OMR a extrahujte data z více snímků
Můžeme provádět operace OMR na více snímcích a extrahovat data do samostatného souboru CSV pro každý obrázek podle výše uvedených kroků. Musíme však opakovat kroky # 3, 4 a 5 pro všechny obrázky jeden po druhém.
Následující ukázka kódu ukazuje, jak extrahovat data OMR z více obrázků pomocí Java.
// Tento příklad kódu ukazuje, jak provést OMR na více obrázcích a extrahovat data
// Cesta k pracovní složce
String folderPath = "C:\\Files\\OMR\\";
// Cesta k souboru šablony OMR
String templatePath = folderPath + "Sheet.omr";
// Cesta k souboru obrázku
String[] UserImages = new String[] { "Sheet1.png", "Sheet2.png" };
// Inicializujte OMR Engine
OmrEngine engine = new OmrEngine();
// Získejte procesor šablon
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
// Zpracovávejte obrázky jeden po druhém ve smyčce
for (int i = 0; i < UserImages.length; i++)
{
String image = UserImages[i];
String imagePath = folderPath + image;
// Rozpoznat obrázek
RecognitionResult result = templateProcessor.recognizeImage(imagePath);
// Získejte výsledky ve formátu CSV
String csvResult = result.getCsv();
// Uložit soubor CSV
PrintWriter wr = new PrintWriter(new FileOutputStream(folderPath + "Sheet_" + i + ".csv"), true);
wr.println(csvResult);
System.out.println(csvResult);
}
Extrahujte data OMR pomocí prahu v Javě
Operace OMR můžeme provádět s prahovou hodnotou (0 až 100) v závislosti na požadavcích. Čím vyšší je hodnota prahu, tím je API přísnější ve zvýrazňování odpovědí. Chcete-li provést OMR s prahovou hodnotou, postupujte podle výše uvedených kroků. Stačí však zavolat přetíženou metodu rozpoznatImage(řetězec, int32) v kroku č. 3. Jako argumenty bere cestu k souboru obrázku a prahovou hodnotu.
Následující ukázka kódu ukazuje, jak provést OMR s prahovou hodnotou pomocí Java.
// Tento příklad kódu ukazuje, jak provést OMR s therashold a extrahovat data z obrázku
// Cesta k souboru šablony OMR
String templatePath = "C:\\Files\\OMR\\Sheet.omr";
// Cesta k souboru obrázku
String imagePath = "C:\\Files\\OMR\\Sheet1.png";
// Prahová hodnota
int CustomThreshold = 40;
// Inicializujte OMR Engine
OmrEngine engine = new OmrEngine();
// Získejte procesor šablon
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
// Rozpoznat obrázek
RecognitionResult result = templateProcessor.recognizeImage(imagePath, CustomThreshold);
// Získejte výsledky ve formátu CSV
String csvResult = result.getCsv();
// Uložit soubor CSV
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1_threshold.csv"), true);
wr.println(csvResult);
System.out.println(csvResult);
Extrahujte data OMR pomocí přepočtu v Javě
V určitých případech může být nutné přepočítat výsledky OMR s jinými prahovými hodnotami. Pro tento účel můžeme nakonfigurovat API tak, aby se automaticky přepočítávalo pomocí metody TemplateProcessor.recalculate(). Umožňuje vícenásobné zpracování obrazu změnou nastavení prahu pro dosažení požadovaného výsledku. Operaci OMR s přepočtem můžeme provést podle následujících kroků:
- Nejprve vytvořte instanci třídy OmrEngine.
- Dále zavolejte metodu getTemplateProcessor() a inicializujte objekt třídy TemplateProcessor. Jako argument bere cestu k souboru šablony OMR.
- Poté získejte objekt RecognitionResult zavoláním metody recognitionImage() s cestou obrázku jako argumentem.
- Dále exportujte výsledky rozpoznávání jako řetězec CSV pomocí metody getCsv().
- Potom uložte výsledek CSV jako soubor CSV na místní disk.
- Dále zavolejte metodu recalculate(). Jako argumenty bere objekt RecognitionResult a prahovou hodnotu.
- Poté se výsledky rozpoznávání exportují jako řetězec CSV pomocí metody getCsv().
- Nakonec uložte výsledek CSV jako soubor CSV na místní disk.
Následující ukázka kódu ukazuje, jak provést OMR pomocí metody přepočtu pomocí Java.
// Cesta k souboru šablony OMR
String templatePath = "C:\\Files\\OMR\\Sheet.omr";
// Cesta k souboru obrázku
String imagePath = "C:\\Files\\OMR\\Sheet1.png";
// Prahová hodnota
int CustomThreshold = 40;
// Inicializujte OMR Engine
OmrEngine engine = new OmrEngine();
// Získejte procesor šablon
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
// Rozpoznat obrázek
RecognitionResult result = templateProcessor.recognizeImage(imagePath, CustomThreshold);
// Získejte výsledky ve formátu CSV
String csvResult = result.getCsv();
// Uložit soubor CSV
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1.csv"), true);
wr.println(csvResult);
// Přepočítat
// Zde můžete použít novou prahovou hodnotu
templateProcessor.recalculate(result, CustomThreshold);
// Získejte přepočtené výsledky ve formátu CSV
csvResult = result.getCsv();
// Uložit přepočítaný výsledný soubor CSV
PrintWriter finalWr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1_recalculated.csv"), true);
finalWr.println(csvResult);
Získejte bezplatnou licenci
Můžete získat bezplatnou dočasnou licenci a vyzkoušet knihovnu bez omezení hodnocení.
Závěr
V tomto článku jsme se naučili, jak:
- provádět operace OMR na snímcích;
- extrahovat data ve formátu CSV programově;
- použít nastavení prahu při provádění OMR na snímcích;
- přepočítat výsledky OMR v automobilovém procesu pomocí Java.
Kromě toho, extrahování dat z obrazu v Javě, se můžete dozvědět více o Aspose.OMR pro Java API pomocí dokumentace. V případě jakýchkoli nejasností nás neváhejte kontaktovat na našem bezplatném fóru podpory.