From 64c9ede979059f580a1f02f0dbad84e943e2e4cc Mon Sep 17 00:00:00 2001 From: "James R. Barlow" Date: Wed, 17 Oct 2018 23:46:53 -0700 Subject: [PATCH] leptonica: barcodes, BOXA --- src/ocrmypdf/leptonica.py | 42 +++++++++++++++++++++++++++ src/ocrmypdf/lib/_leptonica.py | 10 +++---- src/ocrmypdf/lib/compile_leptonica.py | 34 +++++++++++++++++----- 3 files changed, 73 insertions(+), 13 deletions(-) diff --git a/src/ocrmypdf/leptonica.py b/src/ocrmypdf/leptonica.py index 436281d7..6d382795 100644 --- a/src/ocrmypdf/leptonica.py +++ b/src/ocrmypdf/leptonica.py @@ -485,6 +485,16 @@ class Pix: def invert(self): return Pix(lept.pixInvert(ffi.NULL, self._pix)) + def locate_barcodes(self, threshold=20): + p_mask = ffi.new('PIX **') + with _LeptonicaErrorTrap(): + result = lept.pixLocateBarcodes(self._pix, threshold, ffi.NULL, + p_mask) + if result == ffi.NULL: + return None, None + return BoxArray(result), Pix(p_mask[0]) + + @staticmethod def _pix_destroy(pix): p_pix = ffi.new('PIX **', pix) @@ -569,6 +579,38 @@ class Box: lept.boxDestroy(p_box) +class BoxArray: + """Wrapper around Leptonica's BOXA (Array of BOX) objects.""" + + def __init__(self, boxa): + self._boxa = ffi.gc(boxa, BoxArray._boxa_destroy) + + def __repr__(self): + if not self._boxa: + return '' + boxes = (repr(box) for box in self) + return '' + + def __iter__(self): + for n in range(len(self)): + yield self[n] + + def __len__(self): + return self._boxa.n + + def __getitem__(self, n): + if not isinstance(n, int): + raise TypeError('list indices must be integers') + if 0 <= n < len(self): + return Box(lept.boxClone(self._boxa.box[n])) + raise IndexError(n) + + @staticmethod + def _boxa_destroy(boxa): + p_boxa = ffi.new('BOXA **', boxa) + lept.boxaDestroy(p_boxa) + + @lru_cache(maxsize=1) def get_leptonica_version(): """Get Leptonica version string. diff --git a/src/ocrmypdf/lib/_leptonica.py b/src/ocrmypdf/lib/_leptonica.py index b2611d5b..e4bbc59b 100644 --- a/src/ocrmypdf/lib/_leptonica.py +++ b/src/ocrmypdf/lib/_leptonica.py @@ -3,9 +3,9 @@ import _cffi_backend ffi = _cffi_backend.FFI('ocrmypdf.lib._leptonica', _version = 0x2601, - _types = b'\x00\x00\x0F\x0D\x00\x00\xCD\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\x00\xD0\x03\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\xCA\x03\x00\x00\x0F\x03\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x0D\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x01\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\x01\x0D\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x0D\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x01\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\x02\x03\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x0D\x01\x00\x00\x0D\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x01\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x08\x11\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\xDC\x03\x00\x00\x1C\x01\x00\x00\x00\x0F\x00\x00\xCF\x0D\x00\x00\x00\x0F\x00\x00\x49\x0D\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x1F\x03\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\x01\x11\x00\x00\x01\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x6E\x11\x00\x00\x6E\x11\x00\x00\x6E\x11\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\x01\x11\x00\x00\x6E\x11\x00\x00\x6E\x11\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\x01\x11\x00\x00\x49\x11\x00\x00\x49\x11\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\x01\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x0D\x01\x00\x00\x07\x01\x00\x00\x49\x11\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\x01\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\xCB\x03\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\x01\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x6E\x11\x00\x00\x6E\x11\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\x01\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x0D\x01\x00\x00\x01\x03\x00\x00\xA4\x11\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\x01\x11\x00\x00\xDB\x03\x00\x00\x65\x03\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\x08\x11\x00\x00\x01\x11\x00\x00\x07\x01\x00\x00\x92\x11\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\x08\x11\x00\x00\x01\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x02\x0D\x00\x00\xD9\x03\x00\x00\xAA\x11\x00\x00\x01\x11\x00\x00\x0D\x01\x00\x00\x00\x0F\x00\x00\xDF\x0D\x00\x00\x10\x11\x00\x00\x00\x0F\x00\x00\xDF\x0D\x00\x00\x92\x11\x00\x00\x00\x0F\x00\x00\xDF\x0D\x00\x00\xA4\x11\x00\x00\x00\x0F\x00\x00\xDF\x0D\x00\x00\xDF\x03\x00\x00\x00\x0F\x00\x00\x00\x09\x00\x00\xCC\x03\x00\x00\x01\x09\x00\x00\x02\x09\x00\x00\x03\x09\x00\x00\xD0\x03\x00\x00\x02\x01\x00\x00\x0E\x01\x00\x00\x00\x0B\x00\x00\x01\x0B\x00\x00\x02\x0B\x00\x00\x0B\x01\x00\x00\x05\x01\x00\x00\x03\x01\x00\x00\xCE\x03\x00\x00\xDA\x03\x00\x00\x04\x01\x00\x00\xDC\x03\x00\x00\x08\x01\x00\x00\x0C\x01\x00\x00\x06\x01\x00\x00\x00\x01', - _globals = (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\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\xBE\x23boxDestroy',0,b'\x00\x00\x67\x23getLeptonicaVersion',0,b'\x00\x00\xC1\x23l_CIDataDestroy',0,b'\x00\x00\xAC\x23l_generateCIDataForPdf',0,b'\x00\x00\xC7\x23lept_free',0,b'\x00\x00\x69\x23makePixelSumTab8',0,b'\x00\x00\x16\x23pixAnd',0,b'\x00\x00\x23\x23pixBackgroundNorm',0,b'\x00\x00\x1B\x23pixCleanBackgroundToWhite',0,b'\x00\x00\x0D\x23pixClipRectangle',0,b'\x00\x00\x94\x23pixColorFraction',0,b'\x00\x00\x59\x23pixColorMagnitude',0,b'\x00\x00\x0A\x23pixConvertRGBToLuminance',0,b'\x00\x00\x6B\x23pixCorrelationBinary',0,b'\x00\x00\x80\x23pixCountPixels',0,b'\x00\x00\x63\x23pixDeserializeFromMemory',0,b'\x00\x00\x50\x23pixDeskew',0,b'\x00\x00\xC4\x23pixDestroy',0,b'\x00\x00\x0A\x23pixEndianByteSwapNew',0,b'\x00\x00\x00\x23pixFindPageForeground',0,b'\x00\x00\x7B\x23pixFindSkew',0,b'\x00\x00\x2F\x23pixGammaTRC',0,b'\x00\x00\x8D\x23pixGenerateCIData',0,b'\x00\x00\x70\x23pixGetAverageMaskedRGB',0,b'\x00\x00\x36\x23pixGlobalNormRGB',0,b'\x00\x00\x12\x23pixInvert',0,b'\x00\x00\x54\x23pixMaskOverColorPixels',0,b'\x00\x00\x85\x23pixNumSignificantGrayColors',0,b'\x00\x00\x9D\x23pixOtsuAdaptiveThreshold',0,b'\x00\x00\x3E\x23pixOtsuThreshOnBackgroundNorm',0,b'\x00\x00\x60\x23pixRead',0,b'\x00\x00\x50\x23pixRemoveColormap',0,b'\x00\x00\x54\x23pixRemoveColormapGeneral',0,b'\x00\x00\x12\x23pixRotate180',0,b'\x00\x00\x50\x23pixRotateOrth',0,b'\x00\x00\x4B\x23pixScale',0,b'\x00\x00\xA7\x23pixSerializeToMemory',0,b'\x00\x00\xB2\x23pixWriteImpliedFormat',0,b'\x00\x00\xB8\x23pixWriteMemPng',0), - _struct_unions = ((b'\x00\x00\x00\xCA\x00\x00\x00\x02Box',b'\x00\x00\x02\x11x',b'\x00\x00\x02\x11y',b'\x00\x00\x02\x11w',b'\x00\x00\x02\x11h',b'\x00\x00\xDC\x11refcount'),(b'\x00\x00\x00\xCC\x00\x00\x00\x02L_Compressed_Data',b'\x00\x00\x02\x11type',b'\x00\x00\xD9\x11datacomp',b'\x00\x00\x65\x11nbytescomp',b'\x00\x00\xCF\x11data85',b'\x00\x00\x65\x11nbytes85',b'\x00\x00\xCF\x11cmapdata85',b'\x00\x00\xCF\x11cmapdatahex',b'\x00\x00\x02\x11ncolors',b'\x00\x00\x02\x11w',b'\x00\x00\x02\x11h',b'\x00\x00\x02\x11bps',b'\x00\x00\x02\x11spp',b'\x00\x00\x02\x11minisblack',b'\x00\x00\x02\x11predictor',b'\x00\x00\x65\x11nbytes',b'\x00\x00\x02\x11res'),(b'\x00\x00\x00\xCD\x00\x00\x00\x02Pix',b'\x00\x00\xDC\x11w',b'\x00\x00\xDC\x11h',b'\x00\x00\xDC\x11d',b'\x00\x00\xDC\x11spp',b'\x00\x00\xDC\x11wpl',b'\x00\x00\xDC\x11refcount',b'\x00\x00\x02\x11xres',b'\x00\x00\x02\x11yres',b'\x00\x00\x02\x11informat',b'\x00\x00\x02\x11special',b'\x00\x00\xCF\x11text',b'\x00\x00\xD8\x11colormap',b'\x00\x00\xDB\x11data'),(b'\x00\x00\x00\xCE\x00\x00\x00\x02PixColormap',b'\x00\x00\xC8\x11array',b'\x00\x00\x02\x11depth',b'\x00\x00\x02\x11nalloc',b'\x00\x00\x02\x11n')), - _enums = (b'\x00\x00\x00\xD2\x00\x00\x00\x16$1\x00L_DEFAULT_ENCODE,L_JPEG_ENCODE,L_G4_ENCODE,L_FLATE_ENCODE,L_JP2K_ENCODE',b'\x00\x00\x00\xD3\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\x00\xD4\x00\x00\x00\x16$3\x00L_NOCOPY,L_INSERT,L_COPY,L_CLONE,L_COPY_CLONE'), - _typenames = (b'\x00\x00\x00\xCABOX',b'\x00\x00\x00\xCCL_COMP_DATA',b'\x00\x00\x00\xCDPIX',b'\x00\x00\x00\xCEPIXCMAP',b'\x00\x00\x00\x1Fl_float32',b'\x00\x00\x00\xD1l_float64',b'\x00\x00\x00\xD6l_int16',b'\x00\x00\x00\x02l_int32',b'\x00\x00\x00\xD5l_int64',b'\x00\x00\x00\xD7l_int8',b'\x00\x00\x00\xDEl_uint16',b'\x00\x00\x00\xDCl_uint32',b'\x00\x00\x00\xDDl_uint64',b'\x00\x00\x00\xDAl_uint8'), + _types = b'\x00\x00\x01\x0D\x00\x00\xD6\x03\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\xDB\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\x00\xDE\x03\x00\x00\x00\x0F\x00\x00\xD7\x0D\x00\x00\x04\x11\x00\x00\x07\x01\x00\x00\x04\x03\x00\x00\x10\x11\x00\x00\x00\x0F\x00\x00\x04\x0D\x00\x00\x04\x11\x00\x00\x00\x0F\x00\x00\x04\x0D\x00\x00\x04\x11\x00\x00\x01\x11\x00\x00\x01\x03\x00\x00\x00\x0F\x00\x00\x04\x0D\x00\x00\x04\x11\x00\x00\x04\x11\x00\x00\x00\x0F\x00\x00\x04\x0D\x00\x00\x04\x11\x00\x00\x04\x11\x00\x00\x04\x11\x00\x00\x00\x0F\x00\x00\x04\x0D\x00\x00\x04\x11\x00\x00\x04\x11\x00\x00\x04\x11\x00\x00\x0D\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x04\x0D\x00\x00\x04\x11\x00\x00\x04\x11\x00\x00\x04\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\x04\x0D\x00\x00\x04\x11\x00\x00\x04\x11\x00\x00\x0D\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x04\x0D\x00\x00\x04\x11\x00\x00\x04\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x04\x0D\x00\x00\x04\x11\x00\x00\x04\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\x04\x0D\x00\x00\x04\x11\x00\x00\x0D\x01\x00\x00\x0D\x01\x00\x00\x00\x0F\x00\x00\x04\x0D\x00\x00\x04\x11\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x04\x0D\x00\x00\x04\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x04\x0D\x00\x00\x04\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x04\x0D\x00\x00\x0B\x11\x00\x00\x00\x0F\x00\x00\x04\x0D\x00\x00\xEA\x03\x00\x00\x1C\x01\x00\x00\x00\x0F\x00\x00\xDD\x0D\x00\x00\x00\x0F\x00\x00\x52\x0D\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x04\x11\x00\x00\x04\x11\x00\x00\x28\x03\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x04\x11\x00\x00\x04\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x77\x11\x00\x00\x77\x11\x00\x00\x77\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x04\x11\x00\x00\x77\x11\x00\x00\x77\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x04\x11\x00\x00\x52\x11\x00\x00\x52\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x04\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x0D\x01\x00\x00\x07\x01\x00\x00\x52\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x04\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\xD9\x03\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x04\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x77\x11\x00\x00\x77\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x04\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x0D\x01\x00\x00\x10\x11\x00\x00\x10\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x04\x11\x00\x00\xE9\x03\x00\x00\x6E\x03\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x0B\x11\x00\x00\x04\x11\x00\x00\x07\x01\x00\x00\x9B\x11\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\x0B\x11\x00\x00\x04\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x05\x0D\x00\x00\xE7\x03\x00\x00\xB3\x11\x00\x00\x04\x11\x00\x00\x0D\x01\x00\x00\x00\x0F\x00\x00\xED\x0D\x00\x00\x19\x11\x00\x00\x00\x0F\x00\x00\xED\x0D\x00\x00\xD7\x03\x00\x00\x00\x0F\x00\x00\xED\x0D\x00\x00\x9B\x11\x00\x00\x00\x0F\x00\x00\xED\x0D\x00\x00\x10\x11\x00\x00\x00\x0F\x00\x00\xED\x0D\x00\x00\xED\x03\x00\x00\x00\x0F\x00\x00\x00\x09\x00\x00\xD8\x03\x00\x00\x01\x09\x00\x00\xDA\x03\x00\x00\x02\x09\x00\x00\x03\x09\x00\x00\x04\x09\x00\x00\xDE\x03\x00\x00\x02\x01\x00\x00\x0E\x01\x00\x00\x00\x0B\x00\x00\x01\x0B\x00\x00\x02\x0B\x00\x00\x0B\x01\x00\x00\x05\x01\x00\x00\x03\x01\x00\x00\xDC\x03\x00\x00\xE8\x03\x00\x00\x04\x01\x00\x00\xEA\x03\x00\x00\x08\x01\x00\x00\x0C\x01\x00\x00\x06\x01\x00\x00\x00\x01', + _globals = (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\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\xC7\x23boxDestroy',0,b'\x00\x00\xCA\x23boxaDestroy',0,b'\x00\x00\x70\x23getLeptonicaVersion',0,b'\x00\x00\xCD\x23l_CIDataDestroy',0,b'\x00\x00\xB5\x23l_generateCIDataForPdf',0,b'\x00\x00\xD3\x23lept_free',0,b'\x00\x00\x72\x23makePixelSumTab8',0,b'\x00\x00\x1F\x23pixAnd',0,b'\x00\x00\x2C\x23pixBackgroundNorm',0,b'\x00\x00\x24\x23pixCleanBackgroundToWhite',0,b'\x00\x00\x16\x23pixClipRectangle',0,b'\x00\x00\x9D\x23pixColorFraction',0,b'\x00\x00\x62\x23pixColorMagnitude',0,b'\x00\x00\x13\x23pixConvertRGBToLuminance',0,b'\x00\x00\x74\x23pixCorrelationBinary',0,b'\x00\x00\x89\x23pixCountPixels',0,b'\x00\x00\x6C\x23pixDeserializeFromMemory',0,b'\x00\x00\x59\x23pixDeskew',0,b'\x00\x00\xD0\x23pixDestroy',0,b'\x00\x00\x13\x23pixEndianByteSwapNew',0,b'\x00\x00\x03\x23pixFindPageForeground',0,b'\x00\x00\x84\x23pixFindSkew',0,b'\x00\x00\x38\x23pixGammaTRC',0,b'\x00\x00\x96\x23pixGenerateCIData',0,b'\x00\x00\x79\x23pixGetAverageMaskedRGB',0,b'\x00\x00\x3F\x23pixGlobalNormRGB',0,b'\x00\x00\x1B\x23pixInvert',0,b'\x00\x00\x0D\x23pixLocateBarcodes',0,b'\x00\x00\x5D\x23pixMaskOverColorPixels',0,b'\x00\x00\x8E\x23pixNumSignificantGrayColors',0,b'\x00\x00\xA6\x23pixOtsuAdaptiveThreshold',0,b'\x00\x00\x47\x23pixOtsuThreshOnBackgroundNorm',0,b'\x00\x00\x69\x23pixRead',0,b'\x00\x00\x59\x23pixRemoveColormap',0,b'\x00\x00\x5D\x23pixRemoveColormapGeneral',0,b'\x00\x00\x1B\x23pixRotate180',0,b'\x00\x00\x59\x23pixRotateOrth',0,b'\x00\x00\x54\x23pixScale',0,b'\x00\x00\xB0\x23pixSerializeToMemory',0,b'\x00\x00\xBB\x23pixWriteImpliedFormat',0,b'\x00\x00\xC1\x23pixWriteMemPng',0), + _struct_unions = ((b'\x00\x00\x00\xD6\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\x00\xEA\x11refcount'),(b'\x00\x00\x00\xD8\x00\x00\x00\x02Boxa',b'\x00\x00\x05\x11n',b'\x00\x00\x05\x11nalloc',b'\x00\x00\xEA\x11refcount',b'\x00\x00\x19\x11box'),(b'\x00\x00\x00\xDA\x00\x00\x00\x02L_Compressed_Data',b'\x00\x00\x05\x11type',b'\x00\x00\xE7\x11datacomp',b'\x00\x00\x6E\x11nbytescomp',b'\x00\x00\xDD\x11data85',b'\x00\x00\x6E\x11nbytes85',b'\x00\x00\xDD\x11cmapdata85',b'\x00\x00\xDD\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\x6E\x11nbytes',b'\x00\x00\x05\x11res'),(b'\x00\x00\x00\xDB\x00\x00\x00\x02Pix',b'\x00\x00\xEA\x11w',b'\x00\x00\xEA\x11h',b'\x00\x00\xEA\x11d',b'\x00\x00\xEA\x11spp',b'\x00\x00\xEA\x11wpl',b'\x00\x00\xEA\x11refcount',b'\x00\x00\x05\x11xres',b'\x00\x00\x05\x11yres',b'\x00\x00\x05\x11informat',b'\x00\x00\x05\x11special',b'\x00\x00\xDD\x11text',b'\x00\x00\xE6\x11colormap',b'\x00\x00\xE9\x11data'),(b'\x00\x00\x00\xDC\x00\x00\x00\x02PixColormap',b'\x00\x00\xD4\x11array',b'\x00\x00\x05\x11depth',b'\x00\x00\x05\x11nalloc',b'\x00\x00\x05\x11n')), + _enums = (b'\x00\x00\x00\xE0\x00\x00\x00\x16$1\x00L_DEFAULT_ENCODE,L_JPEG_ENCODE,L_G4_ENCODE,L_FLATE_ENCODE,L_JP2K_ENCODE',b'\x00\x00\x00\xE1\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\x00\xE2\x00\x00\x00\x16$3\x00L_NOCOPY,L_INSERT,L_COPY,L_CLONE,L_COPY_CLONE'), + _typenames = (b'\x00\x00\x00\xD6BOX',b'\x00\x00\x00\xD8BOXA',b'\x00\x00\x00\xDAL_COMP_DATA',b'\x00\x00\x00\xDBPIX',b'\x00\x00\x00\xDCPIXCMAP',b'\x00\x00\x00\x28l_float32',b'\x00\x00\x00\xDFl_float64',b'\x00\x00\x00\xE4l_int16',b'\x00\x00\x00\x05l_int32',b'\x00\x00\x00\xE3l_int64',b'\x00\x00\x00\xE5l_int8',b'\x00\x00\x00\xECl_uint16',b'\x00\x00\x00\xEAl_uint32',b'\x00\x00\x00\xEBl_uint64',b'\x00\x00\x00\xE8l_uint8'), ) diff --git a/src/ocrmypdf/lib/compile_leptonica.py b/src/ocrmypdf/lib/compile_leptonica.py index 5f739f28..066af029 100644 --- a/src/ocrmypdf/lib/compile_leptonica.py +++ b/src/ocrmypdf/lib/compile_leptonica.py @@ -72,6 +72,15 @@ struct Box }; typedef struct Box BOX; +/*! Array of Box */ +struct Boxa +{ + l_int32 n; /*!< number of box in ptr array */ + l_int32 nalloc; /*!< number of box ptrs allocated */ + l_uint32 refcount; /*!< reference count (1 if no clones) */ + struct Box **box; /*!< box ptr array */ +}; +typedef struct Boxa BOXA; /*! Pdf formatted encoding types */ enum { @@ -265,13 +274,13 @@ pixGetAverageMaskedRGB(PIX *pixs, l_float32 *pgval, l_float32 *pbval); -PIX * +PIX * pixGlobalNormRGB(PIX * pixd, PIX * pixs, l_int32 rval, l_int32 gval, l_int32 bval, - l_int32 mapval); + l_int32 mapval); PIX * pixInvert(PIX * pixd, @@ -289,20 +298,29 @@ pixGenerateCIData(PIX *pixs, l_int32 ascii85, L_COMP_DATA **pcid); -l_int32 -l_generateCIDataForPdf(const char *fname, - PIX *pix, - l_int32 quality, +BOXA * +pixLocateBarcodes ( PIX *pixs, l_int32 thresh, PIX **ppixb, PIX **ppixm ); + +l_int32 +l_generateCIDataForPdf(const char *fname, + PIX *pix, + l_int32 quality, L_COMP_DATA **pcid); -void +BOX * +boxClone ( BOX *box ); + +void boxDestroy(BOX **pbox); +void +boxaDestroy ( BOXA **pboxa ); + void l_CIDataDestroy(L_COMP_DATA **pcid); void -lept_free(void *ptr); +lept_free(void *ptr); """)