Skip to content

Commit

Permalink
Be able to set progress or experimental in the project config
Browse files Browse the repository at this point in the history
  • Loading branch information
sbrunner committed Dec 21, 2021
1 parent c8b48b0 commit 25dee0f
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 18 deletions.
2 changes: 2 additions & 0 deletions process.md
Expand Up @@ -6,6 +6,8 @@
- **Items** *(string)*
- **`destination`** *(string)*: The destination file name.
- **`args`**: Refer to *#/definitions/args*.
- **`progress`** *(boolean)*: Run in progress mode. Default: `False`.
- **`experimental`** *(boolean)*: Run the experimental features. Default: `False`.
- **`steps`** *(array)*: The carried out steps description.
- **Items** *(object)*: Cannot contain additional properties.
- **`name`** *(string)*: The step name.
Expand Down
40 changes: 23 additions & 17 deletions scan_to_paperless/process.py
Expand Up @@ -147,6 +147,14 @@ def get_px_value(self, name: str, default: Union[int, float]) -> float:
* self.config["args"].get("dpi", 300)
)

def is_progress(self) -> bool:
"""Return we want to have the intermediate files."""
return os.environ.get("PROGRESS", "FALSE") == "TRUE" or self.config.setdefault("progress", False)

def is_experimental(self) -> bool:
"""Return we want to run the experimental steps."""
return os.environ.get("EXPERIMENTAL", "FALSE") == "TRUE" or self.config.get("experimental", False)


def add_intermediate_error(
config: scan_to_paperless.process_schema.Configuration,
Expand Down Expand Up @@ -268,15 +276,11 @@ def wrapper(context: Context) -> None:
raise Exception("The root folder is required")
if context.image_name is None:
raise Exception("The image name is required")
if self.experimental and os.environ.get("EXPERIMENTAL", "FALSE") != "TRUE":
if self.experimental and not context.is_experimental():
return
old_image = context.image.copy() if self.experimental else None
start_time = time.perf_counter()
if (
self.experimental
and os.environ.get("TEST_EXPERIMENTAL", "FALSE") == "FALSE"
or self.ignore_error
):
if self.experimental and context.is_experimental() or self.ignore_error:
try:
new_image = func(context)
if new_image is not None and self.ignore_error:
Expand Down Expand Up @@ -308,7 +312,7 @@ def wrapper(context: Context) -> None:
cv2.imwrite(dest_image, diff)

name = self.name if self.experimental else f"{context.get_process_count()}-{self.name}"
if self.experimental or os.environ.get("PROGRESS", "FALSE") == "TRUE":
if self.experimental or context.is_progress():
dest_folder = os.path.join(context.root_folder, name)
if not os.path.exists(dest_folder):
os.makedirs(dest_folder)
Expand Down Expand Up @@ -392,6 +396,7 @@ def crop(context: Context, margin_horizontal: int, margin_vertical: int) -> None
if context.root_folder is not None and context.image_name is not None:
save_image(
image,
context,
context.root_folder,
f"{process_count}-crop",
context.image_name,
Expand Down Expand Up @@ -499,6 +504,7 @@ def deskew(context: Context) -> None:
assert context.root_folder
save_image(
image,
context,
context.root_folder,
f"{context.get_process_count()}-skew-angles",
context.image_name,
Expand Down Expand Up @@ -711,11 +717,10 @@ def find_contours(
thresh = cv2.adaptiveThreshold(
gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY_INV, block_size + 1, threshold_value_c
)
if os.environ.get("PROGRESS", "FALSE") == "TRUE":
assert context.root_folder
assert context.image_name
if context.is_progress() and context.root_folder and context.image_name:
save_image(
thresh,
context,
context.root_folder,
f"{name}-threshold",
context.image_name,
Expand Down Expand Up @@ -815,6 +820,7 @@ def transform(
assert context.image is not None
source = save_image(
context.image,
context,
root_folder,
f"{context.get_process_count()}-assisted-split",
context.image_name,
Expand Down Expand Up @@ -851,9 +857,9 @@ def transform(
}


def save(root_folder: str, img: str, folder: str, force: bool = False) -> str:
def save(context: Context, root_folder: str, img: str, folder: str, force: bool = False) -> str:
"""Save the current image in a subfolder if progress mode in enabled."""
if force or os.environ.get("PROGRESS") == "TRUE":
if force or context.is_progress():
dest_folder = os.path.join(root_folder, folder)
if not os.path.exists(dest_folder):
os.makedirs(dest_folder)
Expand All @@ -864,10 +870,10 @@ def save(root_folder: str, img: str, folder: str, force: bool = False) -> str:


def save_image(
image: NpNdarrayInt, root_folder: str, folder: str, name: str, force: bool = False
image: NpNdarrayInt, context: Context, root_folder: str, folder: str, name: str, force: bool = False
) -> Optional[str]:
"""Save an image."""
if force or os.environ.get("PROGRESS") == "TRUE":
if force or context.is_progress():
dest_folder = os.path.join(root_folder, folder)
if not os.path.exists(dest_folder):
os.makedirs(dest_folder)
Expand Down Expand Up @@ -979,7 +985,7 @@ def split(
page = int(destination)
page_pos = 0

save(root_folder, process_file.name, f"{context.get_process_count()}-split")
save(context, root_folder, process_file.name, f"{context.get_process_count()}-split")
margin_horizontal = context.get_px_value("margin_horizontal", 9)
margin_vertical = context.get_px_value("margin_vertical", 6)
context.image = cv2.imread(process_file.name)
Expand All @@ -989,7 +995,7 @@ def split(
suffix=".png"
)
cv2.imwrite(process_file.name, context.image)
save(root_folder, process_file.name, f"{context.get_process_count()}-crop")
save(context, root_folder, process_file.name, f"{context.get_process_count()}-crop")
if page not in append:
append[page] = []
append[page].append({"file": process_file, "pos": page_pos})
Expand All @@ -1016,7 +1022,7 @@ def split(
process_file.name,
]
)
save(root_folder, process_file.name, f"{process_count}-split")
save(context, root_folder, process_file.name, f"{process_count}-split")
img2 = os.path.join(root_folder, f"image-{page_number}.png")
call(CONVERT + [process_file.name, img2])
transformed_images.append(img2)
Expand Down
10 changes: 10 additions & 0 deletions scan_to_paperless/process_schema.json
Expand Up @@ -139,6 +139,16 @@
"args": {
"$ref": "#/definitions/args"
},
"progress": {
"type": "boolean",
"description": "Run in progress mode",
"default": false
},
"experimental": {
"type": "boolean",
"description": "Run the experimental features",
"default": false
},
"steps": {
"type": "array",
"description": "The carried out steps description",
Expand Down
8 changes: 8 additions & 0 deletions scan_to_paperless/process_schema.py
Expand Up @@ -135,6 +135,14 @@
#
# required
"args": "Arguments",
# Run in progress mode
#
# default: False
"progress": bool,
# Run the experimental features
#
# default: False
"experimental": bool,
# The carried out steps description
"steps": List["Step"],
"assisted_split": List["AssistedSplit"],
Expand Down
4 changes: 3 additions & 1 deletion tests/test_process.py
Expand Up @@ -19,7 +19,9 @@ def test_find_lines():


def test_find_limit_contour():
limits, _ = process.find_limit_contour(load_image("limit-contour-1.png"), None, "test", True, 40, 2)
limits, _ = process.find_limit_contour(
load_image("limit-contour-1.png"), process.Context({}, {}), "test", True, 40, 2
)
assert limits == [1592]


Expand Down

0 comments on commit 25dee0f

Please sign in to comment.