← 返回所有博客文章

作为LEAD Technologies 25周年纪念的一部分,我们正在搞一个“25天收集25个项目来展示LEAD功能强度和易用性”的活动。今天要展示的项目来自于法瑞斯的分享。

识别之前

clip_image002

成功识别

clip_image004

公认的第一次尝试

clip_image006

 

它是做什么的

使用LEADTOOLS第 19版,该项目可以在条形码被识别出来之前执行各种图像清理功能。

所使用的功能

· Barcode

· Image Processing

· Document Cleanup

开发进程日志

大家好,我是法瑞斯。我要创建这样一个可以尝试识别条形码的程序。当它识别失败时,它会先对所加载的图像进行不同的图像处理操作,然后在每次操作之后进行再次尝试。其尝试的总次数为4。而多次进行的图像处理操作将被堆叠在同一图像上。由于通常第一次尝试不能够识别不清晰的图像,因此,对图像进行处理是为了清理条形码,以便于条形码引擎对其识别。

在这个项目中,我要使用LEADTOOLS的文档成像SDK,并在.NET环境下使用C#编程语言进行编程。 LEADTOOLS文档成像SDK可以为我提供读取一维和二维条码的功能,以及进行图像处理操作的能力。该读取操作包含以下4个步骤:1. 读取条形码,同时不对其进行任何修改;2. 在图像的分辨率低于300 DPI的情况下,增加该图像的尺寸和每英寸的点数(DPI);3. 对图像执行自动二值化的操作并将其每像素的位数(BPP)变更为1;4. 最后,对图像执行最小的图像处理算法。

如果以上所有的4个步骤都失败了,那么,也就不会有条形码被识别出来。

请注意,这不能被当做是针对所有的情况的完整的解决方案,而只是一个可以基于通常存在于工作环境中的图像的性质进行定制的模板。如果这4个步骤使用的是错误的图像,实际上,它们可能只会使图像变得更糟,而起不到改善的作用。

首先,我要用Visual Studio 2010中一个新的WinForms应用程序来启动这个项目。在该窗体中,我要添加一个菜单和一个富文本框来显示当前正由程序执行的操作,还要添加一个我们的ImageViewer 组件来查看所加载的图像。本人还要添加一些所必需的SDK引用,以用于装载和处理图像,并用于条形码功能。

现在我已经添加了加载图像所必需的代码,而这个过程只用了我几分钟的时间,因为我们的SDK大大简化了加载地球上几乎任何类型的图像的过程。

要想读取条码,我需要使用LEADTOOLS的 BarcodeEngine 类。

Documentation: BarcodeEngine class

使用ReadBarcode方法,就可以靠仅仅一行代码来轻松读取条形码。

Documentation: ReadBarcode

该程序会在所有的符号中进行查找,且不会漏掉水平和垂直方向。这些方向应该用BarcodeReadOptions 类来进行设置。由于我并不是经常使用该类,所以我会用我们在线帮助文档中的例子来设置除条形码方向以外的其他默认条形码选项,而条形码方向方面,我将用水平和垂直方向。

Documentation: BarcodeReadOptions

大约一小时以后,所有类型的基本条形码读取已准备就绪。接下来,我要添加的是一些不同的处理功能。

我在自己的代码中使用了switch 语句来审查当前的迭代。每一步操作过后,读取步骤也进行完了,这意味着将ReadBarcode方法排除在了switch 实例之外。在没有对当前所加载的图像做出任何更改的条件下,第一种情况(情况1)是不被纳入考虑范围的。

而在其他各种情况下,我使用的是相应命令类和图像处理操作:

  • ResizeCommand 类是用来调整图像尺寸的。(注意:这不会对DPI造成影响,所以我使用RasterImage 对象的XResolutionYResolution 属性更改了DPI。)
  • AutoBinarizeCommand 类可以用来将图像转换为B/W。

ColorResolutionCommand 类可以用来改变图像的BPP。

  • MinimumCommand 类可以扩展深色对象。

上述命令可以帮我只用几行代码就能执行图像处理操作。另外,LEADTOOLS的在线帮助文档为我提供了一个可以作为引用来使用的小的代码片段。例如,以下是有关MinimumCommand类的帮助主题:

Documentation: MinimumCommand

花了大约一个小时的时间,现在我终于把这一部分完成了。

接下来,我需要完成的是接口、���常处理和用户交互这几个部分。

完成这个部分大约花了一个半小时的时间。现在,该程序的外观和交互终于能够令我感到满意了。

最后,我们需要对程序进行测试。为此,我将使用不同的图像与条形码。

我在这个部分花的时间比之前所有步骤加在一起花的时间还要多。该LEADTOOLS条形码引擎本身是很强大的,因此,很多我测试过的图像并不需要我们的图像处理功能。我还测试了多个画面质量很差的图像,且该程序可以使用已实现的图像处理操作来清除它们。要想完全地测试该应用程序,我不得不使用包含一个条形码在内的图像来测试,然后用不同的处理技术来降低其质量,以便执行所有已实现的图像处理操作。所有的测试花了大约4个小时的时间。

对该应用程序进行开发、调试和从头开始的测试所花费的时间总额为7个半小时。如果不是LEADTOOLS SDK帮助我在两个小时的时间内完成了所有功能的编码,那么这个应用程序是不可能在一个工作日内完工的。

 

下载该项目

该示例项目的源代码您可以点击这里进行下载。

21 Multipass Image Processing for Barcode Recognition.zip (75.34 kb)

要运行该项目,请将其解压缩到该目录下:C:\LEADTOOLS 19\Examples\DotNet\CS directory。

 

支持

关于其他产品的更多信息,请访问我们的官方网站

欢迎下载免费的全功能评估版SDK,全功能试用版中有这个例子的全部源代码。

同时欢迎您使用评估版期间的免费技术支持