如何使用 python tesseract 设置仅初始化参数?

Posted

技术标签:

【中文标题】如何使用 python tesseract 设置仅初始化参数?【英文标题】:How to set init only parameters with python tesseract? 【发布时间】:2015-12-08 07:45:37 【问题描述】:

我正在尝试使用 python-tesseract 包装器设置一些 Tesseract 参数,但对于 Init Only 参数我无法这样做。

我一直在阅读 Tesseract 文档,看来我必须使用 Init() 来设置这些。这就是 setVariable 文档所说的:

仅适用于非初始化变量 *(初始化变量应传递给 Init())。

所以 Init() 函数有这个签名:

const char *    datapath,
const char *    language,
OcrEngineMode   oem,
char **     configs,
int     configs_size,
const GenericVector< STRING > *     vars_vec,
const GenericVector< STRING > *     vars_values,
bool    set_only_non_debug_params

我的代码如下:

import tesseract

configVec =     ['user_words_suffix',   'load_system_dawg',     'load_freq_dawg']
configValues =  ['brands',              '0',                    '0']

api = tesseract.TessBaseAPI()
api.Init(".","eng",tesseract.OEM_TESSERACT_ONLY, None, 0, configVec, configValues, False)
api.SetPageSegMode(tesseract.PSM_AUTO_OSD)
api.SetVariable("tessedit_char_whitelist", "€$0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,.\"-/+%")

问题是我收到以下错误:

NotImplementedError: Wrong number or type of arguments for overloaded function 'TessBaseAPI_Init'.
  Possible C/C++ prototypes are:
    tesseract::TessBaseAPI::Init(char const *,char const *,tesseract::OcrEngineMode,char **,int,GenericVector< STRING > const *,GenericVector< STRING > const *,bool)

问题与那些 GenericVectors 有关。如果我改用这一行:

api.Init(".","eng",tesseract.OEM_TESSERACT_ONLY, None, 0, None, None, False)

它有效。所以问题是那些 GenericVectors。如何将正确的参数传递给 Init()?

还有其他方法可以在代码中设置init only参数吗? 我可以使用这些参数从代码中加载配置文件吗?

感谢您的宝贵时间,非常感谢您的帮助。

【问题讨论】:

【参考方案1】:

对于直接与 API 交互的场景,我执行了以下操作:

# This should be specified in the cffi.cdef
BOOL TessBaseAPISetVariable(TessBaseAPI *handle, const char *name, const char *value);

# This should be called afterwards, outside the cdef
# baseapi.h - Params (aka variables) must be done after init line above
# tesseractclass.h - Has list of settable variables like tessedit_char_whitelist
foundVariableName = libtess.TessBaseAPISetVariable(api, 'tessedit_char_whitelist'.encode(), 'ABFGJKLMNOPRSTYZ1234567890/.,-+ |\\'.encode())
print(foundVariableName) # returns 1 is successfully found, 0 if variable name not found

【讨论】:

以上是关于如何使用 python tesseract 设置仅初始化参数?的主要内容,如果未能解决你的问题,请参考以下文章

pytesseract 仅使用 tesseract 4.0 数字不起作用

如何仅在 Tesseract C# 中捕获数字

在 Tesseract 上获取文本方向 - Python API

如何在 python-tesseract 中设置 tessedit_write_images?

如何在 Python 中使用 tesseract 获得图像中最大的文本?

如何使用 python-tesseract 获取 Hocr 输出