2009-01-23 138 views
3

我需要從Java應用服務器調用tesseract OCR(它是C++中的開放源代碼庫,它執行光學字符識別)。現在它很容易使用Runtime.exec()運行可執行文件。基本邏輯是當前在存儲器中保存到文件(一個.TIF) 通過命令行與JNI調用

  • 通在圖像文件名到的tesseract命令行程序

    1. 保存圖像。
    2. 使用FileReader從Java讀取輸出文本文件。

    通過爲Tesseract編寫JNI包裝,我可能獲得多少性能提升?不幸的是,沒有一個在Linux中可用的開源的JNI包裝器。我必須自己做,並且想知道這個好處是否值得開發成本。

  • +1

    您可以粘貼您在Runtime.exec()中使用的命令來運行tesseract命令。我無法撫摸它... – jorgen 2011-10-13 13:39:49

    回答

    4

    很難說這是否值得。如果您認爲如果通過JNI在進程內完成,OCR代碼可以直接訪問圖像數據而無需將其寫入文件,那麼它肯定會消除那裏的任何磁盤I/O限制。

    我建議使用更簡單的方法,只有在性能不可接受時才執行JNI選項。至少你可以做一些基準測試,並估計你可能實現的性能提升。

    1

    我同意tweakt。如果沒有性能原因,請不要使用JNI。如果您使用JNI調用,如果JNI圖層或OCR本身存在內存泄漏甚至崩潰的可能性,您的應用程序穩定性也可能處於危險之中。如果通過命令行界面使用它,則永遠不會發生(所有內存將在程序出口處釋放,並且可以在調用者代碼中檢查所有異常程序終止)。

    4

    如果你確實追求自己的包裝,我建議你退房JNA。它將允許你調用大多數只寫Java代碼的「本地」庫,並且會比原始JNI更安全地爲你提供幫助。 JNA適用於大多數平臺。

    +0

    感謝您的建議,我沒有聽說過JNA。我會研究它的任何未來需要本地綁定的項目。 – Ish 2009-01-23 18:35:18