跳转到主要内容
ABBYY FineReader Engine 目前尚不支持阿拉伯语 ICR。不过,可以识别阿拉伯数字,本文将介绍所需步骤。 除了 识别手写文本 中概述的流程外,要识别阿拉伯数字,还需要创建一种自定义语言,将其字母表设置为仅包含 10 个数字符号,并将其设为每个包含数字的块的识别语言。 因此,要识别手写阿拉伯数字,请按以下步骤操作:
  1. 使用 LanguageDatabase 对象的 CreateTextLanguage 方法创建一个新的文本语言。
  2. 使用 TextLanguage 对象中 BaseLanguage 对象的 LetterSet 属性,将语言字母表设置为仅包含以下字符:٠١٢٣٤٥٦٧٨٩。
  3. 对于每个包含手写阿拉伯数字的块,通过 ITextBlock::RecognizerParams 属性指定识别参数:
    • RecognizerParams 对象的 TextLanguage 属性设置为上一步创建的语言。
    • 将 RecognizerParams 对象的 TextTypes 属性设置为 TT_Handwritten。
    • 如果数字被框线、方框等包围,请在 RecognizerParams 对象的 FieldMarkingType 属性中设置字符周围标记的类型。如果每个数字都写在单独的单元格中,还需使用 CellsCount 属性来设置块中的字符单元格数量。

Windows 示例

// 全局 ABBYY FineReader Engine 对象
FREngine::IEnginePtr Engine;
...
// 打开图像文件
...
// 创建自定义语言
FREngine::ILanguageDatabasePtr pLanguageDatabase = Engine->CreateLanguageDatabase();
FREngine::ITextLanguagePtr pTextLanguage = pLanguageDatabase->CreateTextLanguage();
FREngine::IBaseLanguagesPtr pBaseLanguages = pTextLanguage->BaseLanguages;
FREngine::IBaseLanguagePtr pBaseLanguage = pBaseLanguages->AddNew();
// 设置字母表
pBaseLanguage->put_LetterSet( FREngine::BLLS_Alphabet, L"٠١٢٣٤٥٦٧٨٩" );
// 从页面获取 Layout 对象
FREngine::ILayoutPtr layout = frPage->get_Layout();
// 设置块区域
FREngine::IRegionPtr pRegion = Engine->CreateRegion();
pRegion->AddRect( 491, 314, 2268, 404 );
// 创建新的块
FREngine::IBlockPtr newBlock = layout->Blocks->AddNew( FREngine::BT_Text, pRegion, 0 );
FREngine::ITextBlockPtr textBlock = newBlock->GetAsTextBlock();
// 设置自定义语言
textBlock->RecognizerParams->TextLanguage = pTextLanguage;
// 指定文本类型
textBlock->RecognizerParams->TextTypes = FREngine::TT_Handwritten;
// 指定字符周围标记的类型
textBlock->RecognizerParams->FieldMarkingType = FREngine::FMT_SimpleText;
// 识别并导出
...
// 全局 ABBYY FineReader Engine 对象
FREngine.IEngine engine;
...
// 打开图像文件
...
// 创建自定义语言
FREngine.ILanguageDatabase languageDatabase = engine.CreateLanguageDatabase();
FREngine.ITextLanguage textLanguage = languageDatabase.CreateTextLanguage();
FREngine.IBaseLanguages baseLanguages = textLanguage.BaseLanguages;
FREngine.IBaseLanguage baseLanguage = baseLanguages.AddNew();
// 设置字母表
baseLanguage.set_LetterSet( FREngine.BaseLanguageLetterSetEnum.BLLS_Alphabet, "٠١٢٣٤٥٦٧٨٩" );
// 从页面获取 Layout 对象
FREngine.ILayout layout = frPage.Layout;
// 设置块区域
FREngine.IRegion region = engine.CreateRegion();
region.AddRect( 491, 314, 2268, 404 );
// 创建新的块
FREngine.IBlock newBlock = layout.Blocks.AddNew( FREngine.BlockTypeEnum.BT_Text, region, 0 );
FREngine.ITextBlock textBlock = newBlock.GetAsTextBlock();
// 设置自定义语言
textBlock.RecognizerParams.TextLanguage = textLanguage;
// 指定文本类型
textBlock.RecognizerParams.TextTypes = (int)FREngine.TextTypeEnum.TT_Handwritten;
// 指定字符周围标记的类型
textBlock.RecognizerParams.FieldMarkingType = FREngine.FieldMarkingTypeEnum.FMT_SimpleText;
// 识别并导出
...

另请参阅

RecognizerParams 识别手写文本 语言使用