跳转到主要内容

许可与分发

ABBYY FineReader Engine 12 提供了一个专用于分发的安装工具。使用该工具,您可以通过命令行以自动方式在工作站上安装 ABBYY FineReader Engine 库。您也可以通过复制所需文件手动安装该库。请参阅 使用 ABBYY FineReader Engine 库的应用程序分发
同一项目中的所有许可证共享同一个 Customer Project ID,初始化库的函数需要用到该 ID。最终用户的 Runtime License 和软件开发人员的 Developer License 应与传递给这些函数的 Customer Project ID 相匹配。另请参阅 使用 ABBYY FineReader Engine 库的应用程序分发
您应在工作站上激活 Runtime License。请参阅 使用 Runtime License 激活 ABBYY FineReader Engine 库
  • 您的应用程序所支持各模块运行所需的文件。
  • ABBYY FineReader Engine Distribution Kit 部分表格中标记为“mandatory”的文件。它们是系统模块和主要识别数据库。
  • 手写/印刷体文本的识别数据库 (如有需要) 。
  • 您的应用程序将使用的界面语言资源文件。
  • 您的应用程序将支持的识别语言所需的字典支持文件。如果识别语言包含使用拉丁字母的语言,请确保复制 Univers.amd 和 Univers.amm 文件。
  • 如果您的应用程序将通过 ABBYY FineReader Engine 接口执行扫描,则还需要 Windows 扫描模块、扫描专用资源和 Twain 模块。
  • 如果您的应用程序使用 ABBYY FineReader Engine Visual Components,则还需要 Windows Visual Components 模块及相应的专用资源。请使用 regsvr32.exe 注册 VisualComponents_dll。
您还可以使用 FREngineDistribution.csv 文件,自动生成应用程序运行所需的文件列表。另请参阅
不,没有必要。限制“Everyone”的完全访问权限是正确的做法,这样未经授权的用户就无法进行修改。对于“Everyone”组,只需具有“Read”访问权限即可。
以下文件夹需要完全控制权限:
  • %TEMP% 文件夹
  • 文件夹 %ProgramData%\ABBYY\SDK\12\FineReader Engine
  • 文件夹 %ProgramData%\ABBYY\SDK\12\Licenses (许可证服务器必需,工作站可选)
所有运行您的应用程序的用户都应对以下内容具有读取和执行以及写入权限:
  • %ProgramData%\ABBYY 文件夹。
工作站还应能访问以下注册表分支:
  • “HKEY_CURRENT_USER\Software\ABBYY\SDK\12\FineReader Engine” — 完全控制
  • “HKEY_CURRENT_USER\Software\ABBYY\SDK\12” — 仅安装时需要完全控制
  • “HKEY_LOCAL_MACHINE\Software\ABBYY\SDK\12” — 仅安装时需要完全控制
请参阅 安装 ABBYY FineReader Engine 库
请确保 Runtime License 与编译应用程序时使用的 Customer Project ID 相对应。如果许可证与 Customer Project ID 不匹配,应用程序将无法运行。Customer Project ID 会作为输入参数之一传递给加载 FineReader Engine 的方法。请确保这些方法使用的 Customer Project ID 正确无误。另请参阅 许可使用 ABBYY FineReader Engine 库的应用程序分发
请使用以下命令检查授予文件夹 %ProgramData%\ABBYY\SDK\12\Licenses 的权限:
ls -l /var/lib/ABBYY/SDK/12 | grep Licenses
chmod 777 /var/lib/ABBYY/SDK/12/Licenses
如果命令返回的值不是 drwxrwxrwx,则表示文件夹 %ProgramData%\ABBYY\SDK\12\Licenses 缺少部分权限。要向文件夹 %ProgramData%\ABBYY\SDK\12\Licenses 授予完全访问权限,请执行以下命令:
要使用处理方法,例如 IFRDocument::Process,您需要拥有包含 Processing 模块的许可证。如果您的许可证不支持该模块,则只能识别条码;请使用 IFRPage::ExtractBarcodes 方法。
要使用处理方法,例如 IFRDocument::Process,您需要拥有包含 Processing 模块的许可证。如果您的许可证不支持该模块,您仍然可以通过其他方法识别条码和/或勾选标记:
要在 Docker 容器中运行 ABBYY FineReader Engine,请使用两个独立的容器,分别运行 ABBYY FineReader Engine 和许可服务。有关此场景的说明,请参阅 在 Docker 容器中运行 ABBYY FineReader Engine 12
您可以在 Azure Cloud Service 或 Azure App Service 中运行基于 ABBYY FineReader Engine 的应用程序。请参阅 在 Azure Services 中运行 ABBYY FineReader Engine 中提供的说明。
图像相关问题
使用 ImageDocument 对象中用于改善图像质量的方法。这些方法允许您选择要处理的图像区域。
ABBYY FineReader Engine 提供了几种校正图像分辨率的方法:
  1. 打开图像后,使用 ImageDocument 对象的 ChangeResolution 方法。
    您还可以使用 FRPage 对象的 DetectResolution 方法来确定最佳分辨率值。
  2. 在图像预处理阶段进行校正 (默认情况下,任何执行图像完整处理的方法调用都包含此阶段) ,该过程由 PagePreprocessingParams 对象的 OverwriteResolutionMode 属性控制。分辨率既可以自动校正,也可以设置为 ResolutionToOverwrite 属性中指定的值。
