Оптическое распознавание меток (OMR) позволяет считывать и фиксировать данные, отмеченные на бланке документа особого типа. Эта форма документа может быть тестом или опросом, состоящим из кружков или квадратов, заполненных пользователями. Мы можем легко выполнять операции OMR на отсканированных изображениях таких анкет или тестовых листов и программно считывать вводимые пользователем данные в приложениях .NET. В этой статье мы узнаем, как выполнять OMR и извлекать данные с помощью C#.
В этой статье должны быть раскрыты следующие темы:
- C# OMR API для выполнения OMR и извлечения данных
- Выполнение OMR и извлечение данных из изображения
- Выполнение OMR и извлечение данных из нескольких изображений
- Получите результаты OMR с пороговым значением
- Операция OMR с пересчетом
C# OMR API для выполнения OMR и извлечения данных
Для выполнения операций OMR и экспорта данных из изображений мы будем использовать Aspose.OMR for .NET API. Он позволяет разрабатывать, создавать и распознавать листы ответов, тесты, документы MCQ, викторины, формы обратной связи, опросы и бюллетени. Пожалуйста, загрузите DLL API или установите его с помощью NuGet.
PM> Install-Package Aspose.OMR
Выполнение OMR и извлечение данных из изображения
Чтобы выполнить операцию OMR с изображением, нам нужен подготовленный шаблон OMR (.omr) и изображение (заполненные пользователем формы/листы) для выполнения OMR. Мы можем выполнить операцию OMR с изображением и извлечь данные, выполнив следующие шаги:
- Во-первых, создайте экземпляр класса OmrEngine.
- Затем вызовите метод GetTemplateProcessor() и инициализируйте объект класса TemplateProcessor. В качестве аргумента он принимает путь к файлу шаблона OMR.
- Затем получите объект RecognitionResult, вызвав метод RecognizeImage() с путем к изображению в качестве аргумента.
- После этого получить результаты распознавания в виде CSV-строк с помощью метода GetCsv().
- Наконец, сохраните результат CSV в виде CSV-файла на локальном диске.
В следующем примере кода показано, как выполнять OMR для изображения и извлекать данные в формате CSV с помощью C#.
// Путь к файлу шаблона OMR
string templatePath = @"D:\Files\OMR\Sheet.omr";
// Путь к файлу изображения
string imagePath = @"D:\Files\OMR\Sheet1.jpg";
// Инициализировать механизм OMR
OmrEngine engine = new OmrEngine();
// Получить обработчик шаблонов
TemplateProcessor templateProcessor = engine.GetTemplateProcessor(templatePath);
// Распознать изображение
RecognitionResult result = templateProcessor.RecognizeImage(imagePath);
// Получить результаты в формате CSV
string csvResult = result.GetCsv();
// Сохранить CSV-файл
File.WriteAllText(@"D:\Files\OMR\Sheet1.csv", csvResult);
Шаблон OMR, используемый в приведенном выше примере кода, можно загрузить здесь.
Выполнение OMR и извлечение данных из нескольких изображений
Мы можем выполнять операции OMR с несколькими изображениями и извлекать данные в отдельный файл CSV для каждого изображения, выполнив шаги, упомянутые ранее. Однако нам нужно повторить шаги № 3, 4 и 5 для всех изображений по одному.
В следующем примере кода показано, как выполнять OMR для нескольких изображений и извлекать данные в формате CSV с помощью C#.
// Путь к файлу шаблона OMR
string templatePath = @"D:\Files\OMR\Sheet.omr";
// Путь к папке с изображениями
string imageFolderPath = @"D:\Files\OMR\";
// Выходной путь к каталогу
string outputPath = @"D:\Files\OMR\";
// Изображения для обработки
string[] UserImages = new string[] { "Sheet1.jpg", "Sheet2.jpg" };
// Инициализировать механизм OMR
OmrEngine engine = new OmrEngine();
// Получить обработчик шаблонов
TemplateProcessor templateProcessor = engine.GetTemplateProcessor(templatePath);
// Обрабатывайте изображения по одному
for (int i = 0; i < UserImages.Length; i++)
{
string imagePath = Path.Combine(imageFolderPath, UserImages[i]);
// Распознать изображение
RecognitionResult result = templateProcessor.RecognizeImage(imagePath);
// Получить результаты в формате CSV
string csvResult = result.GetCsv();
// Сохранить CSV-файл
File.WriteAllText(Path.Combine(outputPath, Path.GetFileNameWithoutExtension(UserImages[i]) + ".csv"), csvResult);
}
API также предоставляет функции для обнаружения и распознавания любых штрих-кодов, доступных на изображении во время работы OMR. Это функция по умолчанию для операции OMR. Мы можем выполнять операции OMR и распознавать штрих-коды, выполнив шаги, упомянутые ранее.
Получите результаты OMR с пороговым значением
Мы можем применить порог при выполнении операций OMR с изображениями. Значение порога может быть от 0 до 100 в зависимости от требований. Чем выше значение порога, тем более строгим становится API в отношении выделения ответов. Выполните шаги, упомянутые ранее, чтобы выполнить OMR с порогом. Однако нам просто нужно вызвать перегруженный метод RecognizeImage(string, int32) на шаге № 3. Он принимает путь к файлу изображения и пороговое значение в качестве аргументов.
В следующем примере кода показано, как выполнить OMR с пороговым значением с помощью C#.
// Путь к файлу шаблона OMR
string templatePath = @"D:\Files\OMR\Sheet.omr";
// Путь к файлу изображения
string imagePath = @"D:\Files\OMR\Sheet1.jpg";
// Пороговое значение
int CustomThreshold = 40;
// Инициализировать механизм OMR
OmrEngine engine = new OmrEngine();
// Получить обработчик шаблонов
TemplateProcessor templateProcessor = engine.GetTemplateProcessor(templatePath);
// Распознать изображение
RecognitionResult result = templateProcessor.RecognizeImage(imagePath, CustomThreshold);
// Получить результаты в формате CSV
string csvResult = result.GetCsv();
// Сохранить CSV-файл
File.WriteAllText(@"D:\Files\OMR\Sheet1_threshold.csv", csvResult);
Операция OMR с пересчетом
В некоторых случаях нам может потребоваться пересчитать результаты OMR с другими пороговыми значениями. Для этого мы можем настроить API для автоматического пересчета с использованием метода TemplateProcessor.recalculate(). Это позволяет обрабатывать изображение несколько раз, изменяя настройку порога, чтобы получить желаемый результат. Мы можем выполнить операцию OMR с пересчетом, выполнив следующие шаги:
- Во-первых, создайте экземпляр класса OmrEngine.
- Затем вызовите метод GetTemplateProcessor() и инициализируйте объект класса TemplateProcessor. В качестве аргумента он принимает путь к файлу шаблона OMR.
- Затем инициализируйте объект «Секундомер» и запустите таймер.
- Затем получите объект RecognitionResult, вызвав метод RecognizeImage() с путем к изображению в качестве аргумента.
- Затем остановите таймер и экспортируйте результаты распознавания в виде строки CSV с помощью метода GetCsv().
- Затем сохраните результат CSV в виде CSV-файла на локальном диске.
- Затем перезапустите таймер с помощью метода Restart().
- Затем вызовите метод Recalculate(). Он принимает объект RecognitionResult и пороговое значение в качестве аргументов.
- После этого остановите таймер и экспортируйте результаты распознавания в виде строки CSV с помощью метода GetCsv().
- Наконец, сохраните результат CSV в виде файла CSV на локальном диске.
В следующем примере кода показано, как выполнить OMR с помощью метода пересчета с помощью C#.
// Путь к файлу шаблона OMR
string templatePath = @"D:\Files\OMR\Sheet.omr";
// Путь к файлу изображения
string imagePath = @"D:\Files\OMR\Sheet1.jpg";
// Пороговое значение
int CustomThreshold = 40;
// Инициализировать механизм OMR
OmrEngine engine = new OmrEngine();
// Получить обработчик шаблонов
TemplateProcessor templateProcessor = engine.GetTemplateProcessor(templatePath);
// Таймер для измерения производительности
Stopwatch sw = Stopwatch.StartNew();
// Распознать изображение
RecognitionResult result = templateProcessor.RecognizeImage(imagePath, CustomThreshold);
sw.Stop();
// Получить результаты в формате CSV
string csvResult = result.GetCsv();
// Сохранить CSV-файл
File.WriteAllText(@"D:\Files\OMR\Sheet1.csv", csvResult);
sw.Restart();
// Пересчитать
templateProcessor.Пересчитать(result, CustomThreshold);
sw.Stop();
// Получить пересчитанные результаты в CSV
csvResult = result.GetCsv();
// Сохранить пересчитанный результирующий CSV-файл
File.WriteAllText(@"D:\Files\OMR\Sheet1_Пересчитатьd.csv", csvResult);
Получить бесплатную лицензию
Вы можете получить бесплатную временную лицензию, чтобы попробовать библиотеку без ограничений пробной версии.
Вывод
В этой статье мы узнали, как:
- выполнять операцию OMR над изображениями и извлекать данные в формате CSV с помощью C#;
- применять настройку порога при выполнении OMR на изображениях;
- программно пересчитать результаты OMR в автомобильном процессе.
Кроме того, вы можете узнать больше об Aspose.OMR для .NET API, используя документацию. В случае возникновения каких-либо неясностей, пожалуйста, свяжитесь с нами на форуме.