Thực hiện OMR và trích xuất dữ liệu bằng C#

Nhận dạng dấu quang học (OMR) cho phép đọc và chụp dữ liệu được đánh dấu trên một loại biểu mẫu tài liệu đặc biệt. Biểu mẫu tài liệu này có thể là một bài kiểm tra hoặc một cuộc khảo sát, bao gồm các đầu vào bong bóng hoặc hình vuông do người dùng điền. Chúng tôi có thể dễ dàng thực hiện các thao tác OMR trên hình ảnh được quét của các biểu mẫu khảo sát hoặc phiếu kiểm tra đó và đọc đầu vào của người dùng theo chương trình trong các ứng dụng .NET. Trong bài này, chúng ta sẽ học cách thực hiện OMR và trích xuất dữ liệu bằng C#.

Các chủ đề sau sẽ được đề cập trong bài viết này:

API C# OMR để thực hiện OMR và trích xuất dữ liệu

Để thực hiện các hoạt động OMR và xuất dữ liệu từ hình ảnh, chúng tôi sẽ sử dụng Aspose.OMR for .NET API. Nó cho phép thiết kế, tạo và nhận dạng phiếu trả lời, bài kiểm tra, bài MCQ, câu đố, biểu mẫu phản hồi, khảo sát và phiếu bầu. Vui lòng tải xuống DLL của API hoặc cài đặt nó bằng NuGet.

PM> Install-Package Aspose.OMR

Thực hiện OMR và trích xuất dữ liệu từ hình ảnh

Để thực hiện thao tác OMR trên hình ảnh, chúng tôi cần mẫu OMR đã chuẩn bị (.omr) và hình ảnh (biểu mẫu / trang tính do người dùng điền) để thực hiện OMR trên. Chúng tôi có thể thực hiện thao tác OMR trên hình ảnh và trích xuất dữ liệu bằng cách làm theo các bước dưới đây:

  1. Đầu tiên, tạo một thể hiện của lớp OmrEngine.
  2. Tiếp theo, gọi phương thức GetTemplateProcessor() và khởi tạo đối tượng lớp TemplateProcessor. Nó lấy đường dẫn tệp mẫu OMR làm đối số.
  3. Sau đó, lấy đối tượng RecognitionResult bằng cách gọi phương thức RecognizeImage() với đường dẫn hình ảnh làm đối số.
  4. Sau đó, nhận kết quả nhận dạng dưới dạng chuỗi CSV bằng phương thức GetCsv().
  5. Cuối cùng, lưu kết quả CSV dưới dạng tệp CSV trên đĩa cục bộ.

Mẫu mã sau đây cho thấy cách thực hiện OMR trên hình ảnh và trích xuất dữ liệu ở định dạng CSV bằng C#.

// Đường dẫn tệp mẫu OMR
string templatePath = @"D:\Files\OMR\Sheet.omr";

// Đường dẫn tệp hình ảnh
string imagePath = @"D:\Files\OMR\Sheet1.jpg";

// Khởi tạo công cụ OMR
OmrEngine engine = new OmrEngine();

// Nhận bộ xử lý mẫu
TemplateProcessor templateProcessor = engine.GetTemplateProcessor(templatePath);

// Nhận dạng hình ảnh
RecognitionResult result = templateProcessor.RecognizeImage(imagePath);

// Nhận kết quả trong CSV
string csvResult = result.GetCsv();

// Lưu tệp CSV
File.WriteAllText(@"D:\Files\OMR\Sheet1.csv", csvResult);
Thực hiện OMR và trích xuất dữ liệu từ hình ảnh

Thực hiện OMR và Trích xuất dữ liệu từ hình ảnh.

Có thể tải xuống mẫu OMR được sử dụng trong ví dụ mã trên từ tại đây.

Thực hiện OMR và trích xuất dữ liệu từ nhiều hình ảnh

