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.TemplateConfig, PageConfig, ו-config של אלמנטים (ChoiceBoxConfig, CheckBoxConfig, GridConfig, CompositeGridConfig, AnswerSheetConfig) מתארים כל שדה בעמוד.?choicebox=... / &choicebox) בונה את אותם המבנים מבלי ליצור אובייקטים ידנית.Arabic, Hebrew, Persian, Urdu, Bengali, ו-Western קיימים עבור API נאמנות עם משטח ה-Aspose.OMR; הרנדר של גרסה זו הוא LTR/Western בלבד — רינדור RTL עדיין לא מומש.LongWordHandling ותת-מחלקות OverflowAction (Clip, NoClip, Wrap) מנתחות ולוקחות בחשבון כהלכה, אך הרנדר של גרסה זו עדיין אינו מכבד אותן — התנהגות ה-overflow בפועל עדיין אינה ניתנת להגדרה.CheckBoxConfig ו-ChoiceBoxConfig תומכים בבחירה מרובה; FormValidationLogic, המוגדר פעם אחת לכל TemplateProcessor, יכול להרים שגיאה אם שאלה עם Multiselect מושבתת מקבלת יותר מסימן אחד.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']
זה מופץ תחת רישיון MIT — חופשי לשימוש, שינוי והפצה, כולל במוצרים מסחריים, בתנאי הכללת הודעת זכויות היוצרים המקורית.
Python 3.10 או גרסה מאוחרת יותר, עם שלוש תלויות המותקנות אוטומטית על-ידי pip — numpy, opencv-python, ו-Pillow. אין צורך בחומרת OMR מקומית או שירותים חיצוניים.
לא בגרסה זו. 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 מוגדר כברירת מחדל כמאופשר.