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

Aspose.OMR FOSS untuk Python

Rancang OMR answer sheets dan kenali gelembung yang ditandai dari gambar yang dipindai di Python — gratis, sumber terbuka, dan berlisensi MIT.

Perpustakaan Python Open-Source untuk Optical Mark Recognition

Aspose.OMR FOSS for Python adalah perpustakaan gratis dan sumber terbuka untuk merancang formulir OMR (optical mark recognition) — lembar jawaban pilihan ganda, formulir kotak centang, dan survei — serta mengenali tanda yang diisi oleh responden dari gambar yang dipindai atau difoto. Ini ditujukan bagi pengembang yang mengotomatisasi penilaian ujian, penjumlahan survei, atau pengumpulan data berbasis formulir dengan Python murni, dibangun hanya dengan 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.

Desain dan Hasilkan Formulir OMR

  • Code-first templates: TemplateConfig, PageConfig, dan konfigurasi elemen (ChoiceBoxConfig, CheckBoxConfig, GridConfig, CompositeGridConfig, AnswerSheetConfig) menjelaskan setiap bidang pada halaman.
  • Markup DSL: format teks ringkas (?choicebox=... / &choicebox) membangun struktur yang sama tanpa harus membuat objek secara manual.
  • Writing-system enums: 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.
  • Overflow enums: 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.
  • Checkbox and choice groups: 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.

Di mana Aspose.OMR FOSS Dapat Digunakan

  • Ujian dan kuis: menghasilkan lembar jawaban pilihan ganda dan mengenali gelembung yang terisi untuk penilaian otomatis.
  • Survei dan formulir: membangun matriks lembar jawaban bernomor dengan AnswerSheetConfig untuk pengumpulan respons skala besar.
  • Kisi entri data: GridConfig dan CompositeGridConfig menangkap entri numerik atau simbol khusus sebagai satu nilai yang digabung.
  • Output cetak: Save() menulis halaman PNG siap cetak bersamaan dengan deskriptor .omr yang digunakan untuk pengenalan selanjutnya.
  • Pipa batch: RecognizeFolder() memproses seluruh folder pemindaian dalam satu panggilan.

Kenali Tanda dan Ekspor Hasil

  • Stateless engine: OmrEngine.Generate() menghasilkan GenerationResult (gambar halaman + template .omr JSON); GetTemplateProcessor() memuat template tersebut untuk mengenali pemindaian baru.
  • Multiple export formats: RecognitionResult mengekspor ke CSV, JSON, atau XML, masing-masing dengan varian aliran yang cocok.
  • In-memory results too: MemoryGenerationResult mengekspos gambar yang dihasilkan sebagai aliran dalam memori melalui GetImages()/GetOmr() — tidak memerlukan I/O disk.
  • De-skew and recalibration: pengenalan memperbaiki kemiringan pemindaian dari tanda referensi sudut, dan Recalculate() menerapkan ambang batas yang berbeda tanpa pemindaian ulang.
  • Embedded images: ImageCollection memungkinkan markup merujuk byte gambar dalam memori dengan nama, menghindari perjalanan bolak-balik sistem file.

Pengalaman Pengembang

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.

Buat Formulir dan Kenali Jawaban yang Dipindai

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()

Buat Pertanyaan Pilihan Ganda dari Markup

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

Pertanyaan yang Sering Diajukan

Apa model lisensi untuk Aspose.OMR FOSS for Python?

Ini didistribusikan di bawah Lisensi MIT — gratis untuk digunakan, dimodifikasi, dan didistribusikan, termasuk dalam produk komersial, dengan syarat menyertakan pemberitahuan hak cipta asli.

Versi Python apa dan dependensi apa yang dibutuhkan?

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.

Bisakah saya mengekspor templat yang dihasilkan sebagai PDF?

Tidak ada dalam rilis ini. GenerationResult.SaveAsPdf() dan MemoryGenerationResult.GetPDF() keduanya menghasilkan NotImplementedError. Gunakan output PNG dari Save() atau GetImages() sebagai gantinya.

Format apa yang dapat saya ekspor hasil pengenalan?

RecognitionResult mengekspor ke CSV, JSON, atau XML melalui GetCsv(), GetJson(), dan GetXml(), masing-masing dengan varian aliran memori yang cocok.

Apakah itu mendukung bahasa selain bahasa Inggris?

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.

Apakah validasi jawaban multi-select didukung?

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.

  

Sumber Daya Dukungan dan Pembelajaran

 Bahasa Indonesia