Chúng tôi có thể thực hiện các thao tác OMR trên nhiều hình ảnh và trích xuất dữ liệu trong một tệp CSV riêng biệt cho từng hình ảnh bằng cách làm theo các bước đã đề cập trước đó. Tuy nhiên, chúng ta cần lặp lại các bước # 3, 4 và 5 cho tất cả các hình ảnh một.

Mẫu mã sau đây cho thấy cách thực hiện OMR trên nhiều hình ảnh và trích xuất dữ liệu ở định dạng CSV bằng C#.

// Đường dẫn tệp mẫu OMR
string templatePath = @"D:\Files\OMR\Sheet.omr";

// Đường dẫn tệp thư mục hình ảnh
string imageFolderPath = @"D:\Files\OMR\";

// Đường dẫn thư mục đầu ra
string outputPath = @"D:\Files\OMR\";

// Hình ảnh được xử lý
string[] UserImages = new string[] { "Sheet1.jpg", "Sheet2.jpg" };

// Khởi tạo công cụ OMR
OmrEngine engine = new OmrEngine();

// Nhận bộ xử lý mẫu
TemplateProcessor templateProcessor = engine.GetTemplateProcessor(templatePath);

// Xử lý từng hình ảnh một
for (int i = 0; i < UserImages.Length; i++)
{
    string imagePath = Path.Combine(imageFolderPath, UserImages[i]);
    
    // Nhận dạng hình ảnh
    RecognitionResult result = templateProcessor.RecognizeImage(imagePath);
    
    // Nhận kết quả trong CSV
    string csvResult = result.GetCsv();

    // Lưu tệp CSV
    File.WriteAllText(Path.Combine(outputPath, Path.GetFileNameWithoutExtension(UserImages[i]) + ".csv"), csvResult);
}

API cũng cung cấp chức năng phát hiện và nhận dạng bất kỳ mã vạch nào có sẵn trên hình ảnh trong quá trình vận hành OMR. Đây là tính năng mặc định của hoạt động OMR. Chúng tôi có thể thực hiện các hoạt động OMR và nhận dạng mã vạch bằng cách làm theo các bước đã đề cập trước đó.

Nhận kết quả OMR với ngưỡng

Chúng tôi có thể áp dụng ngưỡng trong khi thực hiện các thao tác OMR trên hình ảnh. Giá trị của ngưỡng có thể từ 0 đến 100 tùy thuộc vào yêu cầu. Giá trị của ngưỡng càng cao, API càng trở nên nghiêm ngặt hơn về việc đánh dấu các câu trả lời. Vui lòng làm theo các bước đã đề cập trước đó để thực hiện OMR với ngưỡng. Tuy nhiên, chúng ta chỉ cần gọi phương thức RecognizeImage (string, int32) quá tải trong bước # 3. Nó lấy đường dẫn tệp hình ảnh và giá trị ngưỡng làm đối số.

Mẫu mã sau đây cho thấy cách thực hiện OMR với giá trị ngưỡng bằng C#.

// Đường dẫn tệp mẫu OMR
string templatePath = @"D:\Files\OMR\Sheet.omr";

// Đường dẫn tệp hình ảnh
string imagePath = @"D:\Files\OMR\Sheet1.jpg";

// Giá trị ngưỡng
int CustomThreshold = 40;

// Khởi tạo công cụ OMR
OmrEngine engine = new OmrEngine();

// Nhận bộ xử lý mẫu
TemplateProcessor templateProcessor = engine.GetTemplateProcessor(templatePath);

// Nhận dạng hình ảnh
RecognitionResult result = templateProcessor.RecognizeImage(imagePath, CustomThreshold);

// Nhận kết quả trong CSV
string csvResult = result.GetCsv();

// Lưu tệp CSV
File.WriteAllText(@"D:\Files\OMR\Sheet1_threshold.csv", csvResult);

Hoạt động OMR với tính toán lại

