1. מוצרים
  2.   Aspose.OMR
  3.   Aspose.OMR FOSS for Python

Aspose.OMR FOSS עבור Python

תכנן גיליונות תשובות OMR והכר את הבועות המסומנות מתמונות סרוקות ב-Python — חינמי, קוד פתוח ולרישיון MIT.

ספרייה Python בקוד פתוח לזיהוי סימון אופטי

Aspose.OMR FOSS for Python היא ספרייה חינמית וקוד פתוח לעיצוב טפסי OMR (optical mark recognition) — גיליונות תשובות מרובי-בחירה, טפסי תיבות סימון, וסקרים — וזיהוי הסימנים שהמשיב ממלא מתוך תמונה סרוקה או מצולמת. היא מכוונת למפתחים האוטומטיים של דירוג מבחנים, טבלאת סקרים, או איסוף נתונים מבוססי טפסים ב-Python טהורה, בנויה על שום דבר פחות משונה מ-numpy, opencv-python, ו-Pillow. OmrEngine יחיד מכסה את כל זרימת העבודה — Generate() ממיר תבנית, שנבנית קוד-ראשית מתוך עץ TemplateConfig של אלמנטים כמו ChoiceBoxConfig, CheckBoxConfig, GridConfig, ו-AnswerSheetConfig, או כתובה ב-DSL תמציתי של סימון טקסט, לתמונת דף בתוספת מתאר .omr; GetTemplateProcessor() טוען את המתאר חזרה כדי לזהות סריקות חדשות עם Recognize() או RecognizeFolder(), ומחזיר תוצאות שניתן לייצא ל-CSV, JSON, או XML. הספרייה מורשית ברישיון MIT ומותקנת באמצעות פקודת pip אחת (ראה למטה); היא שחרור מוקדם (v0.1.0, Development Status: Alpha) המכסה את השכבות של יסוד, יצירה והכרה של כל משטח Aspose.OMR — הרינדור בגרסה זו הוא רק LTR/Western, עם מערכות כתיבה RTL וטיפול מלא ב-overflow מתועדים במפת הדרכים הראשית אך עדיין לא מומשו. למידע על משפחת המוצרים העסקית, ראה Aspose.OMR — Enterprise Product Family.

תכנון ויצירת טפסי OMR

  • תבניות קוד-ראשון: TemplateConfig, PageConfig, ו-config של אלמנטים (ChoiceBoxConfig, CheckBoxConfig, GridConfig, CompositeGridConfig, AnswerSheetConfig) מתארים כל שדה בעמוד.
  • Markup DSL: פורמט טקסט קומפקטי (?choicebox=... / &choicebox) בונה את אותם המבנים מבלי ליצור אובייקטים ידנית.
  • Writing-system enums: Arabic, Hebrew, Persian, Urdu, Bengali, ו-Western קיימים עבור API נאמנות עם משטח ה-Aspose.OMR; הרנדר של גרסה זו הוא LTR/Western בלבד — רינדור RTL עדיין לא מומש.
  • Overflow enums: LongWordHandling ותת-מחלקות OverflowAction (Clip, NoClip, Wrap) מנתחות ולוקחות בחשבון כהלכה, אך הרנדר של גרסה זו עדיין אינו מכבד אותן — התנהגות ה-overflow בפועל עדיין אינה ניתנת להגדרה.
  • Checkbox and choice groups: CheckBoxConfig ו-ChoiceBoxConfig תומכים בבחירה מרובה; FormValidationLogic, המוגדר פעם אחת לכל TemplateProcessor, יכול להרים שגיאה אם שאלה עם Multiselect מושבתת מקבלת יותר מסימן אחד.

איפה ניתן להשתמש ב-Aspose.OMR FOSS

  • מבחנים ובחינות: ליצור גליונות תשובה מרובי-בחירה ולזהות בועות ממולאות לצורך דירוג אוטומטי.
  • סקרים וטפסים: לבנות מטריצות גליונות תשובה ממוספרות עם AnswerSheetConfig לאיסוף תגובות בקנה מידה גדול.
  • רשתות קלט נתונים: GridConfig ו-CompositeGridConfig תופסים רשומות מספריות או סימנים מותאמים אישית כערך משולב אחד.
  • פלט מוכן להדפסה: Save() כותב דף PNG מוכן להדפסה לצד המתאר .omr המשמש לזיהוי מאוחר יותר.
  • צינורות אצווה: RecognizeFolder() מעבד תיקייה שלמה של סריקות בקריאה אחת.

זיהוי סימנים וייצוא תוצאות

  • מנוע ללא מצב: OmrEngine.Generate() מייצר GenerationResult (תמונת עמוד + תבנית .omr JSON); GetTemplateProcessor() טוען את התבנית כדי לזהות סריקות חדשות.
  • ספריות ייצוא מרובות: RecognitionResult מייצא ל-CSV, JSON, או XML, לכל אחת מהן גרסה תואמת של זרם.
  • תוצאות בזיכרון גם כן: MemoryGenerationResult חושף תמונות שנוצרו כזרמים בזיכרון דרך GetImages()/GetOmr() — אין צורך בקלט/פלט מהדיסק.
  • תיקון הטייה וכיול מחדש: הזיהוי מתקן הטיית סריקה משמרות הפינה, ו-Recalculate() מיישם מחדש סף שונה ללא סריקה מחודשת.
  • תמונות משובצות: ImageCollection מאפשר לסימון להתייחס לבייטים של תמונה בזיכרון לפי שם, ומונע נסיעות חוזרות למערכת הקבצים.

