Виконання OMR і вилучення даних із зображення в C#

Оптичне розпізнавання позначок (OMR) дозволяє зчитувати та фіксувати дані, позначені на спеціальному типі форми документа. Ця форма документа може бути тестом або опитуванням, що складається з бульбашок або квадратів, заповнених користувачами. Ми можемо легко виконувати операції OMR на відсканованих зображеннях таких анкет чи тестових аркушів і програмно зчитувати введені користувачем дані в програмах .NET. У цій статті ми навчимося виконувати OMR і витягувати дані із зображення на C#.

У цій статті будуть розглянуті такі теми:

  1. C# OMR API для вилучення даних із зображення
  2. Виконайте OMR і витягніть дані із зображення
  3. Виконайте OMR і витягніть дані з кількох зображень
  4. Отримати результати OMR із пороговим значенням
  5. Операція OMR з перерахунком

C# OMR API для вилучення даних із зображення

Для виконання операцій OMR та експорту даних із зображень ми будемо використовувати Aspose.OMR for .NET API. Він дозволяє розробляти, створювати та розпізнавати бланки відповідей, тести, MCQ, вікторини, форми зворотного зв’язку, опитування та бюлетені.

Завантажте DLL API або встановіть його за допомогою NuGet.

PM> Install-Package Aspose.OMR

Виконання OMR і вилучення даних із зображення за допомогою C#

Щоб виконати операцію OMR із зображенням, нам потрібен підготовлений шаблон OMR (.omr) і зображення (заповнені користувачем форми/аркуші), на яких буде виконуватися OMR. Ми можемо виконати операцію OMR на зображенні та витягти дані, дотримуючись наведених нижче кроків:

  1. По-перше, створіть екземпляр класу OmrEngine.
  2. Потім викличте метод GetTemplateProcessor() та ініціалізуйте об’єкт класу TemplateProcessor. Він приймає шлях до файлу шаблону OMR як аргумент.
  3. Потім отримайте об’єкт RecognitionResult, викликавши метод RecognizeImage() із шляхом до зображення як аргументом.
  4. Після цього отримайте результати розпізнавання у вигляді рядків CSV за допомогою методу GetCsv().
  5. Нарешті, збережіть результат CSV як файл CSV на локальному диску.

У наведеному нижче прикладі коду показано, як виконувати OMR на зображенні та видобувати дані у форматі CSV за допомогою C#.

// Шлях до файлу шаблону OMR
string templatePath = @"D:\Files\OMR\Sheet.omr";

// Шлях до файлу зображення
string imagePath = @"D:\Files\OMR\Sheet1.jpg";

// Ініціалізація OMR Engine
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, використаний у наведеному вище прикладі коду, можна завантажити з тут.

Вилучення даних із кількох зображень у C#

Ми можемо виконувати операції 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 Engine
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 із Threshold у C#

Ми можемо застосувати порогове значення під час виконання операцій 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 Engine
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 з перерахунком у C#

У деяких випадках нам може знадобитися перерахувати результати OMR з іншими пороговими значеннями. Для цього ми можемо налаштувати API для автоматичного перерахунку за допомогою методу TemplateProcessor.recalculate(). Це дозволяє обробляти зображення кілька разів, змінюючи порогове значення, щоб отримати бажаний результат. Ми можемо виконати операцію OMR з перерахунком, дотримуючись наведених нижче кроків:

  1. По-перше, створіть екземпляр класу OmrEngine.
  2. Потім викличте метод GetTemplateProcessor() та ініціалізуйте об’єкт класу TemplateProcessor. Він приймає шлях до файлу шаблону OMR як аргумент.
  3. Потім ініціалізуйте об’єкт «Секундомір» і запустіть таймер.
  4. Потім отримайте об’єкт RecognitionResult, викликавши метод RecognizeImage() із шляхом до зображення як аргументом.
  5. Потім зупиніть таймер і експортуйте результати розпізнавання як рядок CSV за допомогою методу GetCsv().
  6. Потім збережіть результат CSV як файл CSV на локальному диску.
  7. Потім перезапустіть таймер за допомогою методу Restart().
  8. Далі викличте метод Recalculate(). Він приймає об’єкт RecognitionResult і порогове значення як аргументи.
  9. Після цього зупиніть таймер і експортуйте результати розпізнавання як рядок CSV за допомогою методу GetCsv().
  10. Нарешті, збережіть результат CSV як файл CSV на локальному диску.

У наведеному нижче прикладі коду показано, як виконати OMR за допомогою методу перерахунку за допомогою C#.

// Шлях до файлу шаблону OMR
string templatePath = @"D:\Files\OMR\Sheet.omr";

// Шлях до файлу зображення
string imagePath = @"D:\Files\OMR\Sheet1.jpg";

// Порогове значення
int CustomThreshold = 40;

// Ініціалізація OMR Engine
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 в автомобільному процесі.

Окрім вилучення даних OMR із зображень у C#, ви можете дізнатися більше про Aspose.OMR for .NET API за допомогою документації. У разі будь-яких неясностей зв’яжіться з нами на нашому безкоштовному форумі підтримки.

Дивись також