1. Sản Phẩm
  2.   Aspose.OMR
  3.   Aspose.OMR FOSS for Python

Aspose.OMR FOSS cho Python

Thiết kế phiếu trả lời OMR và nhận dạng các bong bóng đã đánh dấu từ hình ảnh quét trong Python — miễn phí, mã nguồn mở và được cấp phép MIT.

Thư viện Python mã nguồn mở cho Nhận dạng Dấu tích quang học

Aspose.OMR FOSS for Python là một thư viện miễn phí, mã nguồn mở để thiết kế các biểu mẫu OMR (optical mark recognition) — các phiếu trả lời trắc nghiệm, biểu mẫu hộp kiểm và khảo sát — và nhận dạng các dấu mà người trả lời điền vào từ hình ảnh đã quét hoặc chụp. Nó hướng tới các nhà phát triển tự động hoá việc chấm điểm kỳ thi, tổng hợp khảo sát, hoặc thu thập dữ liệu dựa trên biểu mẫu trong Python thuần túy, được xây dựng trên chỉ các thư viện numpy, opencv-python, và Pillow. Một OmrEngine duy nhất bao phủ toàn bộ quy trình — Generate() chuyển một mẫu, được xây dựng theo code-first từ cây TemplateConfig gồm các phần tử như ChoiceBoxConfig, CheckBoxConfig, GridConfig, và AnswerSheetConfig, hoặc được viết bằng một DSL đánh dấu văn bản gọn gàng, thành một hình ảnh trang cộng với mô tả .omr; GetTemplateProcessor() tải mô tả đó lại để nhận dạng các ảnh quét mới bằng Recognize() hoặc RecognizeFolder(), trả về kết quả có thể xuất ra CSV, JSON, hoặc XML. Thư viện được cấp phép MIT và cài đặt bằng một lệnh pip duy nhất (xem bên dưới); đây là bản phát hành sớm (v0.1.0, Development Status: Alpha) bao gồm các lớp nền tảng, tạo và nhận dạng của toàn bộ bề mặt Aspose.OMR — việc hiển thị trong bản phát hành này chỉ hỗ trợ LTR/Tây, các hệ thống viết RTL và xử lý tràn đầy đủ đang được theo dõi trên lộ trình upstream nhưng chưa được triển khai. Đối với dòng sản phẩm doanh nghiệp, xem Aspose.OMR — Enterprise Product Family.

Thiết kế và Tạo Biểu mẫu OMR

  • Mẫu dạng code-first: TemplateConfig, PageConfig, và các cấu hình phần tử (ChoiceBoxConfig, CheckBoxConfig, GridConfig, CompositeGridConfig, AnswerSheetConfig) mô tả mọi trường trên trang.
  • Markup DSL: một định dạng văn bản gọn nhẹ (?choicebox=... / &choicebox) tạo ra các cấu trúc tương tự mà không cần tạo đối tượng thủ công.
  • Các enum hệ thống viết: Arabic, Hebrew, Persian, Urdu, Bengali, và Western có sẵn để đạt độ trung thực API với bề mặt Aspose.OMR; bộ render của phiên bản này chỉ hỗ trợ LTR/Western — render RTL chưa được triển khai.
  • Các enum overflow: LongWordHandling và các lớp con của OverflowAction (Clip, NoClip, Wrap) được phân tích và xác thực đúng, nhưng bộ render của phiên bản này chưa tôn trọng chúng — hành vi overflow thực tế chưa khả cấu hình.
  • Các nhóm checkbox và choice: CheckBoxConfig và ChoiceBoxConfig hỗ trợ đa lựa chọn; FormValidationLogic, được thiết lập một lần cho mỗi TemplateProcessor, có thể gây lỗi nếu một câu hỏi với Multiselect bị tắt nhận được nhiều hơn một dấu.

Nơi Aspose.OMR FOSS Có Thể Được Sử Dụng

  • Kỳ thi và bài kiểm tra: tạo phiếu trả lời trắc nghiệm và nhận dạng các bong bóng đã đánh dấu để chấm điểm tự động.
  • Khảo sát và mẫu đơn: xây dựng ma trận phiếu trả lời có số thứ tự với AnswerSheetConfig để thu thập phản hồi quy mô lớn.
  • Lưới nhập dữ liệu: GridConfig và CompositeGridConfig ghi lại các mục nhập số hoặc ký hiệu tùy chỉnh thành một giá trị hợp nhất.
  • Đầu ra có thể in: Save() ghi một trang PNG sẵn sàng để in cùng với mô tả .omr được dùng cho việc nhận dạng sau này.
  • Đường ống hàng loạt: RecognizeFolder() xử lý toàn bộ thư mục các bản quét trong một lần gọi.

