Програмне забезпечення сканера OMR з використанням C#.NET

Оптичне розпізнавання позначок (OMR) — це автоматизований процес збору та аналізу даних, позначених на спеціальному типі форми документа. Цей особливий тип документа люди можуть позначати/заповнювати в анкетах, тестових аркушах та інших паперових документах. У цій статті ми дізнаємося, як розробити програму OMR Sheet Reader на основі графічного інтерфейсу за допомогою C#. Наше рішення візьме відскановане зображення аркуша OMR як вхідні дані з локального диска, потім розпізнає позначки та, нарешті, експортує позначений реєстраційний номер і затінені відповіді у форматі CSV. Після виконання згаданих кроків у нас буде наше програмне забезпечення C# для оптичного розпізнавання позначок (OMR) у .NET. Тож почнемо.

Стаття повинна охоплювати такі теми:

  1. Функції програмного забезпечення C# для оптичного розпізнавання позначок (OMR)
  2. C# OMR .NET API та керування інтерфейсом користувача
  3. Кроки розробки програмного забезпечення C# OMR
  4. Демонстрація програмного забезпечення оптичного розпізнавання позначок C# (OMR)
  5. Завантажити вихідний код програмного забезпечення OMR

Особливості програмного забезпечення C# для оптичного розпізнавання позначок (OMR).

Наше програмне забезпечення оптичного розпізнавання позначок (OMR) матиме такі функції:

  1. Інтерактивно налаштовуйте параметри розпізнавання та спостерігайте за їх ефектом у режимі реального часу. Ми можемо налаштувати наступне:
    • Поріг розпізнавання
    • Збільшити
    • Показати/сховати бульбашки
  2. Виберіть і завантажте скановане зображення в таких форматах:
  3. Розпізнайте оптичні знаки на зображенні.
  4. Експортуйте результати у CSV та збережіть їх на локальному диску.

C# OMR .NET API та керування інтерфейсом користувача

Aspose.OMR for .NET API дозволяє розробляти, створювати та розпізнавати бланки відповідей, тести, MCQ, вікторини, форми зворотного зв’язку, опитування та бюлетені. Крім того, він забезпечує елемент керування графічним інтерфейсом користувача, який можна додати до програм .NET UI. Ми інтегруємо Aspose.OMR для керування .NET UI у програму .NET UI для розробки програми сканування/зчитування OMR. Завантажте DLL API або встановіть його за допомогою NuGet.

PM> Install-Package Aspose.OMR

Кроки для розробки програмного забезпечення C# OMR

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

  • По-перше, створіть новий проект і виберіть шаблон проекту WPF App (.NET Framework).
Створіть новий проект і виберіть шаблон проекту.

Створіть новий проект і виберіть шаблон проекту.

  • Далі в діалоговому вікні «Налаштувати новий проект» введіть назву проекту, виберіть «Розташування» та встановіть інші параметри.
Налаштуйте проект програми WPF

Налаштуйте проект програми WPF

  • Потім відкрийте NuGet Package Manager і встановіть Aspose.OMR для пакета .NET.
Встановіть Aspose.OMR for .NET

Встановіть Aspose.OMR for .NET

  • Далі додайте новий файл DialogHelper.cs до проекту.
Додайте клас DialogHelper

Додайте DialogHelper.cs

  • Додайте наступний код до щойно створеного DialogHelper.cs.
internal class DialogHelper
{
    ///<summary>
    /// Рядок фільтра для діалогового вікна, яке відкриває шаблонні зображення.
    ///</summary>
    private static readonly string ImageFilesFilterPrompt = "Image files |*.jpg; *.jpeg; *.png; *.gif; *.tif; *.tiff;";

    ///<summary>
    /// Рядок фільтра для діалогового вікна, яке зберігає результати розпізнавання
    ///</summary>
    private static readonly string DataExportFilesFilterPrompt = "Comma-Separated Values (*.csv)" + " | *.csv";

    ///<summary>
    /// Показує діалогове вікно відкриття файлу зображення.
    ///</summary>
    ///<returns> Шлях до вибраного файлу або<c> нуль</c> якщо файл не вибрано.</returns>
    public static string ShowOpenImageDialog(string suggestedDir = null)
    {
        OpenFileDialog dialog = new OpenFileDialog();
        return ShowDialog(dialog, ImageFilesFilterPrompt, suggestedDir);
    }

    ///<summary>
    /// Показує діалогове вікно збереження файлу результатів розпізнавання.
    ///</summary>
    ///<returns> Шлях до вибраного файлу або<c> нуль</c> якщо файл не вибрано.</returns>
    public static string ShowSaveDataDialog(string suggestedName)
    {
        SaveFileDialog dialog = new SaveFileDialog();
        return ShowDialog(dialog, DataExportFilesFilterPrompt, suggestedName);
    }

