功能概述
功能概述
Aspose.OMR FOSS for 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() 在不重新读取源图像的情况下,以不同阈值重新评分已识别的结果。去倾斜校正使用角落参考标记(ReferencePointsSettings)。
结果导出
RecognitionResult 导出为 CSV、JSON 或 XML,每种格式都有对应的内存流变体(GetCsvAsStream、GetJsonAsStream、GetXmlAsStream)。
书写系统和溢出枚举
Arabic、Hebrew、Persian、Urdu 和 Bengali 书写系统(以及 Western),以及 LongWordHandling/OverflowAction 枚举,均已存在并能够针对 API 可靠性以及 Aspose.OMR 表面正确解析。当前此发布的渲染引擎尚未支持它们——渲染仅限左到右/西方语言,且溢出行为尚不可配置。这两项均已列入上游路线图。
技巧与最佳实践
- 对简单表单使用标记 DSL;当需要以编程方式控制元素位置时,切换到代码优先的
TemplateConfig树。 FormValidationLogic.Exception会立即显示多选违规,而不是对已禁用多选的问题悄悄忽略它们。- 在处理一批扫描时,优先使用
RecognizeFolder()而不是自行循环调用Recognize()。 - 当只需尝试不同的识别阈值时,请调用
Recalculate()而不是重新扫描。
常见问题
| 问题 | 原因 | 修复 |
|---|---|---|
SaveAsPdf() 抛出 NotImplementedError | 此版本未实现 PDF 导出 | 使用 Save() 进行 PNG 输出,或将识别结果导出为 CSV/JSON/XML |
| 不允许的多选答案被静默接受 | 默认 FormValidationLogic.Ignore 在违规时不抛出 | 将 FormValidationLogic.Exception 传递给 GetTemplateProcessor(),并确保问题的 Multiselect 已禁用 |
FAQ
该库是否需要任何 GUI 或外部 OMR 硬件?
不。它完全通过图像文件(扫描件或照片)使用 numpy、opencv-python 和 Pillow 工作。
我可以生成模板的 PDF 吗?
此版本不支持 — GenerationResult.SaveAsPdf() 和 MemoryGenerationResult.GetPDF() 都会触发 NotImplementedError。请改用 Save()/GetImages() 的 PNG 输出。
我该如何一次性处理大量扫描表单?
使用 TemplateProcessor.RecognizeFolder(folderPath, recognitionThreshold) 在一次调用中识别文件夹中的每张图像。
API Reference 摘要
| 类/方法 | 描述 |
|---|---|
OmrEngine.Generate | 将模板渲染为页面图像 + .omr 描述符 |
OmrEngine.GetTemplateProcessor | 加载用于识别的 .omr 描述符 |
TemplateProcessor.Recognize | 识别单个扫描图像 |
TemplateProcessor.RecognizeFolder | 识别文件夹中的每张图片 |
TemplateProcessor.Recalculate | 使用新阈值重新评分结果 |
RecognitionResult.GetCsv / GetJson / GetXml | 导出识别结果 |