识别模型

识别模型

omr.model 定义了识别结果的结构:RecognitionResult 和 IOmrElement 接口。


RecognitionResult

TemplateProcessor.Recognize() 返回一个 RecognitionResult。它公开 OmrElements(已识别元素的列表),以及 ImagePath、Images、PageName 和 TemplateName。在结果层面,GetCsv(encoding)、GetJson(encoding) 和 GetXml(encoding) 导出完整结果;每个都有对应的 ...AsStream 变体,返回一个 BytesIO。

from omr.api import OmrEngine, FormValidationLogic

engine = OmrEngine()
processor = engine.GetTemplateProcessor("out/final-exam.omr", FormValidationLogic.Ignore)
result = processor.Recognize("scan.png")
print(result.GetJson())

IOmrElement

每个 RecognitionResult.OmrElements 条目实现了 IOmrElement:QuestionName 和 SortWeight 用于标识元素,GetAnswer() / GetCsv() 用于读取其识别值。

for element in result.OmrElements:
    print(element.QuestionName, element.GetAnswer())

技巧与最佳实践

  • 读取 QuestionName 将已识别的元素匹配回其来源的问题,而不是依赖列表顺序。
  • 在将结果写入非文件系统目标时,使用 ...AsStream 的导出变体(GetCsvAsStream、GetJsonAsStream、GetXmlAsStream)。
  • TemplateProcessor.Recalculate() 会就地更新已有的 RecognitionResult ——随后重新读取 OmrElements,而不是保留重新计算前的引用。

常见问题

问题原因修复
元素的答案是空字符串识别阈值对该标记来说过于严格,或者 Recalculate() 被以一个不可能的严格值调用降低阈值,或将 -100 传递给 Recognize() 进行自动校准

FAQ

对于未标记的问题,GetAnswer() 返回什么?

空字符串——这与 Recalculate() 在更严格阈值拒绝所有标记时产生的表示相同。

我可以只导出部分元素而不是整个结果吗?

RecognitionResult的 GetCsv/GetJson/GetXml 导出完整结果;如果需要子集,请先自行过滤 OmrElements。


API Reference 摘要

类/方法描述
RecognitionResult.OmrElements已识别的 IOmrElement 条目列表
RecognitionResult.GetCsv / GetJson / GetXml导出完整结果
IOmrElement.GetAnswer / GetCsv每个元素的已识别值

另请参阅

 中文