1. Produtos
  2.   Aspose.OMR
  3.   Aspose.OMR FOSS for Python

Aspose.OMR FOSS para Python

Projete folhas de respostas OMR e reconheça bolhas marcadas a partir de imagens digitalizadas em Python — gratuito, de código aberto e licenciado sob MIT.

Biblioteca Python de Código Aberto para Reconhecimento Óptico de Marcas

Aspose.OMR FOSS for Python é uma biblioteca gratuita e de código aberto para projetar formulários OMR (reconhecimento ótico de marcação) — folhas de respostas de múltipla escolha, formulários de caixas de seleção e pesquisas — e reconhecer as marcas que um respondente preenche a partir de uma imagem escaneada ou fotografada. Ela tem como alvo desenvolvedores que automatizam a correção de exames, a tabulação de pesquisas ou a coleta de dados baseada em formulários em puro Python, construída sobre nada mais exótico que numpy, opencv-python e Pillow. Um único OmrEngine cobre todo o fluxo de trabalho — Generate() converte um modelo, construído primeiro em código a partir de uma árvore TemplateConfig de elementos como ChoiceBoxConfig, CheckBoxConfig, GridConfig e AnswerSheetConfig, ou escrito em uma DSL de marcação de texto compacta, em uma imagem de página mais um descritor .omr; GetTemplateProcessor() carrega esse descritor novamente para reconhecer novas digitalizações com Recognize() ou RecognizeFolder(), retornando resultados exportáveis para CSV, JSON, ou XML. A biblioteca tem licença MIT e é instalada com um único comando pip (veja abaixo); é um lançamento inicial (v0.1.0, Status de Desenvolvimento: Alpha) que cobre as camadas de fundação, geração e reconhecimento da superfície completa do Aspose.OMR — a renderização nesta versão é apenas LTR/ocidental, com sistemas de escrita RTL e tratamento completo de overflow rastreados no roadmap upstream, mas ainda não implementados. Para a família de produtos empresariais, veja Aspose.OMR — Enterprise Product Family.

Projetar e Gerar Formulários OMR

  • Modelos code-first: TemplateConfig, PageConfig, e configs de elemento (ChoiceBoxConfig, CheckBoxConfig, GridConfig, CompositeGridConfig, AnswerSheetConfig) descrevem cada campo na página.
  • Markup DSL: um formato de texto compacto (?choicebox=... / &choicebox) cria as mesmas estruturas sem a necessidade de construir objetos manualmente.
  • Enums de sistema de escrita: Arabic, Hebrew, Persian, Urdu, Bengali e Western estão presentes para fidelidade API com a superfície Aspose.OMR; o renderizador desta versão é apenas LTR/Western — a renderização RTL ainda não foi implementada.
  • Enums de overflow: LongWordHandling e as subclasses de OverflowAction (Clip, NoClip, Wrap) são analisadas e validadas corretamente, mas o renderizador desta versão ainda não as respeita — o comportamento real de overflow ainda não é configurável.
  • Grupos de caixa de seleção e escolha: CheckBoxConfig e ChoiceBoxConfig suportam seleção múltipla; FormValidationLogic, definido uma vez por TemplateProcessor, pode gerar erro se uma pergunta com Multiselect desativado receber mais de uma marca.

Onde Aspose.OMR FOSS pode ser usado

  • Exames e questionários: gerar folhas de respostas de múltipla escolha e reconhecer bolhas preenchidas para correção automatizada.
  • Pesquisas e formulários: criar matrizes numeradas de folhas de resposta com AnswerSheetConfig para coleta de respostas em larga escala.
  • Grades de entrada de dados: GridConfig e CompositeGridConfig capturam entradas numéricas ou de símbolos personalizados como um valor mesclado.
  • Saída imprimível: Save() grava uma página PNG pronta para impressão ao lado do descritor .omr usado para reconhecimento posterior.
  • Pipelines em lote: RecognizeFolder() processa uma pasta inteira de digitalizações em uma única chamada.