对于通过截取计算机屏幕获得的图像,我们建议使用面向文本提取的设置。调用 Engine 对象的 LoadPredefinedProfile 方法,加载以下某个预定义配置文件:
  • TextExtraction_Accuracy — 用于从文档中提取文本,针对准确率进行了优化
  • TextExtraction_Speed — 用于从文档中提取文本,针对速度进行了优化
通过屏幕截图获得的图像分辨率必须设置为 72 或 96 dpi (取决于屏幕分辨率) 。
这些建议适用于通过计算机上运行的操作系统或软件生成的数字图像。使用其他设备 (如相机) 拍摄的屏幕照片,分辨率应为 200 到 300 dpi。
另请参见 使用配置文件

使用 Engine 对象

如果您使用 InitializeEngine 函数进行初始化,请确保在应用程序的主函数上添加 [STAThread] 属性 (单线程单元模型) :
[STAThread]
public static void Main()
{
  ...
}
某些 ABBYY FineReader Engine 对象 (例如 ILayout::Blocks) 具有只读对象属性。这并不意味着此类属性不能更改,只是表示不能直接更改。在 C++ (Linux 下为 C++ raw) 中,如果您想更改这类属性,需要先将该属性对象的引用赋给一个新变量,然后通过该变量进行修改。下面是 ILayout::Blocks 属性的 C++ 示例,该属性表示为一个只读 collection:
ILayout* pLayout = 0;
ILayoutBlocks* pLayoutBlocks = 0;
int blockIndex = 0;
// 从之前打开的 FRPage 获取 layout
pFRPage->get_Layout( &pLayout );
// pLayoutBlocks 变量接收来自 Layout 的 blocks collection 引用
pLayout->get_Blocks( &pLayoutBlocks );
// 从 block collection 中删除一个元素
pLayoutBlocks->DeleteAt( blockIndex );
// 处理修改后的 layout
...
// 释放对象
pLayoutBlocks->Release();
pLayout->Release();
可以。创建 Engine 对象时,应使用 InprocLoaderOutprocLoader 对象。详情请参见 Different Ways to Load the Engine Object如果您使用 InitializeEngine 函数加载,则无法在多个线程中使用 Engine 对象。在这种情况下,所有 FineReader Engine 对象的方法都只能在创建 Engine 对象的线程中调用。
可以。详情请参见 Different Ways to Load the Engine Object
如果在反初始化 Engine 对象之前,应用程序创建并使用的对象没有全部删除,就会抛出此异常。如果这些对象都已删除,则该异常也可能是由垃圾回收器的运行导致的。
如果应用程序是在 Windows 上使用 Visual Basic .NET 开发的:值为 Nothing 的对象并不会立即删除,而只是标记为待删除。垃圾回收器何时实际删除对象是无法确定的。因此,在反初始化 Engine 对象之前,您应调用以下方法,以便垃圾回收器删除对象:
    GC.Collect()
    GC.WaitForPendingFinalizers()
