Jak pracować z API w Python
Aspose.OMR FOSS dla publicznego API Python (omr.api) jest celowo mały: OmrEngine, TemplateProcessor, ImageCollection i FormValidationLogic. Ten przewodnik pokazuje, jak pasują razem w przepływie pracy generuj-i-rozpoznawaj.
Przewodnik krok po kroku
Krok 1: Zainstaluj pakiet
git clone https://github.com/aspose-omr-foss/Aspose.OMR-FOSS-for-Python.git
cd Aspose.OMR-FOSS-for-Python
pip install -e .python -c "import omr; print('Aspose.OMR FOSS for Python is ready.')"Krok 2: Zaimportuj wymagane klasy
from omr.api import OmrEngine, FormValidationLogicKrok 3: Wygeneruj i zapisz szablon
engine = OmrEngine()
gen = engine.Generate("final-exam.txt")
gen.Save("out", "final-exam")Krok 4: Załaduj szablon do rozpoznawania
Użyj FormValidationLogic.Exception zamiast domyślnego Ignore, jeśli chcesz, aby naruszenie było zgłaszane dla pytań, w których wyłączono wielokrotny wybór, zamiast być cicho akceptowane.
processor = engine.GetTemplateProcessor("out/final-exam.omr", FormValidationLogic.Exception)Krok 5: Rozpoznaj i wyeksportuj
result = processor.Recognize("scan.png")
print(result.GetCsv())Typowe problemy i rozwiązania
FormValidationLogic.Exception nigdy nie zgłasza, nawet przy pytaniu wielokrotnego zaznaczenia. Sprawdzenie uruchamia się tylko dla pytania z Multiselect disabled; GlobalPageSettings.Multiselect domyślnie jest włączone, więc upewnij się, że jest wyraźnie wyłączone dla pytania, które ma być jednokrotnego wyboru.
Potrzebuję rozpoznać wiele skanów jednocześnie. Użyj TemplateProcessor.RecognizeFolder(folderPath, recognitionThreshold) zamiast wywoływać Recognize() w pętli.
Zarejestrowałem obraz pod nazwą, która już była użyta. ImageCollection.Add nie nadpisuje — sprawdź Contains(name) najpierw, albo użyj unikalnej nazwy dla każdego obrazu.
Najczęściej zadawane pytania
Czy OmrEngine jest bezpieczne do ponownego użycia w wielu szablonach?
Tak — jest bezstanowy.
Jak ponownie ocenić wynik z innym progiem bez ponownego skanowania?
Wywołaj TemplateProcessor.Recalculate(result, recognitionThreshold).
Jak osadzić obraz w pamięci w znacznikach zamiast odczytywać go z dysku?
Zarejestruj go w ImageCollection.Add(name, image_bytes), a następnie odwołaj się do niego w znacznikach jako ?image=<name>.