O Núcleo API
O Core API
omr.api é a pequena superfície com a qual a maior parte do código interage: OmrEngine, TemplateProcessor, ImageCollection e o enum FormValidationLogic.
OmrEngine
OmrEngine é uma fábrica sem estado. Generate(source, settings) aceita uma fonte markup-DSL ou uma árvore TemplateConfig e retorna um GenerationResult. GetTemplateProcessor(templateSource, validationLogic) carrega um caminho de arquivo .omr previamente salvo e retorna um TemplateProcessor vinculado; uma fonte de stream, em vez disso, recebe um argumento de codificação de texto antes da lógica de validação.
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
Controla o comportamento do mecanismo quando uma regra de validação de modelo — como uma restrição de seleção múltipla — é violada durante o reconhecimento: Ignore (padrão) aceita a violação silenciosamente, Exception gera erro, e undefined é o valor zero do enum. A verificação se aplica apenas a perguntas cujo Multiselect está desativado; GlobalPageSettings.Multiselect tem o padrão ativado.
TemplateProcessor
Recognize(source, recognitionThreshold) reconhece uma imagem digitalizada. RecognizeFolder(folderPath, recognitionThreshold) reconhece todas as imagens em uma pasta em uma única chamada. Recalculate(result, recognitionThreshold) reavalia um resultado já reconhecido com um limiar diferente, sem reler a imagem original.
ImageCollection
Um mapa somente de acréscimo, sensível a maiúsculas e minúsculas, de um nome para bytes de imagem bruta. Add(name, image) registra uma imagem, Contains(name) verifica se um nome já está registrado, Count informa quantos estão registrados e as_dict() devolve o mapa subjacente. A marcação pode referenciar uma imagem registrada pelo nome (?image=<name>) em vez de um caminho de sistema de arquivos.
from omr.api import ImageCollection
images = ImageCollection()
with open("logo.png", "rb") as f:
images.Add("logo.png", f.read())Dicas e Melhores Práticas
- Passe
FormValidationLogic.Exceptiondurante o desenvolvimento para expor violações de seleção múltipla imediatamente em vez de ignorá-las silenciosamente (só é disparado para perguntas comMultiselectdesativado). Recalculate()é mais barato que reescanear — use-o quando apenas o limiar de reconhecimento precisar ser alterado.- Os nomes
ImageCollectionsão sensíveis a maiúsculas e minúsculas; registrar o mesmo nome duas vezes gera um erro em vez de sobrescrever silenciosamente. Generate()relata a maioria das falhas através deGenerationResult.ErrorCode/ErrorMessageem vez de gerar exceção — verifiqueErrorCodeantes de confiar em um resultado gerado.
Problemas Comuns
| Problema | Causa | Correção |
|---|---|---|
| Registrar uma imagem duas vezes gera | ImageCollection.Add não permite nomes duplicados | Verifique Contains(name) primeiro, ou use um nome exclusivo para cada imagem |
| Uma resposta de múltipla seleção não permitida é aceita silenciosamente | O padrão FormValidationLogic.Ignore não gera | Passe FormValidationLogic.Exception para GetTemplateProcessor() e assegure que o Multiselect da pergunta esteja desativado |
FAQ
É OmrEngine seguro reutilizar em vários modelos?
Sim — é sem estado; cada chamada Generate()/GetTemplateProcessor() é independente.
Como reconhecer uma pasta inteira de digitalizações de uma só vez?
Chame TemplateProcessor.RecognizeFolder(folderPath, recognitionThreshold) em vez de percorrer Recognize() manualmente.
Resumo API Reference
| Classe/Método | Descrição |
|---|---|
OmrEngine.Generate | Renderiza um template em uma imagem de página + descritor .omr |
OmrEngine.GetTemplateProcessor | Carrega um descritor .omr para reconhecimento |
TemplateProcessor.Recognize / RecognizeFolder / Recalculate | Pontos de entrada de reconhecimento |
ImageCollection.Add / Contains / as_dict | Registro de imagens em memória para marcação |
FormValidationLogic | Enum de comportamento de violação de validação |