簡體   English   中英

使用Tesseract ocr時,調用目標拋出了異常

[英]Exception has been thrown by the target of an invocation when using Tesseract ocr

我正在編寫一個程序,使用Tesseract從圖像中提取文本。程序應該從目錄中提取所有圖像並將它們逐個放在圖片框中,然后從中提取文本。 我已從此鏈接下載了經過英語培訓的數據並將其放入Debug文件夾https://github.com/tesseract-ocr/tessdata/blob/master/eng.traineddata
例外是:這是我的代碼:調用目標拋出了異常。
catch中指示的內部異常是:無法為平台x86找到庫“liblept172.dll”。

private void button1_Click(object sender, EventArgs e)
{
    Image image;
    string[] images = Directory.GetFiles("E:\\Omar Project\\New", "*.png");
    for (int i = 0; i < images.Length;i++)
    {
        image = Image.FromFile(images[i]);
        pictureBox1.Image = image;
        //ocr = new TesseractEngine(@"tessdata", "eng", EngineMode.Default);
        using (var engine = new TesseractEngine("E:\\Omar Project\\Extracting Text From Image Using Microsoft Office\\Extracting Text From Image Using Microsoft Office\\bin\\Debug\\eng.traineddata", "eng", EngineMode.Default))
        {
          using(var img=Pix.LoadFromFile(images[i]))
          {
              using(var page=engine.Process(img))
              {
                  richTextBox1.Text += page.GetText();
              }
          }
        }
    }

}

在項目目錄(.csproj文件所在的位置)創建文件夾“x64”或“x86”,並將liblept1760.so和libtesseract400.so復制到其中。 現在,您應該能夠在visual studio中看到這兩個文件。 您必須將兩個文件的“復制到輸出目錄”(英語中的屬性如此?)設置為“始終”

確保在容器中安裝了以下軟件包

apt-get install -y libgif7 libjpeg62 libopenjp2-7 libpng16-16 libtiff5 libwebp6

否則,liblept的dlopen命令將失敗,您將獲得提到的錯誤消息。

如果您沒有在容器中安裝liblept軟件包並且只將.so文件復制到x64目錄中,則libtesseract的open命令將失敗。

要解決此問題,您必須創建指向liblept共享對象的sym鏈接。

只需在容器/ Dockerfile中運行即可

ln -s /app/x64/liblept1760.so /usr/lib/x86_64-linux-gnu/liblept.so.5

確保使用正確的源路徑。 對於默認的asp.net核心docker鏡像和我描述的方式/app/x64/liblept1760.so應該正常工作。

Wiki Tesseract

失敗的常見原因是:未安裝Visual Studio 2015 x86和x64 Runtime,詳見主要自述頁面,可在此處找到。 x86和x64版本leptonica(liblept172.dll)和tesseract(libtesseract304.dll)未復制到bin目錄中的各自文件夾。 DotNet可能會報告錯誤的體系結構,例如一個已知的問題是,對於使用prefer 32位標記編譯的應用程序,當在Windows 64位操作系統上運行時,它將報告它在x64上運行(參見問題#55)。 常見的解決方法是將cpu體系結構更改為x86。 您在不受支持的架構(例如ARM)上運行它。 進一步診斷Tesseract會將檢測到的架構和路徑寫入名為“Tesseract”的System.Diagnostics源,這將有助於弄清楚發生了什么。 頁面末尾提供了示例配置。

如果找到了正確版本的庫但無法加載,則日志將告訴您是否是這種情況,然后下一步是啟用綁定錯誤的記錄並檢查融合日志。 請注意,根據我的經驗,Windows可能會將這些錯誤記錄到Windows事件日志中,因此可能需要先檢查它。 更多細節可以在這里找到:

https://blogs.msdn.microsoft.com/suzcook/2003/05/29/debugging-assembly-loading-failures/ http://stackoverflow.com/questions/255669/how-to-enable-assembly-bind- failure-logging-fusion-in-net如果你無法解決問題,請提交一個新的問題,包括庫版本,執行代碼的操作系統,入門程序的目標架構,以及完整標准和跟蹤的副本輸出。 請注意,您需要為Tesseract源啟用System.Diagnostics輸出,如前所述。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM