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

Aspose.OMR FOSS dla Python

Projektuj arkusze odpowiedzi OMR i rozpoznawaj zaznaczone bąbelki na zeskanowanych obrazach w Python — darmowy, otwarto-źródłowy i na licencji MIT.

Biblioteka Open-Source Python do rozpoznawania znaków optycznych

Aspose.OMR FOSS for Python jest darmową, otwarto-źródłową biblioteką do projektowania formularzy OMR (optical mark recognition) — arkuszy odpowiedzi wielokrotnego wyboru, formularzy z polami wyboru i ankiet — oraz rozpoznawania znaków wprowadzonych przez respondenta z zeskanowanego lub sfotografowanego obrazu. Skierowana jest do programistów automatyzujących ocenianie egzaminów, zestawianie wyników ankiet lub zbieranie danych z formularzy w czystym Python, opartych jedynie na tak nieekscentrycznych bibliotekach jak numpy, opencv-python i Pillow. Jednolity OmrEngine obejmuje cały przepływ pracy — Generate() zamienia szablon, zbudowany najpierw w kodzie z drzewa TemplateConfig elementów takich jak ChoiceBoxConfig, CheckBoxConfig, GridConfig i AnswerSheetConfig, lub zapisany w zwartej DSL tekstowo-znacznikowej, w obraz strony oraz deskryptor .omr; GetTemplateProcessor() wczytuje ten deskryptor ponownie, aby rozpoznawać nowe skany przy użyciu Recognize() lub RecognizeFolder(), zwracając wyniki eksportowalne do CSV, JSON lub XML. Biblioteka jest licencjonowana na licencji MIT i instalowana jednym poleceniem pip (zobacz poniżej); jest wczesną wersją (v0.1.0, Development Status: Alpha) obejmującą warstwy podstawowe, generacji i rozpoznawania pełnej powierzchni Aspose.OMR — renderowanie w tej wersji obsługuje wyłącznie LTR/Western, a systemy pisma RTL oraz pełna obsługa przepełnień są uwzględnione w planie rozwoju, ale jeszcze nie zostały zaimplementowane. W przypadku rodziny produktów enterprise zobacz Aspose.OMR — Enterprise Product Family.

Projektowanie i generowanie formularzy OMR

  • Szablony code-first: TemplateConfig, PageConfig i konfiguracje elementów (ChoiceBoxConfig, CheckBoxConfig, GridConfig, CompositeGridConfig, AnswerSheetConfig) opisują każde pole na stronie.
  • Markup DSL: zwarty format tekstowy (?choicebox=... / &choicebox) tworzy te same struktury bez ręcznego konstruowania obiektów.
  • Wyliczenia systemu pisma: Arabic, Hebrew, Persian, Urdu, Bengali i Western są dostępne dla API wierności z powierzchnią Aspose.OMR; renderer tej wersji obsługuje tylko LTR/Western — renderowanie RTL nie zostało jeszcze zaimplementowane.
  • Wyliczenia przepełnienia: LongWordHandling oraz podklasy OverflowAction (Clip, NoClip, Wrap) są poprawnie parsowane i walidowane, ale renderer tej wersji nie honoruje ich jeszcze — rzeczywiste zachowanie przy przepełnieniu nie jest jeszcze konfigurowalne.
  • Grupy pól wyboru i wyboru: CheckBoxConfig i ChoiceBoxConfig obsługują wielokrotny wybór; FormValidationLogic, ustawiany raz na TemplateProcessor, może zgłosić błąd, jeśli pytanie z wyłączonym Multiselect otrzyma więcej niż jedną zaznaczoną odpowiedź.

Gdzie Aspose.OMR FOSS można używać

  • Egzaminy i quizy: generuj arkusze odpowiedzi wielokrotnego wyboru i rozpoznawaj wypełnione bąbelki w celu automatycznej oceny.
  • Ankiety i formularze: twórz numerowane macierze arkuszy odpowiedzi z AnswerSheetConfig do zbierania odpowiedzi na dużą skalę.
  • Siatki wprowadzania danych: GridConfig i CompositeGridConfig przechwytują numeryczne lub niestandardowe symbole jako jedną połączoną wartość.
  • Wyjście do druku: Save() zapisuje gotową do druku stronę PNG obok deskryptora .omr używanego później do rozpoznawania.
  • Potoki wsadowe: RecognizeFolder() przetwarza cały folder skanów w jednym wywołaniu.

