LEADTOOLS 18 的 iOS OCR和条码

发布时间:2015/10/23 00:10 发布者:iceman

返回博客中心

简介

LEADTOOLS是用于Windows、WinRT和HTML5的世界顶级图像SDK,已经发布了版本18。版本18中最让人兴奋的新功能就是LEADTOOLS Anywhere™,这个屡获殊荣的新技术可以移植到多个平台,包括 WinRT、iOS、OS X、Android 和Linux。

LEADTOOLS先进的iOS和OS X图像SDK技术为开发者提供了创建 Apple iPhone、iPad和Macintosh上图像应用所需的一切。查看器、注释和标记、OCR、条码、PDF、图像格式、压缩、图像处理等只是LEADTOOLS为Apple平台开发者提供的多种功能的一部分。

LEADTOOLS SDK中的主要iOS&OS X功能

1. 针对 iPhone、 iPad 和Mac的通用框架

1.1. Xcode 3.2 及以上版本

1.2. iOS 4 及以上版本

1.3. OS X Lion (10.7) 及以上版本

2. 全面和易于使用的Objective-C类库,类似于其他的LEADTOOLS库,如.NET和Android

3. 加载、转换和保存150余种图像格式

3.1. 高级的位深度、颜色空间和常见格式的压缩支持,包括PDF、PDF/A、JPEG、JPEG 2000、TIFF、 JBIG2等

4. 交互式图像查看器

4.1. 触摸屏交互模式

4.2. 令人难以置信的图像质量的视网膜显示优化

4.3. 使用内置图像处理快速处理图像

4.4. 基于物理和逻辑单元显示图像

5. 用于增强、校正和处理图像的200多种图像处理方法

6. 全面的注释和标记,包括几何形状、便利贴、编校、高亮和橡皮图章

7. OCR将图像转化为可搜索的文本

QR、PDF417、数据矩阵、UPC/EAN等的数据读写

一个iOS例子:OCR和条码

在这篇文章中,我们将为您展示如何使用LEADTOOLS全新iOS库的OCR识别文本,从图形中读取条码。

获取一个LEADTOOLS图像

在iOS中定义图像的对象是标准 UIImage(或是低级的CGImage)。在app中你可以通过多种方式获取一个图像:

l 直接从应用程序包里加载图像

l 浏览设备的照片库

l 通过设备的摄像头实时捕捉

LEADTOOLS库使用 LTRasterImage对象完成所有的图像显示和处理。幸运的是,LEADTOOLS提供了转换工具,将与iOS的操纵变得简单,只需几行代码就能完成:

// 从包或照片库获取图像,或实时捕捉
UIImage* uiImage = ...
// 使用默认选项将UIImage转化为LTRasterImage
LTRasterImage* rasterImage = [LTRasterImageConverter convertFromImage:uiImage
     options:LTConvertFromImageOptions_None
       error:nil];

clip_image002

现在,我们有一个图像,我们可以使用LEADTOOLS提供的高级图像技术,如OCR和条码。

OCR例子

首先,我们需要一个LEADTOOLS OCR引擎实例:

// 创建一个LEADTOOLS OCR引擎实例
LTOcrEngine* ocrEngine = [LTOcrEngineManager createEngine:LTOcrEngineType_Advantage];
// 使用默认参数启动引擎..我们已经将OCR引擎需要的语言数据文件添加到主包中了
NSString* bundlePath = [[NSBundle mainBundle] bundlePath];
[ocrEngine startup:nil workDirectory:nil startupParameters:bundlePath];
// 可选的,在这里修改OCR引擎的设置(通过ocrEngine.settingsManager

下面,我们创建一个新的OCR文档,将我们的图像作为一页添加进去:

// 首先创建一个文档
LTOcrDocument* ocrDocument = [ocrEngine.documentManager createDocument];
// 将图像作为一页添加到文档页集合中
LTOcrPage* ocrPage = [ocrDocument.pages addPageWithImage:rasterImage
   target:nil
   selector:nil
   error:nil];
