跳轉到主要內容

授權與散佈

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」的檔案。這些檔案是系統模組和主要辨識資料庫。
  • 手寫/手寫印刷體文字的辨識資料庫 (如有需要) 。
  • 您的應用程式將使用之介面語言的資源檔。
  • 您的應用程式將支援之辨識語言的 Dictionary 支援檔案。如果辨識語言包含使用拉丁字母的語言,請確保已複製 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 正確無誤。另請參閱 LicensingDistribution of Applications Which Use the ABBYY FineReader Engine Library
請使用下列命令列檢查資料夾 %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 和 Licensing Service。如需此情境的操作說明,請參閱 Running ABBYY FineReader Engine 12 inside a Docker container
您可以在 Azure Cloud Service 或 Azure App Service 中執行以 ABBYY FineReader Engine 為基礎的應用程式。請參閱 Running ABBYY FineReader Engine in Azure Services 中的說明。
影像相關問題
請使用 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。
另請參閱 Working with Profiles

使用 Engine 物件

如果您使用 InitializeEngine 函式進行初始化,請務必在應用程式的主函式上指定 [STAThread] (單一執行緒 Apartment 模型) 屬性:
[STAThread]
public static void Main()
{
  ...
}
某些 ABBYY FineReader Engine 物件 (例如 ILayout::Blocks) 具有唯讀的物件屬性。這並不表示這些屬性無法變更,而只是表示不能直接變更。在 C++ (Linux 上為 C++ raw) 中,如果您想變更這類屬性,必須先將該屬性物件的參考指派給新的變數,再透過這個變數進行修改。以下是 ILayout::Blocks 屬性的 C++ 範例;此屬性以唯讀集合表示:
ILayout* pLayout = 0;
ILayoutBlocks* pLayoutBlocks = 0;
int blockIndex = 0;
// 從先前開啟的 FRPage 取得版面配置
pFRPage->get_Layout( &pLayout );
// pLayoutBlocks 變數會接收來自 Layout 的 blocks 集合參考
pLayout->get_Blocks( &pLayoutBlocks );
// 從 block 集合中移除元素
pLayoutBlocks->DeleteAt( blockIndex );
// 處理修改後的版面配置
...
// 釋放物件
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 方法啟用) ,在這種情況下還可能出現下列訊息:“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 方法。輸入參數請指定記錄檔名稱,以及一個用來決定是否記錄方法呼叫訊息的布林變數。呼叫此方法後,所有訊息都會記錄下來。若要停止記錄,請呼叫 Engine 物件的 StopLogging 方法。
一般來說,您不需要註冊 FREngine.dll。在使用預設參數執行開發人員安裝或執行階段安裝時,系統會自動註冊此程式庫。不過,如果因某些原因您需要在安裝後註冊 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。這些屬性用來指定是否要儲存字元或單字的辨識變體。另請參閱 Using Voting API
如果您的作業系統是 macOS 10.15 Catalina 或更高版本,請依照下列步驟操作 (本說明以 Font Book 應用程式為例) :
  1. 找出包含字型的資料夾 (在所需字型上按一下滑鼠右鍵,然後選擇 Show in 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