Cách làm việc với API trong Python

Cách làm việc với API trong Python

Aspose.OMR FOSS cho Python công cộng API (omr.api) được thiết kế cố ý nhỏ gọn: OmrEngine, TemplateProcessor, ImageCollection, và FormValidationLogic. Hướng dẫn này cho thấy chúng phối hợp như thế nào trong quy trình tạo-và-nhận dạng.

Hướng dẫn từng bước

Bước 1: Cài đặt gói

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.')"

Bước 2: Nhập các lớp cần thiết

from omr.api import OmrEngine, FormValidationLogic

Bước 3: Tạo và lưu mẫu

engine = OmrEngine()
gen = engine.Generate("final-exam.txt")
gen.Save("out", "final-exam")

Bước 4: Tải mẫu để nhận dạng

Sử dụng FormValidationLogic.Exception thay vì Ignore mặc định nếu bạn muốn một vi phạm được kích hoạt cho các câu hỏi đã tắt đa lựa chọn, thay vì bị chấp nhận âm thầm.

processor = engine.GetTemplateProcessor("out/final-exam.omr", FormValidationLogic.Exception)

Bước 5: Nhận dạng và xuất

result = processor.Recognize("scan.png")
print(result.GetCsv())

Các vấn đề thường gặp và cách khắc phục

FormValidationLogic.Exception không bao giờ ném ngoại lệ, ngay cả trong câu hỏi có nhiều đánh dấu. Kiểm tra chỉ được kích hoạt cho một câu hỏi có Multiselect vô hiệu hoá; GlobalPageSettings.Multiselect mặc định là bật, vì vậy hãy xác nhận rằng nó đã được tắt một cách rõ ràng cho câu hỏi mà bạn mong đợi là lựa chọn đơn.

Tôi cần nhận dạng nhiều bản quét cùng một lúc. Sử dụng TemplateProcessor.RecognizeFolder(folderPath, recognitionThreshold) thay vì gọi Recognize() trong một vòng lặp.

Tôi đã đăng ký một hình ảnh dưới một tên đã được sử dụng. ImageCollection.Add không ghi đè — kiểm tra Contains(name) đầu tiên, hoặc sử dụng một tên duy nhất cho mỗi hình ảnh.

Câu hỏi thường gặp

Liệu OmrEngine có an toàn khi tái sử dụng trong nhiều mẫu không?

Có — nó không có trạng thái.

Làm thế nào để tôi tính lại điểm cho một kết quả với ngưỡng khác mà không cần quét lại?

Gọi TemplateProcessor.Recalculate(result, recognitionThreshold).

Làm sao tôi có thể nhúng một hình ảnh trong bộ nhớ vào markup thay vì đọc từ đĩa?

Đăng ký nó với ImageCollection.Add(name, image_bytes), sau đó tham chiếu nó trong markup dưới dạng ?image=<name>.

Xem thêm

 Tiếng Việt