如果您启用了日志记录 (可通过 Engine 对象的 StartLogging method 启用) ,在这种情况下还可能出现以下消息:“Warning: DeinitializeEngine() has detected external references to FREngine objects. It can indicate a leak if programming platform without automatic garbage collection is used.”。即使您显式调用了垃圾回收器 (GC.Collect) ,也不一定意味着对象会立即被删除。在带有垃圾回收机制的环境中工作时,您可以忽略此消息。在没有垃圾回收机制的环境中 (例如 C++) ,此异常和消息可能表明源代码中存在问题。某些对象可能没有得到正确处理,从而导致内存泄漏。不过,无论如何,在 Engine 反初始化后,所有 FineReader Engine 对象都会被删除,因此内存泄漏可能发生在代码的客户端部分。也就是说,如果您为 FineReader Engine 对象创建了自己的包装器,却没有在反初始化前释放它们,就可能出现这种情况。建议使用 Engine 对象的 TotalObjectsCount 属性,该属性返回尚未释放的对象数量,可帮助您定位内存泄漏。
为此,您需要调用 Engine 对象的 StartLogging method。作为输入参数,请指定日志文件名,以及一个用于确定是否记录方法调用消息的布尔变量。调用此方法后,所有消息都会被记录。要停止日志记录,请调用 Engine 对象的 StopLogging method。
通常不需要注册 FREngine.dll。使用默认参数执行 Developer 安装或运行时安装时,系统会自动注册该库。但是,如果出于某种原因,您需要在安装后注册 FREngine.dll (例如在运行时安装期间指定了 RegisterCOM=No) ,请使用以下命令行:
regsvr32 /s /n /i:"<path to the Inc folder>" "<path to FREngine.dll>"
英语是默认识别语言。如果你想更改默认识别语言,你必须使用 RecognizerParams 对象的 SetPredefinedTextLanguage 方法。
如果一个块中包含不同类型的文本,ABBYY FineReader Engine 仍会将其视为同一种类型的文本。为了提高 OCR 质量,请为每种类型的文本分别绘制单独的块。另请参见 Using Text Type Autodetection
识别目标文档后,你可以将其导出为 XML 格式。ABBYY FineReader Engine 使用的 XML schema 允许你获取有关已处理文本及其结构、属性和识别变体的所有必要信息。
如果 RecognizerParams 对象的 TextTypes 属性包含 TT_Matrix、TT_Typewriter、TT_OCR_A 和 TT_OCR_B 的任意组合,那么无论 RecognizerParams 对象的 ProhibitItalicProhibitSubscriptProhibitSuperscript 属性的值如何,斜体以及上标/下标都不会被识别。另请参见 Using Text Type Autodetection
要判断某个字符是否识别不可靠并需要校验,可以对该字符使用 PlainTextCharParams 对象的 IsSuspicious 属性。它是根据 ErrorProbability 计算得出的。如果要进行更细粒度的区分,你可以使用 PlainTextCharParams 对象的 ErrorProbability 属性,该属性返回字符被错误识别的估计概率 (范围为 0 到 100) 。它会考虑字符所处的上下文,例如包含该字符的单词是否存在于字典中。你还可以获取字符置信度,既可以针对已识别字符 (PlainText 对象的 CharConfidence 属性) ,也可以针对所有识别变体 (CharacterRecognitionVariant 对象的 CharConfidence 属性) 。置信度仅根据单个字符的图像给出准确性估计,不考虑上下文。不同字符的置信度估计值之间不可比较,置信度唯一可靠的用法是比较同一图像 (字符) 的多个识别变体。对于未经识别直接获得的符号,这些属性都没有意义,例如直接从源 PDF 文件中提取的符号。
请确保已将 RecognizerParams 对象的 SaveCharacterRecognitionVariants 或 SaveWordRecognitionVariants 属性设置为 TRUE。这些属性用于指定是否保存字符或单词的识别变体。另请参阅 使用 Voting API
如果您的操作系统是 macOS 10.15 Catalina 或更高版本,请按以下步骤操作 (本说明以 Font Book 应用程序为例) :
  1. 找到字体所在的文件夹 (右键单击所需字体 - 在 Finder 中显示) 。
  2. 从找到的文件夹安装本地字体:
  • 打开应用程序设置 (Preferences) 。
  • 将 Default install location 属性设置为 Computer。
  • 单击工具栏上的“+”按钮 (或使用 File - Add fonts) 。
  • 选择步骤 1 中的文件夹。
  • 单击“Open”按钮。请注意,安装字体时,您需要输入用户密码。
或者,您也可以将步骤 1 中文件夹内的字体复制到 /Library/Fonts 文件夹。如果您不打算安装这些字体,但希望在 ABBYY FineReader Engine 中使用它们,请设置 CustomFontSet 对象的 Folder 属性。
共有两个扫描日志文件:scantwain.txt 和 scanwia.txt。它们存储在 %userprofile%\AppData\Local\ABBYY\ScanManager\12.00 文件夹中。
扫描当前仅在 Windows 中实现。
您可以使用 ScanSource 对象的 ScanSettings 属性来访问 ScanSourceSettings 对象。该对象提供对源扫描设置的访问。有关详细信息,请参阅 Scanning 场景说明。
扫描当前仅在 Windows 中实现。
支持导出的 PDF 版本在 PDFVersionEnum 中列出。请注意,所选版本不得与指定的导出参数冲突。应选择满足指定导出参数的最早 PDF 文件版本作为 PDF 文件版本:
  • 可用的最早文件版本为 1.3。
  • 在以下情况下,PDF 文件版本应为 1.4:
  • 在以下情况下,PDF 文件版本应为 1.4 或更高:
  • 在以下情况下,版本应为 1.5 或更高:
  • 在以下情况下,版本应为 1.6 或更高:
    • PDFEncryptionInfo 对象的 EncryptionAlgorithm 属性为 PDFEA_AES128,或者
    • 输出的 PDF 文件中使用了 OpenType 字体。
  • 在以下情况下,版本应为 1.7 或更高:
  • 可用的最新文件版本为 2.0。
另请参见 PDFExportFeatures
根据您打算如何使用这些字体,需要在启动应用程序之前,使用以下方法之一在操作系统中注册这些字体,或将其添加到应用程序中:
  • 将字体手动复制到基于 ABBYY FineReader Engine 的应用程序中的 Data/Resources/Font 文件夹。
  • 将字体手动复制到系统文件夹 /usr/share/fonts 中。
  • 根据您的操作系统,安装相应的字体安装软件包。
详情请参见 Working with Fonts
如果您找不到问题的答案,请联系 ABBYY Technical Support