هسته 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 | رجیستری تصویر در حافظه برای نشانهگذاری |
FormValidationLogic | enum رفتار نقض اعتبار |