Trong một số trường hợp nhất định, chúng tôi có thể cần tính toán lại kết quả OMR với các giá trị ngưỡng khác nhau. Với mục đích này, chúng tôi có thể định cấu hình API để tự động tính toán lại bằng phương thức TemplateProcessor.recalculate(). Nó cho phép xử lý một hình ảnh nhiều lần bằng cách thay đổi cài đặt ngưỡng để có được kết quả mong muốn. Chúng tôi có thể thực hiện thao tác OMR với tính toán lại bằng cách thực hiện theo các bước dưới đây:

  1. Đầu tiên, tạo một thể hiện của lớp OmrEngine.
  2. Tiếp theo, gọi phương thức GetTemplateProcessor() và khởi tạo đối tượng lớp TemplateProcessor. Nó lấy đường dẫn tệp mẫu OMR làm đối số.
  3. Sau đó, khởi tạo đối tượng Đồng hồ bấm giờ và khởi động bộ đếm thời gian.
  4. Tiếp theo, lấy đối tượng RecognitionResult bằng cách gọi phương thức RecognizeImage() với đường dẫn hình ảnh làm đối số.
  5. Sau đó, dừng bộ đếm thời gian và xuất kết quả nhận dạng dưới dạng chuỗi CSV bằng phương thức GetCsv().
  6. Tiếp theo, lưu kết quả CSV dưới dạng tệp CSV trên đĩa cục bộ.
  7. Sau đó, khởi động lại bộ hẹn giờ bằng phương thức Restart().
  8. Tiếp theo, gọi phương thức Recalculate(). Nó lấy đối tượng RecognitionResult và giá trị ngưỡng làm đối số.
  9. Sau đó, dừng bộ đếm thời gian và xuất kết quả nhận dạng dưới dạng chuỗi CSV bằng phương thức GetCsv().
  10. Cuối cùng, lưu kết quả CSV dưới dạng tệp CSV trên đĩa cục bộ.

Mẫu mã sau đây cho thấy cách thực hiện OMR với phương pháp tính toán lại sử dụng C#.

// Đường dẫn tệp mẫu OMR
string templatePath = @"D:\Files\OMR\Sheet.omr";

// Đường dẫn tệp hình ảnh
string imagePath = @"D:\Files\OMR\Sheet1.jpg";

// Giá trị ngưỡng
int CustomThreshold = 40;

// Khởi tạo công cụ OMR
OmrEngine engine = new OmrEngine();

// Nhận bộ xử lý mẫu
TemplateProcessor templateProcessor = engine.GetTemplateProcessor(templatePath);

// Hẹn giờ đo hiệu suất
Stopwatch sw = Stopwatch.StartNew();

// Nhận dạng hình ảnh
RecognitionResult result = templateProcessor.RecognizeImage(imagePath, CustomThreshold);

sw.Stop();

// Nhận kết quả trong CSV
string csvResult = result.GetCsv();

// Lưu tệp CSV
File.WriteAllText(@"D:\Files\OMR\Sheet1.csv", csvResult);

sw.Restart();

// Tính toán lại
templateProcessor.Tính toán lại(result, CustomThreshold);
sw.Stop();

// Nhận kết quả được tính toán lại trong CSV
csvResult = result.GetCsv();

// Lưu tệp CSV kết quả được tính toán lại
File.WriteAllText(@"D:\Files\OMR\Sheet1_Tính toán lạid.csv", csvResult);

Nhận giấy phép miễn phí

Bạn có thể nhận giấy phép tạm thời miễn phí để dùng thử thư viện mà không có giới hạn đánh giá.

Sự kết luận

Trong bài viết này, chúng tôi đã học cách:

  • thực hiện thao tác OMR trên hình ảnh và trích xuất dữ liệu ở định dạng CSV bằng C#;
  • áp dụng cài đặt ngưỡng trong khi thực hiện OMR trên hình ảnh;
  • tính toán lại kết quả OMR trong một quy trình ô tô theo chương trình.

Bên cạnh đó, bạn có thể tìm hiểu thêm về Aspose.OMR for .NET API bằng cách sử dụng tài liệu. Trong trường hợp có bất kỳ sự mơ hồ nào, vui lòng liên hệ với chúng tôi trên diễn đàn.

Xem thêm