// 你可以通过ocrPage.zones collection在页面中添加手工区域(文本或图形区域)。此例中,我们//让引擎自动分区。

最后,识别页面、获取文档:

// 识别,将结果打印到控制台上
NSString* result = [ocrPage recognizeText:nil
   selector:nil
   error:nil];
printf("%s\n", result.UTF8String);

LEADTOOLS还提供了高级自定义处理的低级控件。例如,你可以获取结果字符,同时获取它们的位置、字体属性和置信度信息:

// 识别页面
[ocrPage recognize:nil selector:nil error:nil];
LTOcrPageCharacters* pageCharacters = [ocrPage getRecognizedCharacters:nil];
   // 显示字符
for (LTOcrZoneCharacters* zoneCharacters in pageCharacters)
{
   NSArray* words = [zoneCharacters getWords];
   for (LTOcrWord* word in words)
   {
      // 显示值和位置
         printf("Word: %s at %d,%d,%d,%d\n",
         word.value.UTF8String,
         word.bounds.x,
         word.bounds.y,
         word.bounds.x + word.bounds.width,
         word.bounds.y + word.bounds.height);
   }
}

clip_image004

条码例子

就像OCR一样,我们首先必须创建一个LEADTOOLS条码引擎的实例:

// 创建一个LEADTOOLS条码引擎的实例
LTBarcodeEngine* barcodeEngine = [LTBarcodeEngine new];
// 获取条码读取对象
LTBarcodeReader* barcodeReader = barcodeEngine.reader;
// 在这里,你可以通过barcodeReader成员修改条码读取选项(如搜索方向、错误检查等)。在此例中//我们使用了默认选项。

下面我们设置一些搜索选项,然后从图像中读取条码。还可以缩小搜索范围至特定的条码类型或区域,但是此例中我们在图像中搜索任意类型的条码:

// 读取图像中的条码,首先设置选项:图像的搜索位置和大小。此处为整个图像。
LeadRect searchBounds = LeadRect_Empty();
// 我们感兴趣的条码 (条码类型如UPC-A, UPC-E,/QR) 。此处为所有类型。
LTBarcodeSymbology* symbologies = nil;
// 调用readBarcode
LTBarcodeData* barcodeData = [barcodeReader readBarcode:rasterImage
   searchBounds:searchBounds
   symbologies:symbologies
   symbologiesCount:0
   error:nil];

LTBarcodeData对象包含了找到的条码的信息,如类型、值、位置等。有了这些信息,你就可以充分发挥创造力为客户提供超赞的app。例如,你可以在产品上执行一个价格审查web搜索,或者跳转至条码中嵌入的web页面。此例中,我们只是将条码信息输出到控制台上:

if (barcodeData != nil)
{
   // 我们有一个条码
   //获取条码类型的名称,如UPC-A,UPC-E, QR, EAN等。
   NSString* symbology = [LTBarcodeEngine   getSymbologyFriendlyName:barcodeData.symbology];
   // 获取图像中的位置
   LeadRect bounds = barcodeData.bounds;
   // 获取数据的文本表示
NSString* value = barcodeData.value;
      
   // 将结果打印到控制台上
   NSString* result = [NSString stringWithFormat:
      @"Found %@ barcode at %d,%d,%d,%d\nData: %@",
      symbology,
      bounds.x, bounds.y,
      bounds.x + bounds.width,
      bounds.y + bounds.height,
      value];
   printf("%s\n", result.UTF8String);
}else
{
   printf("No barcode found\n");
}

clip_image006


关于葡萄城

赋能开发者!葡萄城是专业的集开发工具、商业智能解决方案、低代码开发平台于一身的软件和服务提供商,为超过 75% 的全球财富 500 强企业提供服务。葡萄城专注控件软件领域30年,希望通过模块化的开发控件、灵活的低代码应用开发平台等一系列开发工具、解决方案和服务,帮助开发者快速响应复杂多变的业务需求,最大程度地发挥开发者的才智和潜能,让开发者的 IT 人生更从容更美好。

了解详情,请访问葡萄城官网