Libreria di riconoscimento caselle di marcatura (OMR)
Recogniform Reader
download demo o versione di valutazione
richiedi informazioni
Recogniform OMR SDK è una libreria che consente il riconoscimento delle caselle di marcatura (check box).
Caratterisctiche principali
Il motore di riconoscimento
OMR (Optical Mark Recognition) consente di lavorare con due parametri operativi, valutando sia la
quantità d'inchiostro presente che la misura del segno nella casella.
Percentuale riempimento inchiostro
La percentuale di riempimento indica il numero di pixel neri sul totale dei pixel che compongono l'area della casella di marcatura.
Estensione del segno
L'estensione del segno indica la lunghezza del tratto di pixel neri consecutivi in rapporto alla diagonale della casella.
I vantaggi di un doppio riconoscimento
Il doppio riconoscimento percentuale riempimento / estensione segno consente di ottenere livelli elevatissimi di affidabilità. Basti pensare a tutti quei casi in cui la casella viene biffata con un segno molto sottile, nei pressi di un angolo: in molti casi il livello di inchiostro non è sufficiente a ritenere la casella "piena"; di qui l'importanza del calcolo della soglia di estensione del segno che consente di identificare correttamente il valore della casella OMR.
Accuratezza e velocità (royalties-free)
La procedura di riconoscimento è molto rapida ed accurata, richiedendo pochi decimi di secondo.
La libreria restituisce il valore di riempimento inchiostro ed il valore di estensione del segno.
Il kit di sviluppo per riconoscimento caselle di marcatura è disponibile in versione royalties free che consente di installare fino a 1000 licenze senza alcun costo aggiuntivo.
Di seguito un esempio di codice per utilizzare la libreria:
Code Sample
#include "stdafx.h"
#include "recoomr.c"
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// Load dynamically the library
LoadOMRLibrary();
// Init the OMR session
int Session= OMR_Init("demo", "demo");
long hBitmap;
// Check if a DIB is available in clipboard
bool bAvail= IsClipboardFormatAvailable(CF_DIB);
hBitmap = 0;
if (bAvail)
{
// Open the Clipboard
::OpenClipboard(NULL);
// Retrieve the DIB from clipboard
hBitmap = (long) GetClipboardData(CF_DIB);
// Recognize a check box in fixed position
OMR_Recognize (Session, (long) hBitmap, 20, 50, 40, 70);
// Close the Clipboard
::CloseClipboard();
// Retrieve the ink percentage (0 – 100)
double dInk;
OMR_GetMarkDensityPercent (Session, &dInk);
// Retrieve the check percentage (0 – 100)
double dCheck;
OMR_GetMarkSizePercent (Session, &dCheck);
double dInkThreshold = 10F;
double dCheckThreshold = 60F;
// Compare the percentages with the thresholds
if ((dInk>=dInkThreshold) && (dCheck>=dCheckThreshold))
{
// The check box is checked
MessageBox(NULL, "Checked ! ", "RESULT", MB_OK);
} else
{
if ((dInk<dInkThreshold) && (dCheck<dCheckThreshold))
{
// The check box is unchecked
MessageBox(NULL, "Unchecked ! ", "RESULT", MB_OK);
} else
{
// The check box status is unknown
MessageBox(NULL, "Unknown! ", "RESULT", MB_OK);
}
}
}
// Show an error message
else MessageBox(NULL, "Unable to paste DIB", "ERROR", MB_OK);
// Close the session
OMR_Done(Session);
// Unload the library
FreeOMRLibrary();
return 0;
}