النواة API
النواة API
omr.api هي السطح الصغير الذي يتفاعل معه معظم الشيفرات: OmrEngine، TemplateProcessor، ImageCollection، وعدد FormValidationLogic enum.
OmrEngine
OmrEngine هي مصنع بلا حالة. Generate(source, settings) تقبل مصدر markup-DSL أو شجرة TemplateConfig وتعيد GenerationResult. GetTemplateProcessor(templateSource, validationLogic) يحمل مسار ملف .omr محفوظ مسبقًا ويعيد TemplateProcessor مرتبط؛ مصدر تدفق بدلاً من ذلك يأخذ معلمة text-encoding قبل منطق التحقق.
from omr.api import OmrEngine, FormValidationLogic
engine = OmrEngine()
gen = engine.Generate("final-exam.txt")
gen.Save("out", "final-exam")
processor = engine.GetTemplateProcessor("out/final-exam.omr", FormValidationLogic.Ignore)FormValidationLogic
يتحكم في سلوك المحرك عندما تُكسر قاعدة التحقق من القالب — مثل قيد الاختيار المتعدد — أثناء التعرف: Ignore (الافتراضي) يقبل الانتهاك بصمت، Exception يرفع استثناء، وundefined هو القيمة الصفرية للعدد enum. الفحص يطبق فقط على الأسئلة التي يكون Multiselect فيها معطلاً؛ GlobalPageSettings.Multiselect يكون مفعلاً افتراضيًا.
TemplateProcessor
Recognize(source, recognitionThreshold) يتعرف على صورة ممسوحة واحدة. RecognizeFolder(folderPath, recognitionThreshold) يتعرف على كل صورة في مجلد في استدعاء واحد. Recalculate(result, recognitionThreshold) يعيد تقييم نتيجة تم التعرف عليها مسبقًا بعتبة مختلفة، دون إعادة قراءة الصورة الأصلية.
ImageCollection
خريطة مقتصرة على الإضافة، حساسة لحالة الأحرف، تربط اسماً ببايتات الصورة الخام. Add(name, image) يسجل صورة، Contains(name) يتحقق مما إذا كان الاسم مسجلاً بالفعل، Count يُبلغ عن عدد المسجلين، وas_dict() تُعيد الخريطة الداعمة. يمكن للترميز الإشارة إلى صورة مسجلة بالاسم (?image=<name>) بدلاً من مسار نظام الملفات.
from omr.api import ImageCollection
images = ImageCollection()
with open("logo.png", "rb") as f:
images.Add("logo.png", f.read())نصائح وأفضل الممارسات
- قم بتمرير
FormValidationLogic.Exceptionأثناء التطوير لإظهار انتهاكات الاختيار المتعدد فورًا بدلاً من تجاهلها صامتًا (يُفعل فقط للأسئلة التي يكون فيهاMultiselectمعطَّل). Recalculate()أرخص من إعادة المسح — استخدمه عندما تحتاج فقط إلى تغيير عتبة التعرف.- أسماء
ImageCollectionحساسة لحالة الأحرف؛ تسجيل الاسم نفسه مرتين يرفع استثناء بدلاً من الكتابة فوقه صامتًا. Generate()يُبلغ عن معظم الفشل عبرGenerationResult.ErrorCode/ErrorMessageبدلاً من رفع استثناء — تحقق منErrorCodeقبل الوثوق بالنتيجة المُولَّدة.
المشكلات الشائعة
| المشكلة | السبب | الإصلاح |
|---|---|---|
| تسجيل صورة مرتين يثير | ImageCollection.Add لا يسمح بأسماء مكررة | تحقق من Contains(name) أولاً، أو استخدم اسمًا فريدًا لكل صورة |
| يتم قبول إجابة اختيار متعدد غير مسموح بها بصمت | القيمة الافتراضية FormValidationLogic.Ignore لا تُثير | مرّر FormValidationLogic.Exception إلى GetTemplateProcessor()، وتأكد من أن Multiselect الخاص بالسؤال معطّل |
FAQ
هل OmrEngine آمن لإعادة الاستخدام عبر قوالب متعددة؟
نعم — إنه بدون حالة؛ كل استدعاء Generate()/GetTemplateProcessor() مستقل.
كيف يمكنني التعرف على مجلد كامل من المسحات مرة واحدة؟
استدعِ TemplateProcessor.RecognizeFolder(folderPath, recognitionThreshold) بدلاً من تكرار Recognize() بنفسك.
ملخص API Reference
| فئة/طريقة | وصف |
|---|---|
OmrEngine.Generate | يعرض قالبًا كصورة صفحة + واصف .omr |
OmrEngine.GetTemplateProcessor | يحمّل واصف .omr للتعرف |
TemplateProcessor.Recognize / RecognizeFolder / Recalculate | نقاط دخول التعرف |
ImageCollection.Add / Contains / as_dict | سجل صور في الذاكرة للترميز |
FormValidationLogic | تعداد سلوك انتهاك التحقق |