חוויית מפתחים

Aspose.OMR FOSS for Python מותקן באמצעות פקודת pip אחת (ראו את דוגמת ההתחלה המהירה למטה). ה-API מתמקד בשלושה אובייקטים — OmrEngine, עץ TemplateConfig (או ה-DSL של הסימון), ו-TemplateProcessor — המכסים את כל תהליך יצירה → סריקה → זיהוי → ייצוא.

הספרייה תלויה רק ב-numpy, opencv-python, ו-Pillow — אין קבצי בינאריים מקומיים של OMR שיש לקמפל. היא ברישיון MIT, מתארחת ב-GitHub, וכעת נמצאת בגרסה מוקדמת v0.1.0 המכסה את שכבות היסוד, הייצור והזיהוי של המשטח המלא של Aspose.OMR.

צור טופס וזיהה תשובות סרוקות

בנה (או טען) תבנית, שמור את תמונת העמוד שנוצר ואת המתאר .omr, ואז זיהה העתק סרוק וייצא את התוצאות כ-CSV.

git clone https://github.com/aspose-omr-foss/Aspose.OMR-FOSS-for-Python.git
cd Aspose.OMR-FOSS-for-Python
pip install -e .
from omr.api import OmrEngine, FormValidationLogic
engine = OmrEngine()
gen = engine.Generate("final-exam.txt")          # or a code-first TemplateConfig
gen.Save("out", "final-exam")                    # -> out/final-exam.png + out/final-exam.omr
processor = engine.GetTemplateProcessor("out/final-exam.omr", FormValidationLogic.Ignore)
result = processor.Recognize("scan.png")         # -100 = auto-calibrated threshold
print(result.GetCsv())                           # also GetJson() / GetXml()

בנה שאלה מרובת-בחירה ממארקאפ

DSL של סימון טקסט בונה את עץ הרכיבים זהה ל-API שנוצר בקוד ראשון. כאן ?choicebox=... פותח שאלה של תיבת בחירה, השורה הבאה מציגה את האפשרויות שלו, ו-&choicebox סוגרת אותה — Generate() מחזירה מתאר .Template JSON שניתן לבדוק ישירות.

import json
from omr.api import OmrEngine
markup = [
    "?choicebox=Rate it",
    "(1) Poor (2) Fair (3) Good",
    "&choicebox",
]
engine = OmrEngine()
result = engine.Generate(markup)
desc = json.loads(result.Template)
cb = desc["Pages"][0]["Elements"][0]
print([b["Value"] for b in cb["Fields"][0]["Bubbles"]])  # ['Poor', 'Fair', 'Good']

שאלות נפוצות

מהו מודל הרישוי עבור Aspose.OMR FOSS for Python?

זה מופץ תחת רישיון MIT — חופשי לשימוש, שינוי והפצה, כולל במוצרים מסחריים, בתנאי הכללת הודעת זכויות היוצרים המקורית.

אילו גרסאות של Python ותלויות נדרשות?

Python 3.10 או גרסה מאוחרת יותר, עם שלוש תלויות המותקנות אוטומטית על-ידי pip — numpy, opencv-python, ו-Pillow. אין צורך בחומרת OMR מקומית או שירותים חיצוניים.

האם אני יכול לייצא את התבנית שנוצרה כקובץ PDF?

לא בגרסה זו. GenerationResult.SaveAsPdf() ו-MemoryGenerationResult.GetPDF() שניהם מעלים NotImplementedError. השתמש בפלט PNG מ-Save() או GetImages() במקום זאת.

לאילו פורמטים ניתן לייצא תוצאות זיהוי?

RecognitionResult מייצא ל-CSV, JSON או XML באמצעות GetCsv(), GetJson() ו-GetXml(), כאשר לכל אחד יש גרסת זרם בזיכרון תואמת.

האם הוא תומך בשפות אחרות מאשר אנגלית?

עדיין לא עבור הרינדור. שכבת התבנית מגדירה מערכות כתיבה ערבית, עברית, פרסית, אורדו ובנגלית כדי לשמור על נאמנות למשטח Aspose.OMR, אך מנוע הרינדור של גרסה זו הוא רק LTR/מערבוני — רינדור RTL והקפדה על טיפוגרפיית ספרות מקומית נמצאים במפת הדרכים של המקור, עדיין לא יושמו.

האם אימות של בחירת תשובות מרובות נתמך?

כן, עבור שאלות שהוגדרו עם Multiselect מושבת. העבר FormValidationLogic.Exception ל-GetTemplateProcessor() כדי להציג שגיאה כאשר שאלה כזו מקבלת יותר מסימון אחד; ברירת המחדל, Ignore, מקבלת זאת בשקט. GlobalPageSettings.Multiselect מוגדר כברירת מחדל כמאופשר.

  

משאבי תמיכה ולמידה

 עברית