-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprocess.py
58 lines (54 loc) · 1.58 KB
/
process.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
"""Process an image into text from start to finish"""
from typing import Optional
from PIL import Image
from passport_mrz_reader.common.interfaces import (
PreProcessors,
PostProcessors,
Engine,
)
from passport_mrz_reader.common.mrz_common import (
display_if_verbose,
print_if_verbose,
)
from passport_mrz_reader.common.postprocessing import postprocess
from passport_mrz_reader.common.preprocessing import preprocess
def process(
image,
preprocessors: PreProcessors,
engine: Engine,
postprocessors: PostProcessors,
verbose=False,
) -> Optional[str]:
display_if_verbose(
"Original image", Image.fromarray(image), verbose=verbose
)
if (
preprocessors is not None
and preprocessors.variable_threshold
and (preprocessors.threshold or preprocessors.grayscale)
):
print_if_verbose(
"Only using variable threshold, disregarding threshold and grayscale",
verbose=verbose,
)
# Pre-process
if (
preprocessors is not None
and preprocessors.variable_threshold is not None
):
pre_processed = None
else:
pre_processed = preprocess(image, preprocessors, verbose=verbose)
original_image = image
# Engine
initial_result = engine.get_mrz_text(
original_image, pre_processed, verbose=verbose
)
if initial_result is None:
return None
mrz_text, metadata = initial_result
# Post-process
post_processed = postprocess(
mrz_text, metadata, postprocessors, verbose=verbose
)
return post_processed