ספריית Java OMR

האם אתה צריך ספריית Java OMR פשוטה אך עשירה בתכונות? האם אתה רוצה לזהות סימנים אופטיים בתמונות סרוקות? נסה את Aspose.OMR for Java - ספריית Java לביצוע פעולות זיהוי סימנים אופטי (OMR) ביישומים מבוססי Java. בואו נערוך סקירה מהירה בין התכונות של Java API האמור כדי לראות כיצד לזהות סימנים אופטיים במגוון פורמטים של תמונה וללכוד נתונים המסומנים על ידי אדם מסקרים, שאלונים או מבחנים המכילים MCQs.

צור באופן דינמי תבנית OMR באמצעות ספריית Java OMR

Aspose.OMR עבור Java מספקת סט שלם של תכונות מיצירת תבנית OMR ועד זיהוי הסימנים האופטיים ללכידת הנתונים. ה-API תומך ביצירת קובץ תבנית OMR או התמונה מסימון טקסט פשוט. אתה יכול פשוט להעביר את סימון הטקסט של התבנית ל-API והוא יפיק עבורך את התבנית. להלן סימון טקסט לדוגמה עבור תבנית 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________________________________

אתה יכול פשוט לשמור את סימון הטקסט בקובץ טקסט עם סיומת .txt. לאחר שתסיים, תוכל ליצור את התבנית באמצעות השלבים הבאים:

דוגמת הקוד הבאה מראה כיצד ליצור את תבנית OMR מסימון טקסט באמצעות 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++)
{
    // יצירת תבנית שיחה מספקת נתיב לקובץ ה-txt עם סימון
    GenerationResult res = engine.generateTemplate(GenerationMarkups[i]);

    // לבדוק במקרה של שגיאות
    if (res.getErrorCode() != 0)
    {
        System.out.println("ERROR CODE: " + res.getErrorCode());
    }

    // תוצאת שמירה: תמונה ותבנית .omr
    res.save(outputDirectory, GenerationMarkupsNoExt[i]);
}

תְפוּקָה

ספריית Java OMR

זיהוי סימנים אופטי (OMR) בתמונות באמצעות Java

על מנת לבצע OMR בתמונות, אתה רק צריך שני דברים - תבנית OMR המוכנה (.omr) והתמונות (טפסים/גליונות במילוי משתמש) לביצוע OMR. ה-API תומך ב-OMR עבור פורמטי התמונה הבאים:

להלן השלבים לביצוע OMR בתמונות:

דוגמת הקוד הבאה מראה כיצד לזהות סימנים אופטיים בתמונות באמצעות Java.

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

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

// אתחול מנוע וקבל מעבד תבניות המספק נתיב לקובץ .omr
OmrEngine engine = new OmrEngine();
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
System.out.println("Template loaded.");

// לולאת תמונות
for (int i = 0; i < UserImages.length; i++) {
    // נתיב לתמונה שתזוהה
    String imagePath = UserImages[i];
    System.out.println("Processing image: " + imagePath);

    // לזהות תמונה ולקבל תוצאה
    RecognitionResult result = templateProcessor.recognizeImage(imagePath);

    // ייצא תוצאות כמחרוזת csv
    String csvResult = result.getCsv();

    String json = result.getJson();

    // שמור CSV בתיקיית הפלט
    PrintWriter wr = new PrintWriter(new FileOutputStream(UserImagesNoExt[i] + ".csv"), true);
    wr.println(csvResult);
}

שימוש בסף זיהוי מותאם אישית עבור OMR

ניתן גם לכוונן עדין את תוצאות ה-OMR על ידי הגדרת סף מותאם אישית בין 0 ל-100. הגדלת הסף הופכת את ה-API למחמיר יותר בזיהוי התשובות. ניתן להגדיר את ערכי הסף בשיטת TemplateProcessor.recognizeImage() כפרמטר השני כפי שמוצג בדוגמה הבאה של קוד 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;

// אתחול מנוע וקבל מעבד תבניות המספק נתיב לקובץ .omr
OmrEngine engine = new OmrEngine();
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
System.out.println("Template loaded.");

// לולאת תמונות
for (int i = 0; i < UserImages.length; i++) {
    // נתיב לתמונה שתזוהה
    String imagePath = UserImages[i];
    System.out.println("Processing image: " + imagePath);

    // לזהות תמונה ולקבל תוצאה
    RecognitionResult result = templateProcessor.recognizeImage(imagePath, customThreshold);

    // ייצא תוצאות כמחרוזת csv
    String csvResult = result.getCsv();

    String json = result.getJson();

    // שמור CSV בתיקיית הפלט
    PrintWriter wr = new PrintWriter(new FileOutputStream(UserImagesNoExt[i] + ".csv"), true);
    wr.println(csvResult);
}

חישוב מחדש של תוצאות OMR

במקרים מסוימים, ייתכן שתרצה לחשב מחדש את תוצאות OMR עם ערכי סף שונים. במקום לקרוא ל-TemplateProcessor.recognizeImage() שוב ושוב במקרים כאלה, אתה יכול להגדיר את ה-API לחישוב מחדש אוטומטי באמצעות שיטת TemplateProcessor.recalculate() כדי לשפר את יעילות עיבוד התמונה. דגימת הקוד הבאה מראה כיצד ליישם את החישוב מחדש של תוצאות OMR.

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

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

// הפעל מנוע וקבל מעבד תבניות
OmrEngine engine = new OmrEngine();
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
System.out.println("Template loaded.");

// הגדר סף מותאם אישית לשימוש בחישוב מחדש
// ערך זה נמצא בטווח (0 עד 100)
// מייצג את אחוז הפיקסלים השחורים הנדרשים בתמונת הבועה לזיהוי
// כלומר ככל שהערך נמוך יותר - פחות פיקסלים שחורים נדרשים כדי שהבועה תיספר כמילויה ולהיפך
int CustomThreshold = 40;

// לולאת תמונות
for (int i = 0; i < UserImages.length; i++)
{
    String image = UserImages[i];
    String imagePath = image;
    System.out.println("Processing image: " + imagePath);

    // לזהות תמונה
    RecognitionResult result = templateProcessor.recognizeImage(imagePath);

    // קבל מחרוזת csv לייצא
    String stringRes = result.getCsv();

    // שמור CSV לתיקיית הפלט
    String outputName = UserImagesNoExt[i] + ".csv";

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

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

    // חישוב מחדש של תוצאות זיהוי עם סף מותאם אישית
    templateProcessor.recalculate(result, CustomThreshold);

    // קבל מחרוזת csv לייצא
    stringRes = result.getCsv();

    // לשמור תוצאות מחושבות מחדש
    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 שלנו, צור איתנו קשר דרך הפורום שלנו לכל שאלה או שאילתה.

ראה גם