Reconhecer Marcas e Exportar Resultados

  • Mecanismo sem estado: OmrEngine.Generate() produz um GenerationResult (imagem da página + modelo .omr JSON); GetTemplateProcessor() carrega esse modelo para reconhecer novas digitalizações.
  • Vários formatos de exportação: RecognitionResult exporta para CSV, JSON, ou XML, cada um com uma variante de stream correspondente.
  • Resultados em memória também: MemoryGenerationResult expõe as imagens geradas como streams em memória via GetImages()/GetOmr() — sem necessidade de I/O em disco.
  • Desinclinação e recalibração: o reconhecimento corrige a inclinação da digitalização a partir de marcas de referência nos cantos, e Recalculate() reaplica um limiar diferente sem re-digitalizar.
  • Imagens incorporadas: ImageCollection permite que a marcação referencie bytes de imagem em memória por nome, evitando idas ao sistema de arquivos.

Experiência do Desenvolvedor

Aspose.OMR FOSS for Python instala com um único comando pip (veja o exemplo de Quick Start abaixo). O API centra-se em três objetos — OmrEngine, uma árvore TemplateConfig (ou a DSL de marcação), e TemplateProcessor — que cobrem todo o fluxo gerar → escanear → reconhecer → exportar.

A biblioteca depende apenas de numpy, opencv-python e Pillow — sem binários nativos de OMR para compilar. Ela tem licença MIT, está hospedada no GitHub e atualmente está em um lançamento inicial v0.1.0 que cobre as camadas de fundação, geração e reconhecimento da superfície completa do Aspose.OMR.

Gerar um Formulário e Reconhecer Respostas Escaneadas

Crie (ou carregue) um modelo, salve a imagem da página gerada e o descritor .omr, então reconheça uma cópia digitalizada e exporte os resultados como 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()

Crie uma Pergunta de Múltipla Escolha a partir de Marcação

O DSL de marcação de texto constrói a mesma árvore de elementos que o API code-first. Aqui ?choicebox=... abre uma pergunta de caixa de escolha, a linha seguinte lista suas opções e &choicebox a fecha — Generate() devolve um descritor .Template JSON que você pode inspecionar diretamente.

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']

Perguntas Frequentes

Qual é o modelo de licenciamento para Aspose.OMR FOSS for Python?

É distribuído sob a Licença MIT — livre para usar, modificar e distribuir, inclusive em produtos comerciais, sujeito à inclusão do aviso de direitos autorais original.

Quais versões e dependências do Python são necessárias?

Python 3.10 ou posterior, com três dependências instaladas automaticamente pelo pip — numpy, opencv-python e Pillow. Nenhum hardware OMR nativo ou serviços externos são necessários.

Posso exportar o modelo gerado como PDF?

Não nesta versão. GenerationResult.SaveAsPdf() e MemoryGenerationResult.GetPDF() ambos levantam NotImplementedError. Use a saída PNG de Save() ou GetImages() em vez disso.

Para quais formatos posso exportar os resultados de reconhecimento?

RecognitionResult exporta para CSV, JSON ou XML via GetCsv(), GetJson() e GetXml(), cada um com uma variante de fluxo em memória correspondente.

Ele suporta idiomas diferentes do inglês?

Ainda não para renderização. A camada de modelo define os sistemas de escrita Árabe, Hebraico, Persa, Urdu e Bengali para fidelidade com a superfície Aspose.OMR, mas o motor de renderização desta versão é apenas LTR/Western – a renderização RTL e a tipografia de dígitos nativos estão na roadmap upstream, ainda não implementadas.

A validação de respostas de seleção múltipla é suportada?

Sim, para perguntas configuradas com Multiselect desativado. Passe FormValidationLogic.Exception para GetTemplateProcessor() para gerar uma exceção quando tal pergunta receber mais de uma marca; o padrão, Ignore, aceita silenciosamente. GlobalPageSettings.Multiselect tem como padrão habilitado.

  

Recursos de Suporte e Aprendizado

 Português