diff --git a/ocrolib/common.py b/ocrolib/common.py index 614add07..fcd03dd1 100644 --- a/ocrolib/common.py +++ b/ocrolib/common.py @@ -621,8 +621,10 @@ def ocropus_find_file(fname, gz=True): possible_prefixes.append("/usr/local/share/ocropus") - possible_prefixes.append(os.path.join( - sysconfig.get_config_var("datarootdir"), "ocropus")) +# datarootdir is None in windows so don't add it to search list + if sysconfig.get_config_var("datarootdir") is not None: + possible_prefixes.append(os.path.join( + sysconfig.get_config_var("datarootdir"), "ocropus")) # Unique entries with preserved order in possible_prefixes @@ -765,37 +767,6 @@ def ustrg2unicode(u,lig=ligatures.lig): result += "<%d>"%value return result -### code for instantiation native components - -def pyconstruct(s): - """Constructs a Python object from a constructor, an expression - of the form x.y.z.name(args). This ensures that x.y.z is imported. - In the future, more forms of syntax may be accepted.""" - env = {} - if "(" not in s: - s += "()" - path = s[:s.find("(")] - if "." in path: - module = path[:path.rfind(".")] - print("import", module) - exec "import "+module in env - return eval(s,env) - -def mkpython(name): - """Tries to instantiate a Python class. Gives an error if it looks - like a Python class but can't be instantiated. Returns None if it - doesn't look like a Python class.""" - if name is None or len(name)==0: - return None - elif type(name) is not str: - return name() - elif name[0]=="=": - return pyconstruct(name[1:]) - elif "(" in name or "." in name: - return pyconstruct(name) - else: - return None - ################################################################ ### loading and saving components ################################################################ diff --git a/ocrolib/lstm.py b/ocrolib/lstm.py index 3d070465..cb3e05f2 100644 --- a/ocrolib/lstm.py +++ b/ocrolib/lstm.py @@ -35,7 +35,7 @@ from collections import defaultdict from ocrolib.exceptions import RecognitionError from ocrolib.edist import levenshtein -import nutils +import utils import unicodedata import sys from scipy.ndimage import measurements,filters @@ -92,17 +92,6 @@ def sumouter(us,vs,lo=-1.0,hi=1.0,out=None): result += outer(clip(u,lo,hi),v) return result -def sumprod(us,vs,lo=-1.0,hi=1.0,out=None): - """Sum the element-wise products of the `us` and `vs`. - Values are clipped into the range `[lo,hi]`. - This is mainly used for computing weight updates - in logistic regression layers.""" - assert len(us[0])==len(vs[0]) - result = out or zeros(len(us[0])) - for u,v in zip(us,vs): - result += clip(u,lo,hi)*v - return result - class Network: """General interface for networks. This mainly adds convenience functions for `predict` and `train`. @@ -472,13 +461,13 @@ def backward_py(n,N,ni,ns,na,deltas, sourceerr[t] += dot(gferr[t],WGF) sourceerr[t] += dot(goerr[t],WGO) sourceerr[t] += dot(cierr[t],WCI) - DWIP = nutils.sumprod(gierr[1:n],state[:n-1],out=DWIP) - DWFP = nutils.sumprod(gferr[1:n],state[:n-1],out=DWFP) - DWOP = nutils.sumprod(goerr[:n],state[:n],out=DWOP) - DWGI = nutils.sumouter(gierr[:n],source[:n],out=DWGI) - DWGF = nutils.sumouter(gferr[1:n],source[1:n],out=DWGF) - DWGO = nutils.sumouter(goerr[:n],source[:n],out=DWGO) - DWCI = nutils.sumouter(cierr[:n],source[:n],out=DWCI) + DWIP = utils.sumprod(gierr[1:n],state[:n-1],out=DWIP) + DWFP = utils.sumprod(gferr[1:n],state[:n-1],out=DWFP) + DWOP = utils.sumprod(goerr[:n],state[:n],out=DWOP) + DWGI = utils.sumouter(gierr[:n],source[:n],out=DWGI) + DWGF = utils.sumouter(gferr[1:n],source[1:n],out=DWGF) + DWGO = utils.sumouter(goerr[:n],source[:n],out=DWGO) + DWCI = utils.sumouter(cierr[:n],source[:n],out=DWCI) class LSTM(Network): """A standard LSTM network. This is a direct implementation of all the forward diff --git a/ocropus-rpred b/ocropus-rpred index 0e7944d8..1e0b576f 100755 --- a/ocropus-rpred +++ b/ocropus-rpred @@ -2,7 +2,6 @@ from __future__ import print_function - import traceback import codecs import os.path @@ -13,7 +12,6 @@ from collections import Counter from collections import OrderedDict as OD import json - import matplotlib.pyplot as plt import numpy as np from scipy.ndimage import measurements