【问题标题】:Pytesseract Failed loading language 'chi-sim'Pytesseract 加载语言“chi-sim”失败
【发布时间】:2021-07-17 13:05:28
【问题描述】:

我正在使用如下示例代码开发 python tesseract 包:

import pytesseract
from PIL import Image

tessdata_dir_config = "--tessdata-dir \"/opt/homebrew/Cellar/tesseract-lang/4.1.0/share/tessdata/\""
image = Image.open("dataset/test.jpeg")
text = pytesseract.image_to_string(image, lang = "chi-sim", config = tessdata_dir_config)
print(text)

我收到以下错误消息:

pytesseract.pytesseract.TesseractError: (1, 'Error opening data file /opt/homebrew/Cellar/tesseract-lang/4.1.0/share/tessdata/chi-sim.traineddata 请确保已设置 TESSDATA_PREFIX 环境变量到您的“tessdata”目录。加载语言“chi-sim”失败,Tesseract 无法加载任何语言!无法初始化 tesseract。')

据我了解,读取文件chi-sim.traineddata(代表简体中文)时出现错误,我将在下面解释我为解决此问题所做的尝试。

  • 我的开发环境是M1 macOS,我从Homebrew安装了tesseracttesseract-lang。我很确定上面指定的路径正是源文件所在的位置,因为当我调用时
print(pytesseract.get_languages(config = ""))

我打印了很长的语言列表,包括 chi-sim。

  • 另外,如果我们只使用英文而不是中文,下面的代码可以成功识别图片中的英文文本:
text = pytesseract.image_to_string(image)
  • 我尝试过以多种方式指定环境变量TESSDATA_PREFIX,包括:
  1. 在原始代码中使用config参数。

  2. 在 PyCharm 中添加全局环境变量。

  3. 在代码中添加以下行

os.environ["TESSDATA_PREFIX"] = "tesseract/4.1.1/share/tessdata/"
  1. 将以下行添加到终端中的bash_profile
export TESSDATA_PREFIX=/opt/homebrew/Cellar/tesseract-lang/4.1.0/share/tessdata/

但不幸的是,这些都不起作用。

  • 好像我的文件chi-sim.traineddata不知何故坏了,所以我直接从GitHub(https://github.com/tesseract-ocr/tessdata/blob/master/chi_sim.traineddata)下载了训练好的数据文件,点击右侧的“下载”按钮,将下载的文件放在tesseract-lang 和原始 tesseract 目录(eng.traineddata 所在的位置)。是的,我都试过了,但都不管用。

关于这个问题,有没有潜在的解决方案?

【问题讨论】:

  • 如果你在windows上,你是否为tesseract设置了环境路径?
  • 如果get_languages(config = "") 显示chi-sim 那么为什么要设置tessdata-dir?你试过不改变tessdata-dir吗?
  • 另外,您的 Mac OS 中的语言设置是什么? tesseract 的非英语系统语言曾经存在一些问题
  • 有问题(未发表评论),您可以在找到chi-sim.traineddata 的地方添加指向 GitHub 的链接 - 您可以描述您是如何下载它的。也许你以错误的方式下载它(即在text-mode而不是bytes-mode)或者你可能获得旧版本的文件 - 请参阅带有tessdata for 4.x的GitHub有tessdata for 3.x的链接
  • @seraph 嗯...这是一个很好的观点,因为我的设备的通用语言设置是 chi-sim。我稍后会检查它,如果有什么好的,我会更新这篇文章。

标签: python macos tesseract python-tesseract


【解决方案1】:

如果我使用lang="chi_sim"_ 而不是-,代码在Linux 上对我有效,因为从服务器下载的文件名称为chi_sim.traineddata,也使用_ 而不是-


如果我将文件重命名为chi-sim.traineddata,那么我可以使用lang="chi-sim"(使用- 而不是_

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 2019-06-07
    相关资源
    最近更新 更多