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/西文,RTL 书写系统和完整的溢出处理已在上游路线图中跟踪,但尚未实现。企业产品系列请参见 Aspose.OMR — Enterprise Product Family。TemplateConfig、PageConfig以及元素配置 (ChoiceBoxConfig、CheckBoxConfig、GridConfig、CompositeGridConfig、AnswerSheetConfig) 描述页面上的每个字段。?choicebox=... / &choicebox) 在不手动构建对象的情况下构建相同的结构。Arabic、Hebrew、Persian、Urdu、Bengali 和 Western 用于在 API 与 Aspose.OMR 表面之间保持忠实;此版本的渲染器仅支持 LTR/Western — RTL 渲染尚未实现。LongWordHandling 和 OverflowAction 子类 (Clip、NoClip、Wrap) 能够正确解析和验证,但此版本的渲染器尚未遵循它们 — 实际的溢出行为尚不可配置。CheckBoxConfig 与 ChoiceBoxConfig 支持多选;FormValidationLogic 在每个 TemplateProcessor 中设置一次,如果一个 Multiselect 已禁用的问题收到多个标记,则可以触发异常。AnswerSheetConfig 构建编号的答题卡矩阵,以进行大规模的响应收集。GridConfig 和 CompositeGridConfig 捕获数值或自定义符号输入,合并为一个值。Save() 将准备好的可打印 PNG 页面连同用于后续识别的 .omr 描述符一起写入。RecognizeFolder() 在一次调用中处理整个扫描文件夹。OmrEngine.Generate() 生成一个 GenerationResult(页面图像 + .omr 模板 JSON);GetTemplateProcessor() 加载该模板以识别新的扫描。RecognitionResult 可导出为 CSV、JSON 或 XML,每种格式都有相应的流变体。MemoryGenerationResult 通过 GetImages()/GetOmr() 将生成的图像以内存流的形式公开 —— 无需磁盘 I/O。Recalculate() 可在不重新扫描的情况下重新应用不同的阈值。ImageCollection 允许标记通过名称引用内存中的图像字节,避免文件系统往返。Aspose.OMR FOSS for Python 只需一个 pip 命令即可安装(请参见下面的快速入门示例)。The 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']
它在 MIT 许可证下分发 — 免费使用、修改和分发,包括在商业产品中,前提是包含原始版权声明。
Python 3.10 或更高版本,pip 会自动安装三个依赖 — numpy、opencv-python 和 Pillow。无需原生 OMR 硬件或外部服务。
此版本中没有。GenerationResult.SaveAsPdf() 和 MemoryGenerationResult.GetPDF() 都会抛出 NotImplementedError。请改用 Save() 或 GetImages() 的 PNG 输出。
RecognitionResult 可通过 GetCsv()、GetJson() 和 GetXml() 导出为 CSV、JSON 或 XML,每种方式都有相应的内存流变体。
尚未支持渲染。模板层定义了阿拉伯语、希伯来语、波斯语、乌尔都语和孟加拉语书写系统,以与 Aspose.OMR 表面保持一致,但此版本的渲染引擎仅支持 LTR/Western —— RTL 渲染和本地数字排版仍在上游路线图上,尚未实现。
是的,对于已禁用 Multiselect 的问题。将 FormValidationLogic.Exception 传递给 GetTemplateProcessor(),在此类问题收到多个标记时抛出;默认的 Ignore 会静默接受。GlobalPageSettings.Multiselect 默认启用。