Rozpoznaj znaki i wyeksportuj wyniki

  • Stateless engine: OmrEngine.Generate() tworzy GenerationResult (obraz strony + szablon .omr JSON); GetTemplateProcessor() ładuje ten szablon, aby rozpoznawać nowe skany.
  • Multiple export formats: RecognitionResult eksportuje do CSV, JSON lub XML, każdy z odpowiednim wariantem strumienia.
  • In-memory results too: MemoryGenerationResult udostępnia wygenerowane obrazy jako strumienie w pamięci poprzez GetImages()/GetOmr() — nie wymaga operacji we/wy na dysku.
  • De-skew and recalibration: rozpoznawanie koryguje pochylenie skanu na podstawie znaków odniesienia w rogach, a Recalculate() ponownie stosuje inny próg bez ponownego skanowania.
  • Embedded images: ImageCollection umożliwia odwoływanie się w znacznikach do bajtów obrazów w pamięci po nazwie, unikając dodatkowych operacji na systemie plików.

Doświadczenie dewelopera

Aspose.OMR FOSS for Python instalowany jest jednym poleceniem pip (zobacz przykład Quick Start poniżej). API koncentruje się na trzech obiektach — OmrEngine, drzewie TemplateConfig (lub DSL markup), oraz TemplateProcessor — które obejmują cały przepływ pracy generuj → skanuj → rozpoznawaj → eksportuj.

Biblioteka zależy tylko od numpy, opencv-python i Pillow — nie wymaga natywnych binarek OMR do kompilacji. Jest licencjonowana na licencji MIT, hostowana na GitHubie i obecnie w wczesnym wydaniu v0.1.0, obejmującym warstwy podstawy, generacji i rozpoznawania pełnej powierzchni Aspose.OMR.

Wygeneruj formularz i rozpoznaj zeskanowane odpowiedzi

Zbuduj (lub wczytaj) szablon, zapisz wygenerowany obraz strony i opisnik .omr, a następnie rozpoznaj zeskanowaną kopię i wyeksportuj wyniki jako 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()

Utwórz pytanie wielokrotnego wyboru z Markup

DSL oznaczania tekstu buduje to samo drzewo elementów co kod-pierwszy API. Tutaj ?choicebox=... otwiera pytanie typu choice-box, następna linia wymienia jego opcje, a &choicebox zamyka je — Generate() zwraca opis .Template JSON, który można bezpośrednio przejrzeć.

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

Najczęściej Zadawane Pytania

Jaki jest model licencjonowania dla Aspose.OMR FOSS for Python?

Jest rozpowszechniany na licencji MIT — wolny do użycia, modyfikacji i dystrybucji, w tym w produktach komercyjnych, pod warunkiem dołączenia oryginalnego oświadczenia o prawach autorskich.

Jakie wersje Python i zależności są wymagane?

Python 3.10 lub nowszy, z trzema zależnościami instalowanymi automatycznie przez pip — numpy, opencv-python i Pillow. Nie wymaga natywnego sprzętu OMR ani zewnętrznych usług.

Czy mogę wyeksportować wygenerowany szablon jako PDF?

Nie w tej wersji. GenerationResult.SaveAsPdf() i MemoryGenerationResult.GetPDF() obie zgłaszają NotImplementedError. Użyj wyjścia PNG z Save() lub GetImages() zamiast tego.

Do jakich formatów mogę eksportować wyniki rozpoznawania?

RecognitionResult eksportuje do CSV, JSON lub XML za pomocą GetCsv(), GetJson() i GetXml(), każdy z nich ma odpowiadający wariant strumienia w pamięci.

Czy obsługuje języki inne niż angielski?

Jeszcze nie gotowe do renderowania. Warstwa szablonu definiuje arabskie, hebrajskie, perskie, urdu i bengalskie systemy pisma w celu zachowania wierności powierzchni Aspose.OMR, ale silnik renderujący w tej wersji obsługuje wyłącznie LTR/Western – renderowanie RTL i typografia cyfr natywnych znajdują się w planie rozwoju upstream, nie zostały jeszcze zaimplementowane.

Czy obsługiwana jest walidacja odpowiedzi wielokrotnego wyboru?

Tak, dla pytań skonfigurowanych z wyłączonym Multiselect. Przekaż FormValidationLogic.Exception do GetTemplateProcessor(), aby zgłosić wyjątek, gdy takie pytanie otrzyma więcej niż jedno zaznaczenie; domyślnie, Ignore, akceptuje to cicho. GlobalPageSettings.Multiselect domyślnie jest włączony.

  

Zasoby Wsparcia i Nauki

 Polski