numpy, opencv-python, dan Pillow. Sebuah OmrEngine tunggal mencakup seluruh alur kerja — Generate() mengubah templat, yang dibangun secara kode-pertama dari pohon TemplateConfig berisi elemen seperti ChoiceBoxConfig, CheckBoxConfig, GridConfig, dan AnswerSheetConfig, atau ditulis dalam DSL markup teks yang kompak, menjadi gambar halaman ditambah deskriptor .omr; GetTemplateProcessor() memuat deskriptor tersebut kembali untuk mengenali pemindaian baru dengan Recognize() atau RecognizeFolder(), mengembalikan hasil yang dapat diekspor ke CSV, JSON, atau XML. Perpustakaan ini berlisensi MIT dan dipasang dengan satu perintah pip (lihat di bawah); ini merupakan rilis awal (v0.1.0, Development Status: Alpha) yang mencakup lapisan fondasi, generasi, dan pengenalan dari seluruh permukaan Aspose.OMR — rendering pada rilis ini hanya LTR/Barat, dengan sistem penulisan RTL dan penanganan overflow penuh yang tercatat dalam roadmap hulu tetapi belum diimplementasikan. Untuk keluarga produk enterprise, lihat Aspose.OMR — Enterprise Product Family.TemplateConfig, PageConfig, dan konfigurasi elemen (ChoiceBoxConfig, CheckBoxConfig, GridConfig, CompositeGridConfig, AnswerSheetConfig) menjelaskan setiap bidang pada halaman.?choicebox=... / &choicebox) membangun struktur yang sama tanpa harus membuat objek secara manual.Arabic, Hebrew, Persian, Urdu, Bengali, dan Western tersedia untuk API fidelity dengan permukaan Aspose.OMR; renderer rilis ini hanya LTR/Western — rendering RTL belum diimplementasikan.LongWordHandling dan subclass OverflowAction (Clip, NoClip, Wrap) melakukan parsing dan validasi dengan benar, namun renderer rilis ini belum menghormati mereka — perilaku overflow aktual belum dapat dikonfigurasi.CheckBoxConfig dan ChoiceBoxConfig mendukung multi-select; FormValidationLogic, yang diatur sekali per TemplateProcessor, dapat memunculkan error jika pertanyaan dengan Multiselect dinonaktifkan menerima lebih dari satu tanda.AnswerSheetConfig untuk pengumpulan respons skala besar.GridConfig dan CompositeGridConfig menangkap entri numerik atau simbol khusus sebagai satu nilai yang digabung.Save() menulis halaman PNG siap cetak bersamaan dengan deskriptor .omr yang digunakan untuk pengenalan selanjutnya.RecognizeFolder() memproses seluruh folder pemindaian dalam satu panggilan.OmrEngine.Generate() menghasilkan GenerationResult (gambar halaman + template .omr JSON); GetTemplateProcessor() memuat template tersebut untuk mengenali pemindaian baru.RecognitionResult mengekspor ke CSV, JSON, atau XML, masing-masing dengan varian aliran yang cocok.MemoryGenerationResult mengekspos gambar yang dihasilkan sebagai aliran dalam memori melalui GetImages()/GetOmr() — tidak memerlukan I/O disk.Recalculate() menerapkan ambang batas yang berbeda tanpa pemindaian ulang.ImageCollection memungkinkan markup merujuk byte gambar dalam memori dengan nama, menghindari perjalanan bolak-balik sistem file.Aspose.OMR FOSS for Python diinstal dengan satu perintah pip (lihat contoh Quick Start di bawah). API berfokus pada tiga objek — OmrEngine, pohon TemplateConfig (atau DSL markup), dan TemplateProcessor — yang mencakup seluruh alur kerja menghasilkan → memindai → mengenali → mengekspor.
Pustaka ini hanya bergantung pada numpy, opencv-python, dan Pillow — tidak ada biner OMR native yang harus dikompilasi. Ini berlisensi MIT, dihosting di GitHub, dan saat ini berada pada rilis awal v0.1.0 yang mencakup lapisan fondasi, generasi, dan pengenalan dari seluruh permukaan Aspose.OMR.
Bangun (atau muat) sebuah template, simpan gambar halaman yang dihasilkan dan deskriptor .omr, lalu kenali salinan yang dipindai dan ekspor hasilnya sebagai 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()
DSL penanda teks membangun pohon elemen yang sama seperti API berbasis kode. Di sini ?choicebox=... membuka pertanyaan kotak pilihan, baris berikutnya mencantumkan opsinya, dan &choicebox menutupnya — Generate() mengembalikan deskriptor .Template JSON yang dapat Anda inspeksi secara langsung.
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']
Ini didistribusikan di bawah Lisensi MIT — gratis untuk digunakan, dimodifikasi, dan didistribusikan, termasuk dalam produk komersial, dengan syarat menyertakan pemberitahuan hak cipta asli.
Python 3.10 atau yang lebih baru, dengan tiga dependensi yang diinstal secara otomatis oleh pip — numpy, opencv-python, dan Pillow. Tidak diperlukan perangkat keras OMR native atau layanan eksternal.
Tidak ada dalam rilis ini. GenerationResult.SaveAsPdf() dan MemoryGenerationResult.GetPDF() keduanya menghasilkan NotImplementedError. Gunakan output PNG dari Save() atau GetImages() sebagai gantinya.
RecognitionResult mengekspor ke CSV, JSON, atau XML melalui GetCsv(), GetJson(), dan GetXml(), masing-masing dengan varian aliran memori yang cocok.
Belum untuk rendering. Lapisan templat mendefinisikan sistem penulisan Arab, Ibrani, Persia, Urdu, dan Bengali untuk kesetiaan dengan permukaan Aspose.OMR, tetapi mesin render rilis ini hanya LTR/Western saja – rendering RTL dan penataan digit asli berada di peta jalan hulu, belum diimplementasikan.
Ya, untuk pertanyaan yang dikonfigurasi dengan Multiselect dinonaktifkan. Berikan FormValidationLogic.Exception ke GetTemplateProcessor() untuk memicu ketika pertanyaan semacam itu menerima lebih dari satu tanda; defaultnya, Ignore, menerima secara diam-diam. GlobalPageSettings.Multiselect secara default diatur ke enabled.