gpt4 book ai didi

Python cPickle 无法加载 OCR 模型库

转载 作者:太空宇宙 更新时间:2023-11-04 05:39:40 24 4
gpt4 key购买 nike

我刚刚在我的 Windows 7 机器上安装了带有所有依赖项的 ocropus OCR。 (我使用的是 32 位 python 2.7)它似乎工作正常,只是我无法加载默认的 OCR 模型:en-default.pyrnn.gz。 ,并接收回溯。我正在使用以下语法:

python ocropus-rpred -m en-default.pyrnn.gz book\0001\*.png

这里是错误

INFO: #inputs47
# loading object /usr/local/share/ocropus/en-default.pyrnn.gz
Traceback (most recent call last):
File "ocropus-rpred" line 109, in <module>
network = ocrolib.load_object(args.model,verbose=1)
File "C:\anaconda32\lib\site-packages\ocrolib\common.py", line 513, in load_object
return unpickler.load()
EOFError

我检查过文件不为空;还仔细检查了启用的二进制模式标志,即“wb”和“rb”;还使用 dos2unix 转换了 common.py 的换行符。我无法解决这个问题。如果有人遇到过类似的问题,请分享。

import cPickle
import gzip

def save_object(fname,obj,zip=0):
if zip==0 and fname.endswith(".gz"):
zip = 1
if zip>0:
# with gzip.GzipFile(fname,"wb") as stream:
with os.popen("gzip -9 > '%s'"%fname,"wb") as stream:
cPickle.dump(obj,stream,2)
else:
with open(fname,"wb") as stream:
cPickle.dump(obj,stream,2)

def unpickle_find_global(mname,cname):
if mname=="lstm.lstm":
return getattr(lstm,cname)
if not mname in sys.modules.keys():
exec "import "+mname
return getattr(sys.modules[mname],cname)

def load_object(fname,zip=0,nofind=0,verbose=0):
"""Loads an object from disk. By default, this handles zipped files
and searches in the usual places for OCRopus. It also handles some
class names that have changed."""
if not nofind:
fname = ocropus_find_file(fname)
if verbose:
print "# loading object",fname
if zip==0 and fname.endswith(".gz"):
zip = 1
if zip>0:
# with gzip.GzipFile(fname,"rb") as stream:
with os.popen("gunzip < '%s'"%fname,"rb") as stream:
unpickler = cPickle.Unpickler(stream)
unpickler.find_global = unpickle_find_global
return unpickler.load()
else:
with open(fname,"rb") as stream:
unpickler = cPickle.Unpickler(stream)
unpickler.find_global = unpickle_find_global
return unpickler.load()

更新:您好,请注意我使用了 Python 的原生 gzip,它运行良好。谢谢你指出这一点。以下是适用于 Windows 的正确语法:{with gzip.GzipFile(fname,"rb") as stream:}

最佳答案

您对 gunzip 的使用(在 load_object 函数中)不正确。除非传递了 -c 参数,否则 gunzip 将解压缩的数据写入一个新文件,不是 到它的标准输出(这就是你看起来的样子试图做)。

因此,它不会向其标准输出写入任何内容,并且您的 stream 变量不包含任何数据,因此会出现 EOFError

一个快速的修复方法是更改​​您的 gunzip 命令行,为其提供 -c 参数。

更多信息在这里:http://linux.die.net/man/1/gzip

也就是说,您为什么还要花钱使用 gunzip 来解压缩您的数据? Python 的内置 gzip 模块应该可以毫无问题地处理这个问题。

关于Python cPickle 无法加载 OCR 模型库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34372701/

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