1. المنتجات
  2.   Aspose.OMR
  3.   Aspose.OMR FOSS for Python

Aspose.OMR FOSS لـ Python

صمم نماذج إجابات OMR وتعرف على الفقاعات المحددة من الصور الممسوحة ضوئياً في Python — مجانية ومفتوحة المصدر ومرخصة برخصة MIT.

مكتبة Python مفتوحة المصدر للتعرف الضوئي على العلامات

Aspose.OMR FOSS for Python هي مكتبة مجانية ومفتوحة المصدر لتصميم نماذج OMR (التعرف الضوئي على العلامات) — أوراق إجابة متعددة الخيارات، نماذج صناديق الاختيار، والاستبيانات — والتعرف على العلامات التي يملأها المستجيب من صورة ممسوحة ضوئياً أو مُصورة.

إنها تستهدف المطورين الذين يقومون بأتمتة تصحيح الامتحانات، تجميع الاستبيانات، أو جمع البيانات القائمة على النماذج باستخدام 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، حالة التطوير: Alpha) يغطي الأساس، وتوليد، وطبقات التعرف من السطح الكامل لـ Aspose.OMR — العرض في هذا الإصدار هو LTR/غربي فقط، مع أن أنظمة الكتابة RTL ومعالجة الفائض الكاملة مُتتبعة في خارطة الطريق العليا ولكن لم تُنفذ بعد.

لعائلة منتجات المؤسسة، راجع Aspose.OMR — Enterprise Product Family.

تصميم وإنشاء نماذج OMR

  • قوالب الأولية بالشفرة: TemplateConfig، PageConfig، وتكوينات العناصر (ChoiceBoxConfig، CheckBoxConfig، GridConfig، CompositeGridConfig، AnswerSheetConfig) تصف كل حقل في الصفحة.
  • DSL للترميز: تنسيق نصي مضغوط (?choicebox=... / &choicebox) يبني نفس الهياكل دون إنشاء الكائنات يدويًا.
  • تعدادات نظام الكتابة: Arabic، Hebrew، Persian، Urdu، Bengali، و Western موجودة من أجل دقة API مع سطح Aspose.OMR؛ عارض هذا الإصدار يدعم LTR/Western فقط — لم يتم تنفيذ العرض RTL بعد.
  • تعدادات الفائض: LongWordHandling وفئات OverflowAction الفرعية (Clip، NoClip، Wrap) تُحلل وتتحقق منها بشكل صحيح، لكن عارض هذا الإصدار لا يلتزم بها بعد — سلوك الفائض الفعلي غير قابل للتكوين بعد.
  • مجموعات مربعات الاختيار والخيارات: 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/Western – تصيير RTL وتنسيق الأرقام الأصلية ما زالا على خارطة الطريق العليا، ولم يتم تنفيذهما بعد.

هل يتم دعم التحقق من صحة الإجابة متعددة الاختيارات؟

نعم، للأسئلة التي تم تكوينها مع تعطيل Multiselect. مرّر FormValidationLogic.Exception إلى GetTemplateProcessor() لتطرح استثناءً عندما يتلقى سؤال كهذا أكثر من علامة واحدة؛ الإعداد الافتراضي، Ignore، يقبل ذلك بصمت. GlobalPageSettings.Multiselect افتراضيًا مفعّل.

  

الدعم وموارد التعلم

 العربية