    ///<summary>
    /// Відображає вказане діалогове вікно та повертає його результат як a<c> рядок</c> .
    ///</summary>
    ///<param name="dialog"> Діалог для показу.</param>
    ///<param name="filter"> Рядок фільтра типу файлу.</param>
    ///<param name="suggestedDir"> Запропонований початковий каталог діалогового вікна</param>
    ///<param name="suggestedName"> Запропонована назва файлу</param>
    ///<returns> Шлях до вибраного файлу або<c> нуль</c> якщо файл не вибрано.</returns>
    private static string ShowDialog(FileDialog dialog, string filter, string suggestedDir = null, string suggestedName = null)
    {
        string fileName = null;

        dialog.Filter = filter;
        dialog.RestoreDirectory = true;
        if (suggestedName != null)
        {
            dialog.FileName = suggestedName;
        }

        if (suggestedDir != null)
        {
            dialog.InitialDirectory = suggestedDir;
        }

        bool? result = dialog.ShowDialog();
        if (result == true)
        {
            fileName = dialog.FileName;
        }

        return fileName;
    }
}
  • Далі оновіть файл MainWindow.xaml таким вмістом XAML.
<Window x:Class="OMR_APP.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:OMR_APP"
        mc:Ignorable="d"
        Title="Aspose OMR Demo" Height="880" Width="1100">
    <Grid Background="WhiteSmoke">
        <Grid.RowDefinitions>
            <RowDefinition Height="40"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>

        <ToolBar Grid.Row="0" Background="LightGray">
            <TextBox Name="txtTemplatePath" Margin="5" Width="400" Height="30" Background="White"
                     HorizontalContentAlignment="Center" VerticalContentAlignment="Center">
            </TextBox>
            <Button  Margin="5" Width="100" Height="30" Background="White"
                     Content="Get control" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"
                     Click="GetButtonClicked"/>
            <Separator/>

            <Button  Margin="5" Width="100" Height="30" Background="White"
                     Content="Select Image" Click="SelectImageClicked"/>

            <Button  Margin="5" Width="100" Height="30" Background="White"
                     Content="Recognize Image" Click="RecognizeImageClicked"/>

            <Button  Margin="5" Width="100" Height="30" Background="White"
                     Content="Export Results" Click="ExportResultsClicked"/>
        </ToolBar>

        <ContentControl Grid.Row="1" x:Name="CustomContentControl"
                        HorizontalAlignment="Center" VerticalAlignment="Center"/>
    </Grid>
</Window>
  • Після цього замініть наступний вміст у файлі MainWindow.xaml.cs.
///<summary>
/// Шаблон для тестування
///</summary>
private static readonly string TemplateFilePath = @"C:\Files\OMR\Sheet.omr";

///<summary>
/// Шлях до файлу ліцензії Aspose.OMR.NET.lic
///</summary>
private static readonly string LicensePath = @"";

private CorrectionControl control;

public MainWindow()
{
    InitializeComponent();

    // Встановити та показати шлях до файлу шаблону
    txtTemplatePath.Text = TemplateFilePath;

    // Встановіть ліцензію, укажіть шлях до файлу ліцензії та розкоментуйте, щоб перевірити повні результати
    //Ліцензія lic = нова ліцензія();
    //lic.SetLicense(LicensePath);
}

public string UserImagePath { get; set; }

public string DataFolderPath { get; set; }


///<summary>
/// Завантажує та відображає CorrectionControl
///</summary>
private void GetButtonClicked(object sender, RoutedEventArgs e)
{
    string path = txtTemplatePath.Text;

    try
    {
        OmrEngine engine = new OmrEngine();
        TemplateProcessor processor = engine.GetTemplateProcessor(path);

        control = engine.GetCorrectionControl(processor);
        CustomContentControl.Content = control;
        control.Initialize();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message,"Exception");
    }
}

///<summary>
/// Виберіть і відобразіть зображення 
///</summary>
private void SelectImageClicked(object sender, RoutedEventArgs e)
{
    if (control == null)
    {
        return;
    }

    string imagePath = DialogHelper.ShowOpenImageDialog(this.DataFolderPath);
    if (string.IsNullOrEmpty(imagePath))
    {
        return;
    }

    this.UserImagePath = imagePath;

    control.LoadAndDisplayImage(imagePath);
}

///<summary>
/// Розпізнати завантажене зображення
///</summary>
private void RecognizeImageClicked(object sender, RoutedEventArgs e)
{
    if (control == null)
    {
        return;
    }

    control.RecognizeImage();
}

///<summary>
/// Експорт результатів у CSV
///</summary>
private void ExportResultsClicked(object sender, RoutedEventArgs e)
{
    if (control == null)
    {
        return;
    }

    string imageName = Path.GetFileNameWithoutExtension(this.UserImagePath);

    string path = DialogHelper.ShowSaveDataDialog(imageName);
    if (string.IsNullOrEmpty(path))
    {
        return;
    }

    control.ExportResults(path);

    MessageBox.Show("The exported resultant CSV file can be found here : " + path, "Operation Successful");
}
  • Нарешті, запустіть програму.

Демонстрація програмного забезпечення оптичного розпізнавання позначок C# (OMR).

Нижче наведено демонстрацію програми OMR Scanner/Reader, яку ми щойно створили.

Демонстрація програмного забезпечення C# OMR

Демонстрація програмного забезпечення OMR

Завантажте вихідний код програмного забезпечення C# .NET OMR

Ви можете завантажити повний вихідний код програми C# OMR Scanner з GitHub.

Отримайте безкоштовну ліцензію

Ви можете отримати безкоштовну тимчасову ліцензію, щоб спробувати бібліотеку без оціночних обмежень.

Висновок

У цій статті ми дізналися, як

  • інтегрувати Aspose.OMR для керування .NET UI у додаток .NET;
  • розробити програму читання аркушів OMR на C#.

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

Дивись також