هسته API

هسته API

omr.api سطح کوچکی است که بیشتر کدها با آن تعامل دارند: OmrEngine، TemplateProcessor، ImageCollection و شمارش FormValidationLogic.


OmrEngine

OmrEngine یک کارخانه بدون وضعیت است. Generate(source, settings) یک منبع markup-DSL یا یک درخت TemplateConfig را می‌پذیرد و یک GenerationResult برمی‌گرداند. GetTemplateProcessor(templateSource, validationLogic) مسیر فایل .omr ذخیره‌شده قبلی را بارگذاری می‌کند و یک TemplateProcessor مقید بر می‌گرداند؛ منبع جریانی به‌جای آن یک آرگومان رمزگذاری متن را پیش از منطق اعتبارسنجی دریافت می‌کند.

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 مقدار صفر شمارش است. این بررسی تنها به سؤال‌هایی که 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() مستقل است.

چگونه می‌توانم یک پوشه کامل از اسکن‌ها را به‌صورت یکجا شناسایی کنم؟

به‌جای این‌که خودتان Recognize() را حلقه بزنید، TemplateProcessor.RecognizeFolder(folderPath, recognitionThreshold) را فراخوانی کنید.


خلاصه API Reference

کلاس/متدتوضیح
OmrEngine.Generateقالب را به تصویر صفحه رندر می‌کند + توصیف‌گر .omr
OmrEngine.GetTemplateProcessorیک توصیف‌گر .omr را برای شناسایی بارگذاری می‌کند
TemplateProcessor.Recognize / RecognizeFolder / Recalculateنقاط ورودی شناسایی
ImageCollection.Add / Contains / as_dictرجیستری تصویر در حافظه برای نشانه‌گذاری
FormValidationLogicenum رفتار نقض اعتبار

همچنین ببینید:

 فارسی