نظرة عامة على الميزات
نظرة عامة على الميزات
Aspose.OMR FOSS لـ Python يغطي ثلاث طبقات: تصميم قالب، إنشاء صورة صفحة ووصف لها، والتعرف على العلامات من نسخة ممسوحة ضوئياً.
تصميم القالب
القالب هو شجرة من تكوينات العناصر متجذرة في TemplateConfig. تشمل عناصر الأسئلة ChoiceBoxConfig (فقاعات خيارات ثابتة)، CheckBoxConfig (مربعات اختيار بأي علامة)، GridConfig وCompositeGridConfig (مصفوفات أرقام/رموز مدمجة في قيمة واحدة)، وAnswerSheetConfig (مصفوفات فقاعات إجابة مرقمة). حاويات التخطيط (BlockConfig، ContainerConfig، PositionedBlockConfig) تتحكم في الحدود والأعمدة والتموضع المطلق. يمكن بناء الشجرة نفسها من لغة DSL لتنسيق النص المدمج بدلاً من كائنات Python.
Generation
OmrEngine.Generate() يحول قالبًا إلى GenerationResult — صورة صفحة بالإضافة إلى وصف .omr JSON. MemoryGenerationResult يُظهر نفس الإخراج كتيارات في الذاكرة عبر GetImages()/GetOmr() للمتصلين الذين لا يرغبون في لمس نظام الملفات.
Recognition
TemplateProcessor.Recognize() يقرأ صورة ممسوحة واحدة مقابل القالب الذي تم إنشاؤها منه. RecognizeFolder() يطبق ذلك على كل صورة في مجلد. Recalculate() يعيد تقييم نتيجة تم التعرف عليها بالفعل بحد عتبة مختلف دون إعادة قراءة الصورة الأصلية. تصحيح الميل يستخدم علامات مرجعية في الزوايا (ReferencePointsSettings).
تصدير النتيجة
RecognitionResult يصدر إلى CSV، JSON، أو XML، كل منها مع نسخة مطابقة من تدفق الذاكرة (GetCsvAsStream، GetJsonAsStream، GetXmlAsStream).
أنظمة الكتابة وتعدادات التدفق الزائد
أنظمة الكتابة Arabic، Hebrew، Persian، Urdu، وBengali (بالإضافة إلى Western)، وتعدادات LongWordHandling/OverflowAction، موجودة وتُ解析 بشكل صحيح من أجل دقة API مع سطح Aspose.OMR. لا يتم احترام أيٍ منهما بعد في محرك العرض لهذا الإصدار — العرض يقتصر على LTR/Western فقط، وسلوك التدفق الزائد غير قابل للتكوين بعد. كلاهما متتبع في خارطة الطريق العليا.
نصائح وأفضل الممارسات
- استخدم لغة DSL للتمييز للنماذج البسيطة؛ انتقل إلى شجرة
TemplateConfigالقائمة على الكود عندما تحتاج إلى تحكم برمجي في وضع العناصر. FormValidationLogic.Exceptionيظهر انتهاكات الاختيار المتعدد فورًا بدلاً من تجاهلها بصمت، في الأسئلة التي تم تعطيل الاختيار المتعدد فيها.- يفضَّل
RecognizeFolder()على استدعاءاتRecognize()المتكررة بنفسك عند معالجة دفعة من المسحات. - استدعِ
Recalculate()بدلاً من إعادة المسح عندما تحتاج فقط إلى تجربة حد التعرف مختلف.
المشكلات الشائعة
| مشكلة | السبب | إصلاح |
|---|---|---|
SaveAsPdf() يطرح NotImplementedError | تصدير PDF غير مُنفّذ في هذا الإصدار | استخدم Save() لإخراج PNG، أو صدّر نتائج التعرف كـ CSV/JSON/XML |
| يتم قبول إجابة اختيار متعدد غير مسموح بها بصمت | الإعداد الافتراضي FormValidationLogic.Ignore لا يطرح استثناءً عند الانتهاكات | مرّر FormValidationLogic.Exception إلى GetTemplateProcessor()، وتأكد من أن Multiselect الخاص بالسؤال معطل |
FAQ
هل تتطلب المكتبة أي واجهة رسومية أو أجهزة OMR خارجية؟
لا. تعمل بالكامل من ملفات الصور (مسحات أو صور) باستخدام numpy، opencv-python، وPillow.
هل يمكنني إنشاء ملف PDF للقالب؟
ليس في هذا الإصدار — GenerationResult.SaveAsPdf() وMemoryGenerationResult.GetPDF() يرفعان NotImplementedError. استخدم مخرجات PNG من Save()/GetImages() بدلاً من ذلك.
كيف يمكنني معالجة العديد من النماذج الممسوحة ضوئياً دفعة واحدة؟
استخدم TemplateProcessor.RecognizeFolder(folderPath, recognitionThreshold) للتعرف على كل صورة في مجلد في استدعاء واحد.
API Reference ملخص
| فئة/طريقة | وصف |
|---|---|
OmrEngine.Generate | يعرض قالبًا على شكل صورة صفحة + واصف .omr |
OmrEngine.GetTemplateProcessor | يحمّل واصف .omr للتعرف |
TemplateProcessor.Recognize | يتعرف على صورة ممسوحة واحدة |
TemplateProcessor.RecognizeFolder | يتعرف على كل صورة في مجلد |
TemplateProcessor.Recalculate | يعيد تقييم النتيجة بحد عتبة جديد |
RecognitionResult.GetCsv / GetJson / GetXml | تصدير نتائج التعرف |