Nhận dạng dấu và xuất kết quả

  • Động cơ không trạng thái: OmrEngine.Generate() tạo ra một GenerationResult (hình ảnh trang + mẫu .omr JSON); GetTemplateProcessor() tải mẫu đó để nhận dạng các bản scan mới.
  • Nhiều định dạng xuất: RecognitionResult xuất ra CSV, JSON, hoặc XML, mỗi định dạng có một biến thể stream tương ứng.
  • Kết quả trong bộ nhớ cũng có: MemoryGenerationResult cung cấp các hình ảnh đã tạo dưới dạng streams trong bộ nhớ thông qua GetImages()/GetOmr() — không cần I/O đĩa.
  • Bù nghiêng và tái hiệu chuẩn: quá trình nhận dạng sửa lỗi nghiêng của bản scan dựa trên dấu tham chiếu góc, và Recalculate() áp dụng lại ngưỡng khác mà không cần quét lại.
  • Hình ảnh nhúng: ImageCollection cho phép markup tham chiếu các byte hình ảnh trong bộ nhớ bằng tên, tránh việc di chuyển qua hệ thống tập tin.

Trải nghiệm nhà phát triển

Aspose.OMR FOSS for Python được cài đặt bằng một lệnh pip duy nhất (xem ví dụ Quick Start bên dưới). Phần API tập trung vào ba đối tượng — OmrEngine, một cây TemplateConfig (hoặc DSL markup), và TemplateProcessor — bao phủ toàn bộ quy trình tạo → quét → nhận dạng → xuất workflow.

Thư viện chỉ phụ thuộc vào numpy, opencv-python và Pillow — không có binary OMR gốc nào cần biên dịch. Nó được cấp phép MIT, lưu trữ trên GitHub, và hiện đang ở bản phát hành sớm v0.1.0, bao gồm các lớp nền tảng, tạo và nhận dạng của toàn bộ bề mặt Aspose.OMR.

Tạo Form và Nhận dạng Câu trả lời Đã quét

Xây dựng (hoặc tải) một mẫu, lưu hình ảnh trang đã tạo và mô tả .omr, sau đó nhận dạng bản scan và xuất kết quả dưới dạng 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()

Xây dựng Câu hỏi Trắc nghiệm từ Markup

DSL đánh dấu văn bản xây dựng cùng cây phần tử như API kiểu code-first. Ở đây ?choicebox=... mở một câu hỏi choice-box, dòng tiếp theo liệt kê các tùy chọn của nó, và &choicebox đóng lại — Generate() trả về một mô tả .Template JSON mà bạn có thể kiểm tra trực tiếp.

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

Câu Hỏi Thường Gặp

Mô hình cấp phép cho Aspose.OMR FOSS for Python là gì?

Nó được phân phối theo Giấy phép MIT — miễn phí sử dụng, sửa đổi và phân phối, bao gồm trong các sản phẩm thương mại, với điều kiện bao gồm thông báo bản quyền gốc.

Nó yêu cầu những phiên bản Python và các phụ thuộc nào?

Python 3.10 hoặc sau này, với ba phụ thuộc được cài đặt tự động bằng pip — numpy, opencv-python, và Pillow. Không cần phần cứng OMR gốc hoặc dịch vụ bên ngoài.

Tôi có thể xuất mẫu đã tạo ra dưới dạng PDF không?

Không có trong phiên bản này. GenerationResult.SaveAsPdf() và MemoryGenerationResult.GetPDF() đều gây ra NotImplementedError. Sử dụng đầu ra PNG từ Save() hoặc GetImages() thay thế.

Bạn có thể xuất kết quả nhận dạng sang những định dạng nào?

RecognitionResult xuất ra CSV, JSON, hoặc XML thông qua GetCsv(), GetJson() và GetXml(), mỗi cái có một biến thể luồng trong bộ nhớ tương ứng.

Nó có hỗ trợ các ngôn ngữ khác ngoài tiếng Anh không?

Chưa hỗ trợ việc render. Lớp mẫu định nghĩa các hệ thống viết Arabic, Hebrew, Persian, Urdu và Bengali để đảm bảo độ chính xác với bề mặt Aspose.OMR, nhưng engine render của bản phát hành này chỉ hỗ trợ LTR/Western — việc render RTL và thiết kế chữ số bản địa đang nằm trong lộ trình upstream, chưa được triển khai.

Có hỗ trợ kiểm tra đáp án đa lựa chọn không?

Có, đối với các câu hỏi được cấu hình với Multiselect bị tắt. Đưa FormValidationLogic.Exception vào GetTemplateProcessor() để gây ra lỗi khi một câu hỏi như vậy nhận được hơn một dấu; mặc định, Ignore, sẽ chấp nhận một cách im lặng. GlobalPageSettings.Multiselect mặc định là bật.

  

Tài Nguyên Hỗ Trợ và Học Tập

 Tiếng Việt