我剛剛安裝了ocropus OCR,並在Windows 7計算機中安裝了所有依賴項。 (我正在使用32位Python 2.7)它似乎工作正常,但我無法加載默認的OCR模型:en-default.pyrnn.gz。 ,並收到Traceback。我使用的語法如下:Python cPickle無法加載OCR模型庫
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上正確的語法:{使用gzip.GzipFile(fname,「rb」)作爲流:}