Forward --oem argument to tesseract 4

This commit is contained in:
James R. Barlow
2017-01-18 21:37:50 -08:00
parent 18b6f05657
commit d4c72b371f
3 changed files with 44 additions and 14 deletions
+20
View File
@@ -212,6 +212,15 @@ advanced.add_argument(
'--tesseract-pagesegmode', action='store', type=int, metavar='PSM',
choices=range(0, 14),
help="set Tesseract page segmentation mode (see tesseract --help)")
advanced.add_argument(
'--tesseract-oem', action='store', type=int, metavar='MODE',
choices=range(0, 4),
help=("set Tesseract 4.0 OCR engine mode: "
"0 - original Tesseract only; "
"1 - neural nets LSTM only; "
"2 - Tesseract + LSTM; "
"3 - default.")
)
advanced.add_argument(
'--pdf-renderer', choices=['auto', 'tesseract', 'hocr'], default='auto',
help="choose OCR PDF renderer - the default option is to let OCRmyPDF "
@@ -316,12 +325,22 @@ def check_options_ocr_behavior(options, log):
" ocrmypdf --pdf-renderer tesseract --output-type pdf")
def check_options_advanced(options, log):
if tesseract.v4():
log.info(
"Tesseract v4.x.alpha found. OCRmyPDF support is experimental.")
if options.tesseract_oem and not tesseract.v4():
log.warning(
"--tesseract-oem requires Tesseract 4.x -- argument ignored")
def check_options(options, log):
try:
check_options_languages(options, log)
check_options_output(options, log)
check_options_preprocessing(options, log)
check_options_ocr_behavior(options, log)
check_options_advanced(options, log)
except argparse.ArgumentError as e:
log.error(e)
sys.exit(ExitCode.bad_args)
@@ -462,6 +481,7 @@ def run_pipeline():
_log, _log_mutex = proxy_logger.make_shared_logger_and_proxy(
logging_factory, __name__, [None, options.verbose])
_log.debug('ocrmypdf ' + VERSION)
_log.debug('tesseract ' + tesseract.version())
check_options(options, _log)
+21 -13
View File
@@ -93,10 +93,20 @@ def languages():
return set(lang.strip() for lang in langs.splitlines()[1:])
def get_orientation(input_file, language: list, timeout: float, log):
args_tesseract = [
def tess_base_args(languages, engine_mode):
args = [
get_program('tesseract'),
'-l', '+'.join(language),
]
if languages:
args.extend(['-l', '+'.join(languages)])
if engine_mode is not None and v4():
args.extend(['--oem', str(engine_mode)])
return args
def get_orientation(input_file, language: list, engine_mode, timeout: float,
log):
args_tesseract = tess_base_args(language, engine_mode) + [
psm(), '0',
input_file,
'stdout'
@@ -175,15 +185,13 @@ def _generate_null_hocr(output_hocr, image):
f.write(HOCR_TEMPLATE.format(w, h))
def generate_hocr(input_file, output_hocr, language: list, tessconfig: list,
timeout: float, pageinfo_getter, pagesegmode: int, log):
def generate_hocr(input_file, output_hocr, language: list, engine_mode,
tessconfig: list,
timeout: float, pagesegmode: int, log):
badxml = os.path.splitext(output_hocr)[0] + '.badxml'
args_tesseract = [
get_program('tesseract'),
'-l', '+'.join(language)
]
args_tesseract = tess_base_args(language, engine_mode)
if pagesegmode is not None:
args_tesseract.extend([psm(), str(pagesegmode)])
@@ -194,6 +202,7 @@ def generate_hocr(input_file, output_hocr, language: list, tessconfig: list,
'hocr'
] + tessconfig)
try:
log.debug(args_tesseract)
stdout = check_output(
args_tesseract, close_fds=True, stderr=STDOUT,
universal_newlines=True, timeout=timeout)
@@ -235,6 +244,7 @@ def generate_hocr(input_file, output_hocr, language: list, tessconfig: list,
def generate_pdf(input_image, skip_pdf, output_pdf, language: list,
engine_mode,
tessconfig: list, timeout: float, pagesegmode: int, log):
'''Use Tesseract to render a PDF.
@@ -246,10 +256,7 @@ def generate_pdf(input_image, skip_pdf, output_pdf, language: list,
log -- logger object
'''
args_tesseract = [
get_program('tesseract'),
'-l', '+'.join(language)
]
args_tesseract = tess_base_args(language, engine_mode)
if pagesegmode is not None:
args_tesseract.extend([psm(), str(pagesegmode)])
@@ -261,6 +268,7 @@ def generate_pdf(input_image, skip_pdf, output_pdf, language: list,
] + tessconfig)
try:
log.debug(args_tesseract)
stdout = check_output(
args_tesseract, close_fds=True, stderr=STDOUT,
universal_newlines=True, timeout=timeout)
+3 -1
View File
@@ -332,6 +332,7 @@ def orient_page(
orient_conf = tesseract.get_orientation(
preview,
language=options.language,
engine_mode=options.tesseract_oem,
timeout=options.tesseract_timeout,
log=log)
@@ -476,9 +477,9 @@ def ocr_tesseract_hocr(
input_file=input_file,
output_hocr=output_file,
language=options.language,
engine_mode=options.tesseract_oem,
tessconfig=options.tesseract_config,
timeout=options.tesseract_timeout,
pageinfo_getter=partial(get_pageinfo, input_file, context),
pagesegmode=options.tesseract_pagesegmode,
log=log
)
@@ -669,6 +670,7 @@ def tesseract_ocr_and_render_pdf(
skip_pdf=input_pdf,
output_pdf=output_file,
language=options.language,
engine_mode=options.tesseract_oem,
tessconfig=options.tesseract_config,
timeout=options.tesseract_timeout,
pagesegmode=options.tesseract_pagesegmode,