Leptonica: reduce verbosity, more error trapping, more garbage collection
This commit is contained in:
+57
-25
@@ -38,6 +38,7 @@ lept = ffi.dlopen(find_library('lept'))
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
lept.setMsgSeverity(lept.L_SEVERITY_WARNING)
|
||||
|
||||
def stderr(*objs):
|
||||
"""Shorthand print to stderr."""
|
||||
@@ -143,7 +144,7 @@ class Pix:
|
||||
def __init__(self, pix):
|
||||
if not pix:
|
||||
raise ValueError('NULL pix')
|
||||
self._pix = ffi.gc(pix, Pix._pix_destroy)
|
||||
self._pix = ffi.gc(pix, Pix._destroy)
|
||||
|
||||
def __repr__(self):
|
||||
if self._pix:
|
||||
@@ -191,12 +192,18 @@ class Pix:
|
||||
cdata_bytes = ffi.new('char[]', state['data'])
|
||||
cdata_uint32 = ffi.cast('l_uint32 *', cdata_bytes)
|
||||
|
||||
pix = lept.pixDeserializeFromMemory(
|
||||
cdata_uint32, len(state['data']))
|
||||
pix = lept.pixDeserializeFromMemory(cdata_uint32, len(state['data']))
|
||||
Pix.__init__(self, pix)
|
||||
|
||||
def __eq__(self, other):
|
||||
return self.__getstate__() == other.__getstate__()
|
||||
if not isinstance(other, Pix):
|
||||
return NotImplemented
|
||||
same = ffi.new('l_int32 *', 0)
|
||||
with _LeptonicaErrorTrap():
|
||||
err = lept.pixEqual(self._pix, other._pix, same)
|
||||
if err:
|
||||
raise TypeError()
|
||||
return bool(same[0])
|
||||
|
||||
@property
|
||||
def width(self):
|
||||
@@ -488,26 +495,26 @@ class Pix:
|
||||
return Pix(lept.pixInvert(ffi.NULL, self._pix))
|
||||
|
||||
def locate_barcodes(self):
|
||||
pix = Pix(lept.pixConvertTo8(self._pix, 0))
|
||||
pixa_candidates = PixArray(lept.pixExtractBarcodes(pix._pix, 0))
|
||||
sarray = lept.pixReadBarcodes(pixa_candidates._pixa,
|
||||
lept.L_BF_ANY,
|
||||
lept.L_USE_WIDTHS,
|
||||
ffi.NULL,
|
||||
0)
|
||||
if not sarray:
|
||||
return
|
||||
for n in range(sarray[0].n):
|
||||
decoded = ffi.string(sarray[0].array[n]).decode()
|
||||
if decoded.strip() == '':
|
||||
continue
|
||||
box = pixa_candidates.get_box(n)
|
||||
left, top, right, bottom = box.x, box.y, box.x + box.w, box.y + box.h
|
||||
yield (decoded, (left, top, right, bottom))
|
||||
with _LeptonicaErrorTrap():
|
||||
pix = Pix(lept.pixConvertTo8(self._pix, 0))
|
||||
pixa_candidates = PixArray(lept.pixExtractBarcodes(pix._pix, 0))
|
||||
sarray = StringArray(lept.pixReadBarcodes(pixa_candidates._pixa,
|
||||
lept.L_BF_ANY,
|
||||
lept.L_USE_WIDTHS,
|
||||
ffi.NULL,
|
||||
0))
|
||||
for n, s in enumerate(sarray):
|
||||
decoded = s.decode()
|
||||
if s.strip() == '':
|
||||
continue
|
||||
box = pixa_candidates.get_box(n)
|
||||
left, top = box.x, box.y
|
||||
right, bottom = box.x + box.w, box.y + box.h
|
||||
yield (decoded, (left, top, right, bottom))
|
||||
|
||||
|
||||
@staticmethod
|
||||
def _pix_destroy(pix):
|
||||
def _destroy(pix):
|
||||
p_pix = ffi.new('PIX **', pix)
|
||||
lept.pixDestroy(p_pix)
|
||||
# print('pix destroy ' + repr(pix))
|
||||
@@ -559,7 +566,7 @@ class PixArray:
|
||||
def __init__(self, pixa):
|
||||
if not pixa:
|
||||
raise ValueError('NULL pixa')
|
||||
self._pixa = ffi.gc(pixa, PixArray._pixa_destroy)
|
||||
self._pixa = ffi.gc(pixa, PixArray._destroy)
|
||||
|
||||
def __len__(self):
|
||||
return self._pixa[0].n
|
||||
@@ -573,7 +580,7 @@ class PixArray:
|
||||
return Box(lept.pixaGetBox(self._pixa, n, lept.L_CLONE))
|
||||
|
||||
@staticmethod
|
||||
def _pixa_destroy(pixa):
|
||||
def _destroy(pixa):
|
||||
pp = ffi.new('PIXA **', pixa)
|
||||
lept.pixaDestroy(pp)
|
||||
|
||||
@@ -587,7 +594,7 @@ class Box:
|
||||
def __init__(self, box):
|
||||
if not box:
|
||||
raise ValueError('NULL box')
|
||||
self._box = ffi.gc(box, Box._box_destroy)
|
||||
self._box = ffi.gc(box, Box._destroy)
|
||||
|
||||
|
||||
def __repr__(self):
|
||||
@@ -613,7 +620,7 @@ class Box:
|
||||
return self._box.h
|
||||
|
||||
@staticmethod
|
||||
def _box_destroy(box):
|
||||
def _destroy(box):
|
||||
p_box = ffi.new('BOX **', box)
|
||||
lept.boxDestroy(p_box)
|
||||
|
||||
@@ -652,6 +659,31 @@ class BoxArray:
|
||||
lept.boxaDestroy(p_boxa)
|
||||
|
||||
|
||||
class StringArray:
|
||||
|
||||
def __init__(self, sarray):
|
||||
if not sarray:
|
||||
raise ValueError('NULL sarray')
|
||||
self._sarray = ffi.gc(sarray, StringArray._sarray_destroy)
|
||||
|
||||
def __len__(self):
|
||||
return self._sarray.n
|
||||
|
||||
def __getitem__(self, n):
|
||||
if 0 <= n < len(self):
|
||||
return ffi.string(self._sarray.array[n])
|
||||
raise IndexError(n)
|
||||
|
||||
def __iter__(self):
|
||||
for n in range(len(self)):
|
||||
yield self[n]
|
||||
|
||||
@staticmethod
|
||||
def _sarray_destroy(sarray):
|
||||
pp = ffi.new('SARRAY **', sarray)
|
||||
lept.sarrayDestroy(pp)
|
||||
|
||||
|
||||
@lru_cache(maxsize=1)
|
||||
def get_leptonica_version():
|
||||
"""Get Leptonica version string.
|
||||
|
||||
@@ -3,9 +3,9 @@ import _cffi_backend
|
||||
|
||||
ffi = _cffi_backend.FFI('ocrmypdf.lib._leptonica',
|
||||
_version = 0x2601,
|
||||
_types = b'\x00\x00\x01\x0D\x00\x01\x00\x03\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x01\x01\x03\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x01\x04\x03\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x01\x0B\x03\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x01\x05\x03\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x04\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x09\x03\x00\x00\x1A\x11\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x01\x11\x00\x00\x01\x03\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x0D\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x0D\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x0D\x01\x00\x00\x05\x03\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x0D\x01\x00\x00\x0D\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x13\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x10\x11\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x01\x19\x03\x00\x00\x1C\x01\x00\x00\x00\x0F\x00\x00\x13\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x01\x07\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x01\x07\x03\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x01\x07\x0D\x00\x00\x13\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x87\x11\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x01\x0A\x0D\x00\x00\x00\x0F\x00\x00\x5C\x0D\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x04\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x32\x03\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x9E\x11\x00\x00\x9E\x11\x00\x00\x9E\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x9E\x11\x00\x00\x9E\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x5C\x11\x00\x00\x5C\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x0D\x01\x00\x00\x07\x01\x00\x00\x5C\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x01\x02\x03\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x9E\x11\x00\x00\x9E\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x0D\x01\x00\x00\x1A\x11\x00\x00\x1A\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x01\x18\x03\x00\x00\x7D\x03\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x10\x11\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\xC2\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x10\x11\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x01\x16\x03\x00\x00\xDA\x11\x00\x00\x09\x11\x00\x00\x0D\x01\x00\x00\x00\x0F\x00\x01\x1C\x0D\x00\x00\x23\x11\x00\x00\x00\x0F\x00\x01\x1C\x0D\x00\x00\x04\x03\x00\x00\x00\x0F\x00\x01\x1C\x0D\x00\x00\xC2\x11\x00\x00\x00\x0F\x00\x01\x1C\x0D\x00\x00\x1A\x11\x00\x00\x00\x0F\x00\x01\x1C\x0D\x00\x00\x13\x03\x00\x00\x00\x0F\x00\x01\x1C\x0D\x00\x01\x1C\x03\x00\x00\x00\x0F\x00\x00\x00\x09\x00\x00\x01\x09\x00\x01\x03\x03\x00\x00\x02\x09\x00\x00\x03\x09\x00\x00\x05\x09\x00\x00\x04\x09\x00\x01\x08\x03\x00\x00\x06\x09\x00\x01\x0A\x03\x00\x01\x0B\x03\x00\x00\x02\x01\x00\x00\x0E\x01\x00\x00\x00\x0B\x00\x00\x01\x0B\x00\x00\x02\x0B\x00\x00\x03\x0B\x00\x00\x04\x0B\x00\x00\x0B\x01\x00\x00\x05\x01\x00\x00\x03\x01\x00\x01\x06\x03\x00\x01\x17\x03\x00\x00\x04\x01\x00\x01\x19\x03\x00\x00\x08\x01\x00\x00\x0C\x01\x00\x00\x06\x01\x00\x00\x00\x01',
|
||||
_globals = (b'\xFF\xFF\xFF\x0BL_BF_ANY',1,b'\xFF\xFF\xFF\x0BL_BF_CODABAR',9,b'\xFF\xFF\xFF\x0BL_BF_CODE128',2,b'\xFF\xFF\xFF\x0BL_BF_CODE2OF5',5,b'\xFF\xFF\xFF\x0BL_BF_CODE39',7,b'\xFF\xFF\xFF\x0BL_BF_CODE93',8,b'\xFF\xFF\xFF\x0BL_BF_CODEI2OF5',6,b'\xFF\xFF\xFF\x0BL_BF_EAN13',4,b'\xFF\xFF\xFF\x0BL_BF_EAN8',3,b'\xFF\xFF\xFF\x0BL_BF_UNKNOWN',0,b'\xFF\xFF\xFF\x0BL_BF_UPCA',10,b'\xFF\xFF\xFF\x0BL_CLONE',2,b'\xFF\xFF\xFF\x0BL_COPY',1,b'\xFF\xFF\xFF\x0BL_COPY_CLONE',3,b'\xFF\xFF\xFF\x0BL_DEFAULT_ENCODE',0,b'\xFF\xFF\xFF\x0BL_FLATE_ENCODE',3,b'\xFF\xFF\xFF\x0BL_G4_ENCODE',2,b'\xFF\xFF\xFF\x0BL_INSERT',0,b'\xFF\xFF\xFF\x0BL_JP2K_ENCODE',4,b'\xFF\xFF\xFF\x0BL_JPEG_ENCODE',1,b'\xFF\xFF\xFF\x0BL_NOCOPY',0,b'\xFF\xFF\xFF\x0BL_USE_WIDTHS',1,b'\xFF\xFF\xFF\x0BL_USE_WINDOWS',2,b'\xFF\xFF\xFF\x0BREMOVE_CMAP_BASED_ON_SRC',4,b'\xFF\xFF\xFF\x0BREMOVE_CMAP_TO_BINARY',0,b'\xFF\xFF\xFF\x0BREMOVE_CMAP_TO_FULL_COLOR',2,b'\xFF\xFF\xFF\x0BREMOVE_CMAP_TO_GRAYSCALE',1,b'\xFF\xFF\xFF\x0BREMOVE_CMAP_WITH_ALPHA',3,b'\x00\x00\x00\x23boxClone',0,b'\x00\x00\xEE\x23boxDestroy',0,b'\x00\x00\xF1\x23boxaDestroy',0,b'\x00\x00\x03\x23boxaGetBox',0,b'\x00\x00\x91\x23getLeptonicaVersion',0,b'\x00\x00\xF4\x23l_CIDataDestroy',0,b'\x00\x00\xDC\x23l_generateCIDataForPdf',0,b'\x00\x00\xFD\x23lept_free',0,b'\x00\x00\x93\x23makePixelSumTab8',0,b'\x00\x00\x29\x23pixAnd',0,b'\x00\x00\x36\x23pixBackgroundNorm',0,b'\x00\x00\x2E\x23pixCleanBackgroundToWhite',0,b'\x00\x00\x20\x23pixClipRectangle',0,b'\x00\x00\xC4\x23pixColorFraction',0,b'\x00\x00\x6C\x23pixColorMagnitude',0,b'\x00\x00\x1D\x23pixConvertRGBToLuminance',0,b'\x00\x00\x63\x23pixConvertTo8',0,b'\x00\x00\x9B\x23pixCorrelationBinary',0,b'\x00\x00\xB0\x23pixCountPixels',0,b'\x00\x00\x7B\x23pixDeserializeFromMemory',0,b'\x00\x00\x63\x23pixDeskew',0,b'\x00\x00\xF7\x23pixDestroy',0,b'\x00\x00\x1D\x23pixEndianByteSwapNew',0,b'\x00\x00\x7F\x23pixExtractBarcodes',0,b'\x00\x00\x08\x23pixFindPageForeground',0,b'\x00\x00\xAB\x23pixFindSkew',0,b'\x00\x00\x42\x23pixGammaTRC',0,b'\x00\x00\xBD\x23pixGenerateCIData',0,b'\x00\x00\xA0\x23pixGetAverageMaskedRGB',0,b'\x00\x00\x49\x23pixGlobalNormRGB',0,b'\x00\x00\x25\x23pixInvert',0,b'\x00\x00\x17\x23pixLocateBarcodes',0,b'\x00\x00\x67\x23pixMaskOverColorPixels',0,b'\x00\x00\xB5\x23pixNumSignificantGrayColors',0,b'\x00\x00\xCD\x23pixOtsuAdaptiveThreshold',0,b'\x00\x00\x51\x23pixOtsuThreshOnBackgroundNorm',0,b'\x00\x00\x83\x23pixProcessBarcodes',0,b'\x00\x00\x78\x23pixRead',0,b'\x00\x00\x8A\x23pixReadBarcodes',0,b'\x00\x00\x63\x23pixRemoveColormap',0,b'\x00\x00\x67\x23pixRemoveColormapGeneral',0,b'\x00\x00\x95\x23pixRenderBoxa',0,b'\x00\x00\x25\x23pixRotate180',0,b'\x00\x00\x63\x23pixRotateOrth',0,b'\x00\x00\x5E\x23pixScale',0,b'\x00\x00\xD7\x23pixSerializeToMemory',0,b'\x00\x00\xE2\x23pixWriteImpliedFormat',0,b'\x00\x00\xE8\x23pixWriteMemPng',0,b'\x00\x00\xFA\x23pixaDestroy',0,b'\x00\x00\x12\x23pixaGetBox',0,b'\x00\x00\x73\x23pixaGetPix',0),
|
||||
_struct_unions = ((b'\x00\x00\x01\x00\x00\x00\x00\x02Box',b'\x00\x00\x05\x11x',b'\x00\x00\x05\x11y',b'\x00\x00\x05\x11w',b'\x00\x00\x05\x11h',b'\x00\x01\x19\x11refcount'),(b'\x00\x00\x01\x01\x00\x00\x00\x02Boxa',b'\x00\x00\x05\x11n',b'\x00\x00\x05\x11nalloc',b'\x00\x01\x19\x11refcount',b'\x00\x00\x23\x11box'),(b'\x00\x00\x01\x03\x00\x00\x00\x02L_Compressed_Data',b'\x00\x00\x05\x11type',b'\x00\x01\x16\x11datacomp',b'\x00\x00\x7D\x11nbytescomp',b'\x00\x01\x0A\x11data85',b'\x00\x00\x7D\x11nbytes85',b'\x00\x01\x0A\x11cmapdata85',b'\x00\x01\x0A\x11cmapdatahex',b'\x00\x00\x05\x11ncolors',b'\x00\x00\x05\x11w',b'\x00\x00\x05\x11h',b'\x00\x00\x05\x11bps',b'\x00\x00\x05\x11spp',b'\x00\x00\x05\x11minisblack',b'\x00\x00\x05\x11predictor',b'\x00\x00\x7D\x11nbytes',b'\x00\x00\x05\x11res'),(b'\x00\x00\x01\x04\x00\x00\x00\x02Pix',b'\x00\x01\x19\x11w',b'\x00\x01\x19\x11h',b'\x00\x01\x19\x11d',b'\x00\x01\x19\x11spp',b'\x00\x01\x19\x11wpl',b'\x00\x01\x19\x11refcount',b'\x00\x00\x05\x11xres',b'\x00\x00\x05\x11yres',b'\x00\x00\x05\x11informat',b'\x00\x00\x05\x11special',b'\x00\x01\x0A\x11text',b'\x00\x01\x15\x11colormap',b'\x00\x01\x18\x11data'),(b'\x00\x00\x01\x06\x00\x00\x00\x02PixColormap',b'\x00\x00\xFE\x11array',b'\x00\x00\x05\x11depth',b'\x00\x00\x05\x11nalloc',b'\x00\x00\x05\x11n'),(b'\x00\x00\x01\x05\x00\x00\x00\x02Pixa',b'\x00\x00\x05\x11n',b'\x00\x00\x05\x11nalloc',b'\x00\x01\x19\x11refcount',b'\x00\x00\x1A\x11pix',b'\x00\x00\x04\x11boxa'),(b'\x00\x00\x01\x08\x00\x00\x00\x02Sarray',b'\x00\x00\x05\x11nalloc',b'\x00\x00\x05\x11n',b'\x00\x00\x05\x11refcount',b'\x00\x01\x09\x11array')),
|
||||
_enums = (b'\x00\x00\x01\x0D\x00\x00\x00\x16$1\x00L_DEFAULT_ENCODE,L_JPEG_ENCODE,L_G4_ENCODE,L_FLATE_ENCODE,L_JP2K_ENCODE',b'\x00\x00\x01\x0E\x00\x00\x00\x16$2\x00REMOVE_CMAP_TO_BINARY,REMOVE_CMAP_TO_GRAYSCALE,REMOVE_CMAP_TO_FULL_COLOR,REMOVE_CMAP_WITH_ALPHA,REMOVE_CMAP_BASED_ON_SRC',b'\x00\x00\x01\x0F\x00\x00\x00\x16$3\x00L_NOCOPY,L_INSERT,L_COPY,L_CLONE,L_COPY_CLONE',b'\x00\x00\x01\x10\x00\x00\x00\x16$4\x00L_USE_WIDTHS,L_USE_WINDOWS',b'\x00\x00\x01\x11\x00\x00\x00\x16$5\x00L_BF_UNKNOWN,L_BF_ANY,L_BF_CODE128,L_BF_EAN8,L_BF_EAN13,L_BF_CODE2OF5,L_BF_CODEI2OF5,L_BF_CODE39,L_BF_CODE93,L_BF_CODABAR,L_BF_UPCA'),
|
||||
_typenames = (b'\x00\x00\x01\x00BOX',b'\x00\x00\x01\x01BOXA',b'\x00\x00\x01\x03L_COMP_DATA',b'\x00\x00\x01\x04PIX',b'\x00\x00\x01\x05PIXA',b'\x00\x00\x01\x06PIXCMAP',b'\x00\x00\x01\x08SARRAY',b'\x00\x00\x00\x32l_float32',b'\x00\x00\x01\x0Cl_float64',b'\x00\x00\x01\x13l_int16',b'\x00\x00\x00\x05l_int32',b'\x00\x00\x01\x12l_int64',b'\x00\x00\x01\x14l_int8',b'\x00\x00\x00\x05l_ok',b'\x00\x00\x01\x1Bl_uint16',b'\x00\x00\x01\x19l_uint32',b'\x00\x00\x01\x1Al_uint64',b'\x00\x00\x01\x17l_uint8'),
|
||||
_types = b'\x00\x00\x01\x0D\x00\x01\x0B\x03\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x01\x0C\x03\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x01\x0F\x03\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x01\x16\x03\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x01\x10\x03\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x04\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x09\x03\x00\x00\x1A\x11\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x01\x11\x00\x00\x01\x03\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x0D\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x0D\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x0D\x01\x00\x00\x05\x03\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x0D\x01\x00\x00\x0D\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x13\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x00\x10\x11\x00\x00\x00\x0F\x00\x00\x09\x0D\x00\x01\x25\x03\x00\x00\x1C\x01\x00\x00\x00\x0F\x00\x00\x13\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x01\x12\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x01\x12\x03\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x01\x12\x0D\x00\x00\x13\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x87\x11\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x01\x15\x0D\x00\x00\x00\x0F\x00\x00\x5C\x0D\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x04\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x32\x03\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x5C\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x9E\x11\x00\x00\x9E\x11\x00\x00\x9E\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x9E\x11\x00\x00\x9E\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x5C\x11\x00\x00\x5C\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x0D\x01\x00\x00\x07\x01\x00\x00\x5C\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x01\x0D\x03\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x9E\x11\x00\x00\x9E\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x0D\x01\x00\x00\x1A\x11\x00\x00\x1A\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x09\x11\x00\x01\x24\x03\x00\x00\x7D\x03\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x10\x11\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\xC7\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x10\x11\x00\x00\x09\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x01\x22\x03\x00\x00\xDF\x11\x00\x00\x09\x11\x00\x00\x0D\x01\x00\x00\x00\x0F\x00\x01\x28\x0D\x00\x00\x23\x11\x00\x00\x00\x0F\x00\x01\x28\x0D\x00\x00\x04\x03\x00\x00\x00\x0F\x00\x01\x28\x0D\x00\x00\xC7\x11\x00\x00\x00\x0F\x00\x01\x28\x0D\x00\x00\x1A\x11\x00\x00\x00\x0F\x00\x01\x28\x0D\x00\x00\x13\x03\x00\x00\x00\x0F\x00\x01\x28\x0D\x00\x00\x87\x11\x00\x00\x00\x0F\x00\x01\x28\x0D\x00\x01\x28\x03\x00\x00\x00\x0F\x00\x00\x00\x09\x00\x00\x01\x09\x00\x01\x0E\x03\x00\x00\x02\x09\x00\x00\x03\x09\x00\x00\x05\x09\x00\x00\x04\x09\x00\x01\x13\x03\x00\x00\x06\x09\x00\x01\x15\x03\x00\x01\x16\x03\x00\x00\x02\x01\x00\x00\x0E\x01\x00\x00\x00\x0B\x00\x00\x01\x0B\x00\x00\x02\x0B\x00\x00\x03\x0B\x00\x00\x04\x0B\x00\x00\x05\x0B\x00\x00\x0B\x01\x00\x00\x05\x01\x00\x00\x03\x01\x00\x01\x11\x03\x00\x01\x23\x03\x00\x00\x04\x01\x00\x01\x25\x03\x00\x00\x08\x01\x00\x00\x0C\x01\x00\x00\x06\x01\x00\x00\x00\x01',
|
||||
_globals = (b'\xFF\xFF\xFF\x0BL_BF_ANY',1,b'\xFF\xFF\xFF\x0BL_BF_CODABAR',9,b'\xFF\xFF\xFF\x0BL_BF_CODE128',2,b'\xFF\xFF\xFF\x0BL_BF_CODE2OF5',5,b'\xFF\xFF\xFF\x0BL_BF_CODE39',7,b'\xFF\xFF\xFF\x0BL_BF_CODE93',8,b'\xFF\xFF\xFF\x0BL_BF_CODEI2OF5',6,b'\xFF\xFF\xFF\x0BL_BF_EAN13',4,b'\xFF\xFF\xFF\x0BL_BF_EAN8',3,b'\xFF\xFF\xFF\x0BL_BF_UNKNOWN',0,b'\xFF\xFF\xFF\x0BL_BF_UPCA',10,b'\xFF\xFF\xFF\x0BL_CLONE',2,b'\xFF\xFF\xFF\x0BL_COPY',1,b'\xFF\xFF\xFF\x0BL_COPY_CLONE',3,b'\xFF\xFF\xFF\x0BL_DEFAULT_ENCODE',0,b'\xFF\xFF\xFF\x0BL_FLATE_ENCODE',3,b'\xFF\xFF\xFF\x0BL_G4_ENCODE',2,b'\xFF\xFF\xFF\x0BL_INSERT',0,b'\xFF\xFF\xFF\x0BL_JP2K_ENCODE',4,b'\xFF\xFF\xFF\x0BL_JPEG_ENCODE',1,b'\xFF\xFF\xFF\x0BL_NOCOPY',0,b'\xFF\xFF\xFF\x0BL_SEVERITY_ALL',1,b'\xFF\xFF\xFF\x0BL_SEVERITY_DEBUG',2,b'\xFF\xFF\xFF\x0BL_SEVERITY_ERROR',5,b'\xFF\xFF\xFF\x0BL_SEVERITY_EXTERNAL',0,b'\xFF\xFF\xFF\x0BL_SEVERITY_INFO',3,b'\xFF\xFF\xFF\x0BL_SEVERITY_NONE',6,b'\xFF\xFF\xFF\x0BL_SEVERITY_WARNING',4,b'\xFF\xFF\xFF\x0BL_USE_WIDTHS',1,b'\xFF\xFF\xFF\x0BL_USE_WINDOWS',2,b'\xFF\xFF\xFF\x0BREMOVE_CMAP_BASED_ON_SRC',4,b'\xFF\xFF\xFF\x0BREMOVE_CMAP_TO_BINARY',0,b'\xFF\xFF\xFF\x0BREMOVE_CMAP_TO_FULL_COLOR',2,b'\xFF\xFF\xFF\x0BREMOVE_CMAP_TO_GRAYSCALE',1,b'\xFF\xFF\xFF\x0BREMOVE_CMAP_WITH_ALPHA',3,b'\x00\x00\x00\x23boxClone',0,b'\x00\x00\xF6\x23boxDestroy',0,b'\x00\x00\xF9\x23boxaDestroy',0,b'\x00\x00\x03\x23boxaGetBox',0,b'\x00\x00\x91\x23getLeptonicaVersion',0,b'\x00\x00\xFC\x23l_CIDataDestroy',0,b'\x00\x00\xE1\x23l_generateCIDataForPdf',0,b'\x00\x01\x08\x23lept_free',0,b'\x00\x00\x93\x23makePixelSumTab8',0,b'\x00\x00\x29\x23pixAnd',0,b'\x00\x00\x36\x23pixBackgroundNorm',0,b'\x00\x00\x2E\x23pixCleanBackgroundToWhite',0,b'\x00\x00\x20\x23pixClipRectangle',0,b'\x00\x00\xC9\x23pixColorFraction',0,b'\x00\x00\x6C\x23pixColorMagnitude',0,b'\x00\x00\x1D\x23pixConvertRGBToLuminance',0,b'\x00\x00\x63\x23pixConvertTo8',0,b'\x00\x00\x9B\x23pixCorrelationBinary',0,b'\x00\x00\xB5\x23pixCountPixels',0,b'\x00\x00\x7B\x23pixDeserializeFromMemory',0,b'\x00\x00\x63\x23pixDeskew',0,b'\x00\x00\xFF\x23pixDestroy',0,b'\x00\x00\x1D\x23pixEndianByteSwapNew',0,b'\x00\x00\xA0\x23pixEqual',0,b'\x00\x00\x7F\x23pixExtractBarcodes',0,b'\x00\x00\x08\x23pixFindPageForeground',0,b'\x00\x00\xB0\x23pixFindSkew',0,b'\x00\x00\x42\x23pixGammaTRC',0,b'\x00\x00\xC2\x23pixGenerateCIData',0,b'\x00\x00\xA5\x23pixGetAverageMaskedRGB',0,b'\x00\x00\x49\x23pixGlobalNormRGB',0,b'\x00\x00\x25\x23pixInvert',0,b'\x00\x00\x17\x23pixLocateBarcodes',0,b'\x00\x00\x67\x23pixMaskOverColorPixels',0,b'\x00\x00\xBA\x23pixNumSignificantGrayColors',0,b'\x00\x00\xD2\x23pixOtsuAdaptiveThreshold',0,b'\x00\x00\x51\x23pixOtsuThreshOnBackgroundNorm',0,b'\x00\x00\x83\x23pixProcessBarcodes',0,b'\x00\x00\x78\x23pixRead',0,b'\x00\x00\x8A\x23pixReadBarcodes',0,b'\x00\x00\x63\x23pixRemoveColormap',0,b'\x00\x00\x67\x23pixRemoveColormapGeneral',0,b'\x00\x00\x95\x23pixRenderBoxa',0,b'\x00\x00\x25\x23pixRotate180',0,b'\x00\x00\x63\x23pixRotateOrth',0,b'\x00\x00\x5E\x23pixScale',0,b'\x00\x00\xDC\x23pixSerializeToMemory',0,b'\x00\x00\xE7\x23pixWriteImpliedFormat',0,b'\x00\x00\xF0\x23pixWriteMemPng',0,b'\x00\x01\x02\x23pixaDestroy',0,b'\x00\x00\x12\x23pixaGetBox',0,b'\x00\x00\x73\x23pixaGetPix',0,b'\x00\x01\x05\x23sarrayDestroy',0,b'\x00\x00\xED\x23setMsgSeverity',0),
|
||||
_struct_unions = ((b'\x00\x00\x01\x0B\x00\x00\x00\x02Box',b'\x00\x00\x05\x11x',b'\x00\x00\x05\x11y',b'\x00\x00\x05\x11w',b'\x00\x00\x05\x11h',b'\x00\x01\x25\x11refcount'),(b'\x00\x00\x01\x0C\x00\x00\x00\x02Boxa',b'\x00\x00\x05\x11n',b'\x00\x00\x05\x11nalloc',b'\x00\x01\x25\x11refcount',b'\x00\x00\x23\x11box'),(b'\x00\x00\x01\x0E\x00\x00\x00\x02L_Compressed_Data',b'\x00\x00\x05\x11type',b'\x00\x01\x22\x11datacomp',b'\x00\x00\x7D\x11nbytescomp',b'\x00\x01\x15\x11data85',b'\x00\x00\x7D\x11nbytes85',b'\x00\x01\x15\x11cmapdata85',b'\x00\x01\x15\x11cmapdatahex',b'\x00\x00\x05\x11ncolors',b'\x00\x00\x05\x11w',b'\x00\x00\x05\x11h',b'\x00\x00\x05\x11bps',b'\x00\x00\x05\x11spp',b'\x00\x00\x05\x11minisblack',b'\x00\x00\x05\x11predictor',b'\x00\x00\x7D\x11nbytes',b'\x00\x00\x05\x11res'),(b'\x00\x00\x01\x0F\x00\x00\x00\x02Pix',b'\x00\x01\x25\x11w',b'\x00\x01\x25\x11h',b'\x00\x01\x25\x11d',b'\x00\x01\x25\x11spp',b'\x00\x01\x25\x11wpl',b'\x00\x01\x25\x11refcount',b'\x00\x00\x05\x11xres',b'\x00\x00\x05\x11yres',b'\x00\x00\x05\x11informat',b'\x00\x00\x05\x11special',b'\x00\x01\x15\x11text',b'\x00\x01\x21\x11colormap',b'\x00\x01\x24\x11data'),(b'\x00\x00\x01\x11\x00\x00\x00\x02PixColormap',b'\x00\x01\x09\x11array',b'\x00\x00\x05\x11depth',b'\x00\x00\x05\x11nalloc',b'\x00\x00\x05\x11n'),(b'\x00\x00\x01\x10\x00\x00\x00\x02Pixa',b'\x00\x00\x05\x11n',b'\x00\x00\x05\x11nalloc',b'\x00\x01\x25\x11refcount',b'\x00\x00\x1A\x11pix',b'\x00\x00\x04\x11boxa'),(b'\x00\x00\x01\x13\x00\x00\x00\x02Sarray',b'\x00\x00\x05\x11nalloc',b'\x00\x00\x05\x11n',b'\x00\x00\x05\x11refcount',b'\x00\x01\x14\x11array')),
|
||||
_enums = (b'\x00\x00\x01\x18\x00\x00\x00\x16$1\x00L_DEFAULT_ENCODE,L_JPEG_ENCODE,L_G4_ENCODE,L_FLATE_ENCODE,L_JP2K_ENCODE',b'\x00\x00\x01\x19\x00\x00\x00\x16$2\x00REMOVE_CMAP_TO_BINARY,REMOVE_CMAP_TO_GRAYSCALE,REMOVE_CMAP_TO_FULL_COLOR,REMOVE_CMAP_WITH_ALPHA,REMOVE_CMAP_BASED_ON_SRC',b'\x00\x00\x01\x1A\x00\x00\x00\x16$3\x00L_NOCOPY,L_INSERT,L_COPY,L_CLONE,L_COPY_CLONE',b'\x00\x00\x01\x1B\x00\x00\x00\x16$4\x00L_USE_WIDTHS,L_USE_WINDOWS',b'\x00\x00\x01\x1C\x00\x00\x00\x16$5\x00L_BF_UNKNOWN,L_BF_ANY,L_BF_CODE128,L_BF_EAN8,L_BF_EAN13,L_BF_CODE2OF5,L_BF_CODEI2OF5,L_BF_CODE39,L_BF_CODE93,L_BF_CODABAR,L_BF_UPCA',b'\x00\x00\x01\x1D\x00\x00\x00\x16$6\x00L_SEVERITY_EXTERNAL,L_SEVERITY_ALL,L_SEVERITY_DEBUG,L_SEVERITY_INFO,L_SEVERITY_WARNING,L_SEVERITY_ERROR,L_SEVERITY_NONE'),
|
||||
_typenames = (b'\x00\x00\x01\x0BBOX',b'\x00\x00\x01\x0CBOXA',b'\x00\x00\x01\x0EL_COMP_DATA',b'\x00\x00\x01\x0FPIX',b'\x00\x00\x01\x10PIXA',b'\x00\x00\x01\x11PIXCMAP',b'\x00\x00\x01\x13SARRAY',b'\x00\x00\x00\x32l_float32',b'\x00\x00\x01\x17l_float64',b'\x00\x00\x01\x1Fl_int16',b'\x00\x00\x00\x05l_int32',b'\x00\x00\x01\x1El_int64',b'\x00\x00\x01\x20l_int8',b'\x00\x00\x00\x05l_ok',b'\x00\x00\x01\x27l_uint16',b'\x00\x00\x01\x25l_uint32',b'\x00\x00\x01\x26l_uint64',b'\x00\x00\x01\x23l_uint8'),
|
||||
)
|
||||
|
||||
@@ -174,6 +174,16 @@ enum {
|
||||
L_BF_UPCA = 10 /*!< decode with UPC A format */
|
||||
};
|
||||
|
||||
enum {
|
||||
L_SEVERITY_EXTERNAL = 0, /* Get the severity from the environment */
|
||||
L_SEVERITY_ALL = 1, /* Lowest severity: print all messages */
|
||||
L_SEVERITY_DEBUG = 2, /* Print debugging and higher messages */
|
||||
L_SEVERITY_INFO = 3, /* Print informational and higher messages */
|
||||
L_SEVERITY_WARNING = 4, /* Print warning and higher messages */
|
||||
L_SEVERITY_ERROR = 5, /* Print error and higher messages */
|
||||
L_SEVERITY_NONE = 6 /* Highest severity: print no messages */
|
||||
};
|
||||
|
||||
""")
|
||||
|
||||
ffibuilder.cdef("""
|
||||
@@ -189,6 +199,11 @@ pixWriteMemPng(l_uint8 **pdata,
|
||||
|
||||
void pixDestroy ( PIX **ppix );
|
||||
|
||||
l_ok
|
||||
pixEqual(PIX *pix1,
|
||||
PIX *pix2,
|
||||
l_int32 *psame);
|
||||
|
||||
PIX *
|
||||
pixEndianByteSwapNew(PIX *pixs);
|
||||
|
||||
@@ -401,8 +416,14 @@ pixRenderBoxa ( PIX *pix, BOXA *boxa, l_int32 width, l_int32 op );
|
||||
void
|
||||
l_CIDataDestroy(L_COMP_DATA **pcid);
|
||||
|
||||
void
|
||||
sarrayDestroy(SARRAY **psa);
|
||||
|
||||
void
|
||||
lept_free(void *ptr);
|
||||
|
||||
l_int32
|
||||
setMsgSeverity(l_int32 newsev);
|
||||
""")
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user