我需要從Java應用服務器調用tesseract OCR(它是C++中的開放源代碼庫,它執行光學字符識別)。現在它很容易使用Runtime.exec()運行可執行文件。基本邏輯是當前在存儲器中保存到文件(一個.TIF) 通過命令行與JNI調用
- 保存圖像。
- 使用FileReader從Java讀取輸出文本文件。
通過爲Tesseract編寫JNI包裝,我可能獲得多少性能提升?不幸的是,沒有一個在Linux中可用的開源的JNI包裝器。我必須自己做,並且想知道這個好處是否值得開發成本。
我需要從Java應用服務器調用tesseract OCR(它是C++中的開放源代碼庫,它執行光學字符識別)。現在它很容易使用Runtime.exec()運行可執行文件。基本邏輯是當前在存儲器中保存到文件(一個.TIF) 通過命令行與JNI調用
通過爲Tesseract編寫JNI包裝,我可能獲得多少性能提升?不幸的是,沒有一個在Linux中可用的開源的JNI包裝器。我必須自己做,並且想知道這個好處是否值得開發成本。
很難說這是否值得。如果您認爲如果通過JNI在進程內完成,OCR代碼可以直接訪問圖像數據而無需將其寫入文件,那麼它肯定會消除那裏的任何磁盤I/O限制。
我建議使用更簡單的方法,只有在性能不可接受時才執行JNI選項。至少你可以做一些基準測試,並估計你可能實現的性能提升。
我同意tweakt。如果沒有性能原因,請不要使用JNI。如果您使用JNI調用,如果JNI圖層或OCR本身存在內存泄漏甚至崩潰的可能性,您的應用程序穩定性也可能處於危險之中。如果通過命令行界面使用它,則永遠不會發生(所有內存將在程序出口處釋放,並且可以在調用者代碼中檢查所有異常程序終止)。
您可以粘貼您在Runtime.exec()中使用的命令來運行tesseract命令。我無法撫摸它... – jorgen 2011-10-13 13:39:49