彩票走势图

光学控件Aspose.OMR教程(4):.NET 中的 C# 光学标记识别 (OMR) 软件

翻译|使用教程|编辑:胡涛|2022-08-05 10:37:01.977|阅读 169 次

概述:在本文中,我们将学习如何使用 C# 开发基于 GUI 的 OMR Sheet Reader 应用程序。在本文中,我们将学习如何使用 C# 开发基于 GUI 的 OMR Sheet Reader 应用程序。在本文中,我们将学习如何使用 C# 开发基于 GUI 的 OMR Sheet Reader 应用程序。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

相关链接:


使用 C#.NET 的 OMR 扫描仪软件


光学标记识别 (OMR) 是一种自动捕获和分析标记在特殊类型文档表单上的数据的过程。这种特殊类型的文件可以由人们在调查表、测试表和其他纸质文件上标记/填写。在本文中,我们将学习如何使用 C# 开发基于 GUI 的 OMR Sheet Reader 应用程序。我们的解决方案将扫描的 OMR 表图像作为本地磁盘的输入,然后识别标记,最后以CSV格式导出标记的注册号和阴影答案。完成上述步骤后,我们将拥有.NET 中的 C# 光学标记识别 (OMR) 软件。那么让我们开始吧。

Aspose.OMR 最新下载

(一) C# 光学标记识别 (OMR) 软件的特点

我们的光学标记识别 (OMR) 软件将具有以下功能:

  1. 交互式调整识别参数并实时观察其效果。我们可以调整以下内容:
    • 识别阈值
    • 飞涨
    • 显示/隐藏气泡
  2. 选择并加载以下格式的扫描图像:
    • PNG
    • JPG/JPEG
    • 动图
    • TIF/TIFF
  3. 识别图像上的光学标记。
  4. 以 CSV 格式导出结果并将其保存到本地磁盘。
(二) C# 光学标记识别 .NET API 和 UI 控制

Aspose.OMR for .NET API 允许设计、创建和识别答题卡、测试、MCQ 试卷、测验、反馈表、调查和选票。此外,它还提供了一个图形用户界面控件,可以添加到 .NET UI 应用程序中。我们将在 .NET UI 应用程序中集成 Aspose.OMR for .NET UI 控件,以开发 OMR 扫描仪/阅读器应用程序。请下载API 的 DLL 或使用NuGet安装它。

PM> Install-Package Aspose.OMR
(三) 开发 OMR 软件的步骤

我们可以按照以下步骤开发基于 GUI 的 OMR 扫描仪/阅读器应用程序:

  • 首先,创建一个新项目并选择WPF App (.NET Framework)项目模板。

创建一个新项目并选择项目模板。

  • 接下来,在Configure your new project对话框中,输入Project name,选择Location并设置其他参数。

配置您的 WPF 应用程序项目

  • 然后,打开NuGet 包管理器并安装Aspose.OMR for .NET包。

为 .NET 安装 Aspose.OMR

  • 接下来,将新文件DialogHelper.cs添加到项目中。

添加 DialogHelper 类

  • 将以下代码添加到新创建的DialogHelper.cs中。
internal class DialogHelper
{
/// <summary>
/// The filter string for the dialog that opens template images.
/// </summary>
private static readonly string ImageFilesFilterPrompt = "Image files |*.jpg; *.jpeg; *.png; *.gif; *.tif; *.tiff;";

/// <summary>
/// The filter string for the dialog that saves recognition results
/// </summary>
private static readonly string DataExportFilesFilterPrompt = "Comma-Separated Values (*.csv)" + " | *.csv";

/// <summary>
/// Shows Open Image file dialog.
/// </summary>
/// <returns>Path to selected file, or <c>null</c> if no file was selected.</returns>
public static string ShowOpenImageDialog(string suggestedDir = null)
{
OpenFileDialog dialog = new OpenFileDialog();
return ShowDialog(dialog, ImageFilesFilterPrompt, suggestedDir);
}

/// <summary>
/// Shows Save Recognition Results file dialog.
/// </summary>
/// <returns>Path to selected file, or <c>null</c> if no file was selected.</returns>
public static string ShowSaveDataDialog(string suggestedName)
{
SaveFileDialog dialog = new SaveFileDialog();
return ShowDialog(dialog, DataExportFilesFilterPrompt, suggestedName);
}

/// <summary>
/// Displays given dialog and returns its result as a <c>string</c>.
/// </summary>
/// <param name="dialog">The dialog to show.</param>
/// <param name="filter">File type filter string.</param>
/// <param name="suggestedDir">Suggested dialog initial directory</param>
/// <param name="suggestedName">Suggested file name</param>
/// <returns>Path to selected file, or <c>null</c> if no file was selected.</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;
}
}
  • 接下来,使用以下 XAML 内容更新MainWindow.xaml文件。
<Window x:Class="OMR_APP.MainWindow"
xmlns="//schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="//schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="//schemas.microsoft.com/expression/blend/2008"
xmlns:mc="//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>
view rawOMR-Software-CSharp_MainWindow.xaml hosted with ❤ by GitHub
之后,替换MainWindow.xaml.cs文件中的以下内容。
/// <summary>
/// Template for testing
/// </summary>
private static readonly string TemplateFilePath = @"C:\Files\OMR\Sheet.omr";

/// <summary>
/// Path to the license Aspose.OMR.NET.lic file
/// </summary>
private static readonly string LicensePath = @"";

private CorrectionControl control;

public MainWindow()
{
InitializeComponent();

// Set and show template file path
txtTemplatePath.Text = TemplateFilePath;

// Set license, provide License file Path and uncomment to test full results
//License lic = new License();
//lic.SetLicense(LicensePath);
}

public string UserImagePath { get; set; }

public string DataFolderPath { get; set; }

/// <summary>
/// Loads and displays 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>
/// Select and display image
/// </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>
/// Recognize loaded image
/// </summary>
private void RecognizeImageClicked(object sender, RoutedEventArgs e)
{
if (control == null)
{
return;
}

control.RecognizeImage();
}

/// <summary>
/// Export results to 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 软件演示

(五) 结论
  • 在本文中,我们学习了如何

    • 在 .NET 应用程序中集成 Aspose.OMR for .NET UI 控件;
    • 在 C# 中开发 OMR 表阅读器应用程序。

    欢迎下载|体验更多Aspose产品 

    获取更多信息请咨询 或 加入Aspose技术交流群(761297826

  • 标签:

    本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn


    为你推荐

    • 推荐视频
    • 推荐活动
    • 推荐产品
    • 推荐文章
    • 慧都慧问
    扫码咨询


    添加微信 立即咨询

    电话咨询

    客服热线
    023-68661681

    TOP