Я только что установил 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»; также преобразовали новые строки common.py с помощью dos2unix. Я не могу решить эту проблему. Если кто-то испытал подобные проблемы, любезно поделитесь.
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()
UPDATE: Привет, пожалуйста, обратите внимание, что я использовал родной GZIP Python, и это работает отлично. Спасибо, что указали это. Вот правильный синтаксис, который работает в Windows: {с gzip.GzipFile (fname, "rb") в качестве потока:}