gpt4 book ai didi

python - 在 Linux 中构建可移植的 Tesseract OCR 库

转载 作者:太空狗 更新时间:2023-10-29 11:18:29 26 4
gpt4 key购买 nike

有没有一种方法可以在 Windows 中构建和使用 Tesseract 库和相应的 Leptonica 库(因为 Tesseract 依赖于 Leptonica)?

我根据他们的说明编译了这些库,但似乎 libtesseract.so.3.0.2 包含了到 Leptonica 共享库的固定路径:

$ ldd libtesseract.so.3.0.2

linux-vdso.so.1 => (0x00007fffbc5ff000)
**liblept.so.4 => /usr/local/lib/liblept.so.4 (0x00007fa8400fd000)**
libpng12.so.0 => /usr/lib64/libpng12.so.0 (0x00007fa83fcae000)
libjpeg.so.62 => /usr/lib64/libjpeg.so.62 (0x00007fa83fa5e000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fa83f5e4000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007fa83f2de000)
libm.so.6 => /lib64/libm.so.6 (0x00007fa83f059000)
libc.so.6 => /lib64/libc.so.6 (0x00007fa83ecc5000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fa83eaaf000)
/lib64/ld-linux-x86-64.so.2 (0x0000003080200000)

在未安装 Leptonica 的工作站上运行应用程序时会导致 OSError:

OSError: liblept.so.4: cannot open shared object file: No such file or directory

典型用例如下(tesseract 和 leptonica 库在同一个文件夹中):

import ctypes
import os
import sys

lang = 'eng'

os.putenv('TESSDATA_PREFIX', ".")
tessdata = os.environ.get('TESSDATA_PREFIX')
tess_libpath = "."
tess_libname = "libtesseract.so.3.0.2"
# tess_libname = "libtesseract302.dll" works in Windows, no need to add a leponica library file

os.environ["PATH"] += os.pathsep + tess_libpath
tesseract = None

try:
tesseract = ctypes.cdll.LoadLibrary(os.path.join(tess_libpath, tess_libname))
except OSError, err:
raise

class _TessBaseAPI(ctypes.Structure): pass
TessBaseAPI = ctypes.POINTER(_TessBaseAPI)
tesseract.TessBaseAPICreate.restype = TessBaseAPI
tesseract.TessBaseAPIDelete.restype = None
tesseract.TessBaseAPIDelete.argtypes = [TessBaseAPI]
tesseract.TessBaseAPIInit3.argtypes = [TessBaseAPI,
ctypes.c_char_p,
ctypes.c_char_p]
tesseract.TessBaseAPISetImage.restype = None
tesseract.TessBaseAPISetImage.argtypes = [TessBaseAPI,
ctypes.c_void_p,
ctypes.c_int,
ctypes.c_int,
ctypes.c_int,
ctypes.c_int]
tesseract.TessBaseAPIGetUTF8Text.restype = ctypes.c_char_p
tesseract.TessBaseAPIGetUTF8Text.argtypes = [TessBaseAPI]

我尝试在配置 Tesseract 时添加选项 --disable-shared --enable-static,但没有成功。

在我的例子中,目标操作系统是 CentOS 6.5,但我也希望能得到一般性的回答。

最佳答案

ldd 无法告诉您库中是否存在绝对路径。相反,它使用标准的共享库搜索路径并打印它找到的内容。

要检查加载是否也适用于不同的文件夹,试试这个:

> mkdir tmp
> cd tmp
> cp /usr/local/lib/liblept.so.4
> LD_LIBRARY_PATH=$PWD:$LD_LIBRARY_PATH ldd libtesseract.so.3.0.2

它现在应该显示 tmp 文件夹中的 liblept.so.4

关于python - 在 Linux 中构建可移植的 Tesseract OCR 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30644006/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com