مروری بر ویژگیها
مروری بر ویژگیها
Aspose.OMR نرمافزار متنباز برای 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() نتیجهی قبلاً شناساییشده را با آستانهای متفاوت دوبارهامتیازدهی میکند بدون اینکه تصویر منبع را دوباره بخواند. اصلاح انحراف (De-skew) از علائم مرجع گوشهای (ReferencePointsSettings) استفاده میکند.
صادرات نتیجه
RecognitionResult به CSV، JSON یا XML صادر میشود، هر کدام با یک گونهٔ جریان در-حافظهٔ متناظر (GetCsvAsStream، GetJsonAsStream، GetXmlAsStream).
سیستمهای نوشتاری و Enumهای سرریز
Arabic، Hebrew، Persian، Urdu و Bengali سیستمهای نوشتاری (بههمراه Western)، و Enumهای LongWordHandling/OverflowAction موجود هستند و بهدرستی برای دقت API با سطح Aspose.OMR تجزیه میشوند. هردو هنوز توسط موتور رندر این نسخه مورد توجه قرار نگرفتهاند — رندر فقط LTR/Western است و رفتار سرریز هنوز قابل پیکربندی نیست. هر دو در نقشهٔ راه بالادستی دنبال میشوند.
نکات و بهترین روشها
- برای فرمهای ساده از DSL علامتگذاری استفاده کنید؛ وقتی به کنترل برنامهنویسیشده بر روی جایگذاری عناصر نیاز دارید، به درخت
TemplateConfigاولویت-کد سوئیچ کنید. FormValidationLogic.Exceptionتخلفات چندانتخابی را بلافاصله نمایش میدهد بهجای اینکه بهصورت ساکت آنها را نادیده بگیرد، برای پرسشهایی که چندانتخاب غیرفعال است.- به جای حلقهزنی
Recognize()، هنگام پردازش یک دسته اسکن،RecognizeFolder()را ترجیح دهید. - به جای اسکن مجدد، وقتی فقط نیاز به امتحان کردن آستانه تشخیص متفاوت دارید،
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 | نتایج شناسایی را صادر میکند |