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/Western پشتیبانی می‌شود، در حالی که سیستم‌های نوشتاری RTL و مدیریت کامل سرریز در نقشهٔ راه بالادست دنبال می‌شوند اما هنوز پیاده‌سازی نشده‌اند. برای خانوادهٔ محصولات سازمانی، مراجعه کنید به Aspose.OMR — Enterprise Product Family.

طراحی و تولید فرم‌های OMR

  • قالب‌های مبتنی بر کد: TemplateConfig، PageConfig و پیکربندی‌های عنصر (ChoiceBoxConfig، CheckBoxConfig، GridConfig، CompositeGridConfig، AnswerSheetConfig) هر فیلد را در صفحه توصیف می‌کنند.
  • DSL نشانه‌گذاری: یک فرمت متنی فشرده (?choicebox=... / &choicebox) همان ساختارها را بدون ساخت دستی اشیاء می‌سازد.
  • enumهای سیستم نوشتاری: Arabic، Hebrew، Persian، Urdu، Bengali و Western برای دقت API با سطح Aspose.OMR موجود هستند؛ رندرر این نسخه فقط LTR/Western است — رندرر RTL هنوز پیاده‌سازی نشده است.
  • enumهای overflow: LongWordHandling و زیرکلاس‌های OverflowAction (Clip، NoClip، Wrap) به‌درستی تجزیه و اعتبارسنجی می‌شوند، اما رندرر این نسخه هنوز آن‌ها را رعایت نمی‌کند — رفتار واقعی overflow هنوز قابل تنظیم نیست.
  • گروه‌های چک‌باکس و گزینه: CheckBoxConfig و ChoiceBoxConfig از انتخاب چندگانه پشتیبانی می‌کنند؛ FormValidationLogic که یکبار برای هر TemplateProcessor تنظیم می‌شود، می‌تواند خطا بدهد اگر سؤال با Multiselect غیرفعال بیش از یک علامت دریافت کند.

جایی که Aspose.OMR FOSS می‌تواند استفاده شود

  • امتحانات و آزمون‌ها: تولید برگه‌های پاسخ چندگزینه‌ای و تشخیص حباب‌های پر شده برای نمره‌گذاری خودکار.
  • نظرسنجی‌ها و فرم‌ها: ساخت ماتریس‌های شماره‌دار برگه پاسخ با AnswerSheetConfig برای جمع‌آوری پاسخ‌های در مقیاس بزرگ.
  • شبکه‌های ورود داده: GridConfig و CompositeGridConfig ورودی‌های عددی یا نمادهای سفارشی را به‌عنوان یک مقدار ترکیبی ثبت می‌کنند.
  • خروجی قابل چاپ: Save() یک صفحه PNG آماده چاپ را همراه با توصیف‌گر .omr که برای تشخیص بعدی استفاده می‌شود، می‌نویسد.
  • خط لوله‌های دسته‌ای: RecognizeFolder() یک پوشه کامل اسکن‌ها را در یک فراخوانی پردازش می‌کند.

تشخیص نمرات و استخراج نتایج

  • Stateless engine: OmrEngine.Generate() یک GenerationResult تولید می‌کند (تصویر صفحه + قالب .omr JSON); GetTemplateProcessor() آن قالب را بارگذاری می‌کند تا اسکن‌های جدید را شناسایی کند.
  • Multiple export formats: RecognitionResult به CSV، JSON یا XML صادر می‌شود، هر کدام با یک نوع جریان متناظر.
  • In-memory results too: MemoryGenerationResult تصاویر تولید شده را به عنوان جریان‌های در-حافظه از طریق GetImages()/GetOmr() ارائه می‌دهد — نیازی به عملیات ورودی/خروجی دیسک نیست.
  • De-skew and recalibration: تشخیص انحراف اسکن را بر پایه علامت‌های مرجع گوشه‌ای اصلاح می‌کند، و Recalculate() آستانه متفاوتی را بدون اسکن مجدد اعمال می‌کند.
  • Embedded images: ImageCollection به نشانه‌گذاری اجازه می‌دهد تا بایت‌های تصویر در-حافظه را بر اساس نام ارجاع دهد و از رفت‌وآمدهای سیستم فایل جلوگیری کند.

تجربه توسعه‌دهنده

Aspose.OMR FOSS for Python با یک فرمان pip نصب می‌شود (مثال Quick Start را در زیر ببینید). API بر روی سه شیء — OmrEngine، یک درخت TemplateConfig (یا DSL علامت‌گذاری)، و TemplateProcessor — متمرکز است که کل جریان کار generate → scan → recognize → export را پوشش می‌دهد.

این کتابخانه فقط به 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 غیرفعال تنظیم شده‌اند. Pass FormValidationLogic.Exception به GetTemplateProcessor() برای ایجاد خطا وقتی چنین پرسشی بیش از یک علامت دریافت کرد؛ مقدار پیش‌فرض، Ignore، به‌صورت ساکتانه آن را می‌پذیرد. GlobalPageSettings.Multiselect به‌صورت پیش‌فرض فعال است.

  

منابع پشتیبانی و آموزش

 فارسی