numpy, opencv-python, and Pillow.OmrEngine tüm iş akışını kapsar — Generate() bir şablonu, ChoiceBoxConfig, CheckBoxConfig, GridConfig ve AnswerSheetConfig gibi öğelerden oluşan bir TemplateConfig ağacından kod-ilk yaklaşımla ya da kompakt bir metin-işaretleme DSL’sinde yazarak, bir sayfa görüntüsü ve bir .omr tanımlayıcısına dönüştürür; GetTemplateProcessor() bu tanımlayıcıyı geri yükleyerek yeni taramaları Recognize() veya RecognizeFolder() ile tanır ve sonuçları CSV, JSON veya XML formatlarında dışa aktarılabilir olarak döndürür.TemplateConfig, PageConfig ve öğe yapılandırmaları (ChoiceBoxConfig, CheckBoxConfig, GridConfig, CompositeGridConfig, AnswerSheetConfig) sayfadaki her alanı tanımlar.?choicebox=... / &choicebox) nesneleri elle oluşturmak zorunda kalmadan aynı yapıları oluşturur.Arabic, Hebrew, Persian, Urdu, Bengali ve Western, API doğruluğu ve Aspose.OMR yüzeyi için mevcuttur; bu sürümün render’ı yalnızca LTR/Western’dir — RTL render’ı henüz uygulanmadı.LongWordHandling ve OverflowAction alt sınıfları (Clip, NoClip, Wrap) doğru şekilde ayrıştırılır ve doğrulanır, ancak bu sürümün render’ı henüz bunları dikkate almaz — gerçek taşma davranışı henüz yapılandırılabilir değildir.CheckBoxConfig ve ChoiceBoxConfig çoklu seçim destekler; TemplateProcessor başına bir kez ayarlanan FormValidationLogic, Multiselect devre dışı bırakılmış bir soruya birden fazla işaret gelirse hata yükseltebilir.AnswerSheetConfig ile numaralı cevap-kağıdı matrisleri oluşturun.GridConfig ve CompositeGridConfig, sayısal veya özel simge girişlerini tek bir birleştirilmiş değer olarak yakalar.Save() , daha sonra tanıma için kullanılan .omr tanımlayıcısının yanında hazır yazdırılabilir bir PNG sayfası yazar.RecognizeFolder() , taramaların tüm klasörünü tek bir çağrıda işler.OmrEngine.Generate() bir GenerationResult üretir (sayfa görüntüsü + .omr şablonu JSON); GetTemplateProcessor() o şablonu yükleyerek yeni taramaları tanır.RecognitionResult CSV, JSON veya XML formatına dışa aktarır, her biri uygun bir akış varyantıyla.MemoryGenerationResult oluşturulan görüntüleri GetImages()/GetOmr() aracılığıyla bellek içi akışlar olarak sunar — disk I/O gerekmez.Recalculate() yeniden tarama yapmadan farklı bir eşik uygular.ImageCollection işaretlemenin, adla bellek içi görüntü baytlarını referans almasını sağlar, dosya sistemi dönüşlerini önler.Aspose.OMR FOSS for Python tek bir pip komutuyla kurulur (aşağıdaki Hızlı Başlangıç örneğine bakınız). API üç nesne etrafında döner — OmrEngine, bir TemplateConfig ağacı (veya işaretleme DSL’si) ve TemplateProcessor — bu nesneler tüm oluştur → tarama → tanıma → dışa aktarma iş akışını kapsar.
Kütüphane yalnızca numpy, opencv-python ve Pillow‘a bağımlıdır — derlemek için yerel OMR ikili dosyaları yoktur. MIT lisanslıdır, GitHub’da barındırılır ve şu anda tam Aspose.OMR yüzeyinin temel, oluşturma ve tanıma katmanlarını kapsayan erken bir v0.1.0 sürümündedir.
Bir şablon oluşturun (veya yükleyin), oluşturulan sayfa görüntüsünü ve .omr tanımlayıcısını kaydedin, ardından taranmış bir kopyayı tanıyın ve sonuçları CSV olarak dışa aktarın.
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()
text-markup DSL, kod-öncelikli API ile aynı öğe ağacını oluşturur. Burada ?choicebox=... bir choice-box sorusu açar, bir sonraki satır seçeneklerini listeler ve &choicebox onu kapatır — Generate() bir .Template JSON tanımlayıcısını döndürür ve doğrudan inceleyebilirsiniz.
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']
MIT Lisansı altında dağıtılmaktadır — kullanmak, değiştirmek ve dağıtmak ücretsizdir, ticari ürünler dahil olmak üzere, ancak orijinal telif hakkı bildirimini eklemek şartıyla.
Python 3.10 veya daha yeni bir sürüm, pip tarafından otomatik olarak kurulan üç bağımlılıkla — numpy, opencv-python ve Pillow. Yerel OMR donanımı veya harici hizmetler gerekmez.
Bu sürümde yok. GenerationResult.SaveAsPdf() ve MemoryGenerationResult.GetPDF() her ikisi de NotImplementedError hatası verir. Bunun yerine Save() veya GetImages()‘den PNG çıktısını kullanın.
RecognitionResult CSV, JSON veya XML biçimlerine GetCsv(), GetJson() ve GetXml() aracılığıyla dışa aktarır; her biri eşleşen bir bellek içi akış varyantına sahiptir.
Henüz render için değil. Şablon katmanı, Aspose.OMR yüzeyiyle uyum sağlamak amacıyla Arapça, İbranice, Farsça, Urduca ve Bengalce yazı sistemlerini tanımlar, ancak bu sürümün render motoru sadece LTR/Western’dır — RTL render ve yerel rakam tipografisi üst akış yol haritasında, henüz uygulanmadı.
Evet, Multiselect devre dışı bırakılmış sorular için. FormValidationLogic.Exception’ı GetTemplateProcessor()’a geçirin; böyle bir soru birden fazla işaret aldığında yükseltir; varsayılan, Ignore, sessizce kabul eder. GlobalPageSettings.Multiselect varsayılan olarak etkindir.