valetudo-map-parser 0.1.9b25__tar.gz → 0.1.9b27__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {valetudo_map_parser-0.1.9b25 → valetudo_map_parser-0.1.9b27}/PKG-INFO +1 -1
- {valetudo_map_parser-0.1.9b25 → valetudo_map_parser-0.1.9b27}/SCR/valetudo_map_parser/config/auto_crop.py +12 -1
- {valetudo_map_parser-0.1.9b25 → valetudo_map_parser-0.1.9b27}/SCR/valetudo_map_parser/config/shared.py +2 -2
- {valetudo_map_parser-0.1.9b25 → valetudo_map_parser-0.1.9b27}/SCR/valetudo_map_parser/config/types.py +6 -2
- {valetudo_map_parser-0.1.9b25 → valetudo_map_parser-0.1.9b27}/SCR/valetudo_map_parser/config/utils.py +8 -7
- {valetudo_map_parser-0.1.9b25 → valetudo_map_parser-0.1.9b27}/SCR/valetudo_map_parser/hypfer_handler.py +7 -13
- {valetudo_map_parser-0.1.9b25 → valetudo_map_parser-0.1.9b27}/SCR/valetudo_map_parser/rand25_handler.py +9 -13
- {valetudo_map_parser-0.1.9b25 → valetudo_map_parser-0.1.9b27}/pyproject.toml +1 -1
- {valetudo_map_parser-0.1.9b25 → valetudo_map_parser-0.1.9b27}/LICENSE +0 -0
- {valetudo_map_parser-0.1.9b25 → valetudo_map_parser-0.1.9b27}/NOTICE.txt +0 -0
- {valetudo_map_parser-0.1.9b25 → valetudo_map_parser-0.1.9b27}/README.md +0 -0
- {valetudo_map_parser-0.1.9b25 → valetudo_map_parser-0.1.9b27}/SCR/valetudo_map_parser/__init__.py +0 -0
- {valetudo_map_parser-0.1.9b25 → valetudo_map_parser-0.1.9b27}/SCR/valetudo_map_parser/config/__init__.py +0 -0
- {valetudo_map_parser-0.1.9b25 → valetudo_map_parser-0.1.9b27}/SCR/valetudo_map_parser/config/colors.py +0 -0
- {valetudo_map_parser-0.1.9b25 → valetudo_map_parser-0.1.9b27}/SCR/valetudo_map_parser/config/drawable.py +0 -0
- {valetudo_map_parser-0.1.9b25 → valetudo_map_parser-0.1.9b27}/SCR/valetudo_map_parser/config/rand25_parser.py +0 -0
- {valetudo_map_parser-0.1.9b25 → valetudo_map_parser-0.1.9b27}/SCR/valetudo_map_parser/hypfer_draw.py +0 -0
- {valetudo_map_parser-0.1.9b25 → valetudo_map_parser-0.1.9b27}/SCR/valetudo_map_parser/map_data.py +0 -0
- {valetudo_map_parser-0.1.9b25 → valetudo_map_parser-0.1.9b27}/SCR/valetudo_map_parser/py.typed +0 -0
- {valetudo_map_parser-0.1.9b25 → valetudo_map_parser-0.1.9b27}/SCR/valetudo_map_parser/reimg_draw.py +0 -0
@@ -29,6 +29,14 @@ class AutoCrop:
|
|
29
29
|
self.imh = image_handler
|
30
30
|
self.file_name = self.imh.file_name
|
31
31
|
|
32
|
+
def validate_crop_dimensions(self, shared):
|
33
|
+
"""Ensure width and height are valid before processing cropping."""
|
34
|
+
if shared.image_ref_width <= 0 or shared.image_ref_height <= 0:
|
35
|
+
_LOGGER.warning("Auto-crop failed: Invalid dimensions (width=%s, height=%s). Using original image.",
|
36
|
+
shared.image_ref_width, shared.image_ref_height)
|
37
|
+
return False
|
38
|
+
return True
|
39
|
+
|
32
40
|
def check_trim(
|
33
41
|
self, trimmed_height, trimmed_width, margin_size, image_array, file_name, rotate
|
34
42
|
):
|
@@ -201,7 +209,10 @@ class AutoCrop:
|
|
201
209
|
Automatically crops and trims a numpy array and returns the processed image.
|
202
210
|
"""
|
203
211
|
try:
|
204
|
-
|
212
|
+
if self.validate_crop_dimensions(self.imh.shared):
|
213
|
+
await self._init_auto_crop()
|
214
|
+
else:
|
215
|
+
return image_array
|
205
216
|
if self.imh.auto_crop is None:
|
206
217
|
_LOGGER.debug("%s: Calculating auto trim box", self.file_name)
|
207
218
|
# Find the coordinates of the first occurrence of a non-background color
|
@@ -6,7 +6,7 @@ Version: v2024.12.0
|
|
6
6
|
|
7
7
|
import asyncio
|
8
8
|
import logging
|
9
|
-
from typing import
|
9
|
+
from typing import List
|
10
10
|
|
11
11
|
from .types import (
|
12
12
|
ATTR_CALIBRATION_POINTS,
|
@@ -104,7 +104,7 @@ class CameraShared:
|
|
104
104
|
self.map_old_path = None # Old path data
|
105
105
|
self.user_language = None # User language
|
106
106
|
self.trim_crop_data = None
|
107
|
-
self.trims = TrimsData # Trims data
|
107
|
+
self.trims = TrimsData.from_dict(DEFAULT_VALUES["trims_data"]) # Trims data
|
108
108
|
self.skip_room_ids: List[str] = []
|
109
109
|
|
110
110
|
def update_user_colors(self, user_colors):
|
@@ -7,7 +7,6 @@ import asyncio
|
|
7
7
|
import json
|
8
8
|
import logging
|
9
9
|
from dataclasses import dataclass, asdict
|
10
|
-
from enum import Enum
|
11
10
|
from typing import Any, Dict, Tuple, Union
|
12
11
|
|
13
12
|
import numpy as np
|
@@ -617,6 +616,11 @@ class TrimsData:
|
|
617
616
|
"""Convert TrimsConfig instance to a JSON string."""
|
618
617
|
return json.dumps(asdict(self))
|
619
618
|
|
619
|
+
@classmethod
|
620
|
+
def from_dict(cls, data: dict):
|
621
|
+
"""Initialize TrimData from a dictionary."""
|
622
|
+
return cls(**data)
|
623
|
+
|
620
624
|
def to_dict(self) -> dict:
|
621
|
-
"""Convert
|
625
|
+
"""Convert TrimData to a dictionary."""
|
622
626
|
return asdict(self)
|
@@ -485,8 +485,13 @@ async def async_resize_image(params: ResizeParams):
|
|
485
485
|
"""Resize the image to the given dimensions and aspect ratio."""
|
486
486
|
if params.aspect_ratio:
|
487
487
|
wsf, hsf = [int(x) for x in params.aspect_ratio.split(",")]
|
488
|
-
|
489
|
-
|
488
|
+
|
489
|
+
if wsf == 0 or hsf == 0 or params.width <= 0 or params.height <= 0:
|
490
|
+
_LOGGER.warning(
|
491
|
+
"Invalid aspect ratio parameters: width=%s, height=%s, wsf=%s, hsf=%s. Returning original image.",
|
492
|
+
params.width, params.height, wsf, hsf)
|
493
|
+
return params.pil_img # Return original image if invalid
|
494
|
+
|
490
495
|
new_aspect_ratio = wsf / hsf
|
491
496
|
if params.width / params.height > new_aspect_ratio:
|
492
497
|
new_width = int(params.pil_img.height * new_aspect_ratio)
|
@@ -495,11 +500,7 @@ async def async_resize_image(params: ResizeParams):
|
|
495
500
|
new_width = params.pil_img.width
|
496
501
|
new_height = int(params.pil_img.width / new_aspect_ratio)
|
497
502
|
|
498
|
-
_LOGGER.debug(
|
499
|
-
"Image Aspect Ratio: %s, %s",
|
500
|
-
str(wsf),
|
501
|
-
str(hsf),
|
502
|
-
)
|
503
|
+
_LOGGER.debug("Resizing image to aspect ratio: %s, %s", wsf, hsf)
|
503
504
|
|
504
505
|
if (params.crop_size is not None) and (params.offset_func is not None):
|
505
506
|
offset = OffsetParams(wsf, hsf, new_width, new_height, params.is_rand)
|
@@ -15,7 +15,7 @@ from PIL import Image
|
|
15
15
|
from .config.auto_crop import AutoCrop
|
16
16
|
from .config.drawable import Drawable
|
17
17
|
from .config.shared import CameraShared
|
18
|
-
from .config.types import COLORS, CalibrationPoints, Colors, RoomsProperties
|
18
|
+
from .config.types import COLORS, CalibrationPoints, Colors, RoomsProperties
|
19
19
|
from .config.utils import BaseHandler, prepare_resize_params
|
20
20
|
from .hypfer_draw import ImageDraw as ImDraw
|
21
21
|
from .map_data import ImageData
|
@@ -42,18 +42,12 @@ class HypferMapImageHandler(BaseHandler):
|
|
42
42
|
self.img_base_layer = None # numpy array store the map base layer.
|
43
43
|
self.active_zones = None # vacuum active zones.
|
44
44
|
self.svg_wait = False # SVG image creation wait.
|
45
|
-
|
46
|
-
|
47
|
-
) #
|
48
|
-
self.trim_down =
|
49
|
-
|
50
|
-
) #
|
51
|
-
self.trim_left = self.shared.trims.get(
|
52
|
-
TrimsData.TRIM_LEFT, 0
|
53
|
-
) # memory stored trims calculated once.
|
54
|
-
self.trim_right = self.shared.trims.get(
|
55
|
-
TrimsData.TRIM_RIGHT, 0
|
56
|
-
) # memory stored trims calculated once.
|
45
|
+
trim_data = self.shared.trims.to_dict() # trims data
|
46
|
+
_LOGGER.debug("Trim Data: %s", str(trim_data))
|
47
|
+
self.trim_up = trim_data.get("trim_up", 0) # trim up
|
48
|
+
self.trim_down = trim_data.get("trim_down", 0) # trim down
|
49
|
+
self.trim_left = trim_data.get("trim_left", 0) # trim left
|
50
|
+
self.trim_right = trim_data.get("trim_right", 0) # trim right
|
57
51
|
self.offset_top = self.shared.offset_top # offset top
|
58
52
|
self.offset_bottom = self.shared.offset_down # offset bottom
|
59
53
|
self.offset_left = self.shared.offset_left # offset left
|
@@ -23,7 +23,6 @@ from .config.types import (
|
|
23
23
|
PilPNG,
|
24
24
|
RobotPosition,
|
25
25
|
RoomsProperties,
|
26
|
-
TrimsData,
|
27
26
|
)
|
28
27
|
from .config.utils import BaseHandler, prepare_resize_params
|
29
28
|
from .map_data import RandImageData
|
@@ -53,18 +52,12 @@ class ReImageHandler(BaseHandler):
|
|
53
52
|
self.room_propriety = None # Room propriety data
|
54
53
|
self.shared = camera_shared # Shared data
|
55
54
|
self.active_zones = None # Active zones
|
56
|
-
|
57
|
-
|
58
|
-
) #
|
59
|
-
self.trim_down =
|
60
|
-
|
61
|
-
) #
|
62
|
-
self.trim_left = self.shared.trims.get(
|
63
|
-
TrimsData.TRIM_LEFT, 0
|
64
|
-
) # memory stored trims calculated once.
|
65
|
-
self.trim_right = self.shared.trims.get(
|
66
|
-
TrimsData.TRIM_RIGHT, 0
|
67
|
-
) # memory stored trims calculated once.
|
55
|
+
trim_data = self.shared.trims.to_dict() # trims data
|
56
|
+
_LOGGER.debug("Trim Data: %s", trim_data)
|
57
|
+
self.trim_up = trim_data.get("trim_up", 0) # trim up
|
58
|
+
self.trim_down = trim_data.get("trim_down", 0) # trim down
|
59
|
+
self.trim_left = trim_data.get("trim_left", 0) # trim left
|
60
|
+
self.trim_right = trim_data.get("trim_right", 0) # trim right
|
68
61
|
self.file_name = self.shared.file_name # File name
|
69
62
|
self.offset_top = self.shared.offset_top # offset top
|
70
63
|
self.offset_bottom = self.shared.offset_down # offset bottom
|
@@ -266,6 +259,9 @@ class ReImageHandler(BaseHandler):
|
|
266
259
|
return img_np_array
|
267
260
|
|
268
261
|
async def _finalize_image(self, pil_img):
|
262
|
+
if not self.shared.image_ref_width or not self.shared.image_ref_height:
|
263
|
+
_LOGGER.warning("Image finalization failed: Invalid image dimensions. Returning original image.")
|
264
|
+
return pil_img
|
269
265
|
if self.check_zoom_and_aspect_ratio():
|
270
266
|
resize_params = prepare_resize_params(self, pil_img, True)
|
271
267
|
pil_img = await self.async_resize_images(resize_params)
|
File without changes
|
File without changes
|
File without changes
|
{valetudo_map_parser-0.1.9b25 → valetudo_map_parser-0.1.9b27}/SCR/valetudo_map_parser/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{valetudo_map_parser-0.1.9b25 → valetudo_map_parser-0.1.9b27}/SCR/valetudo_map_parser/hypfer_draw.py
RENAMED
File without changes
|
{valetudo_map_parser-0.1.9b25 → valetudo_map_parser-0.1.9b27}/SCR/valetudo_map_parser/map_data.py
RENAMED
File without changes
|
{valetudo_map_parser-0.1.9b25 → valetudo_map_parser-0.1.9b27}/SCR/valetudo_map_parser/py.typed
RENAMED
File without changes
|
{valetudo_map_parser-0.1.9b25 → valetudo_map_parser-0.1.9b27}/SCR/valetudo_map_parser/reimg_draw.py
RENAMED
File without changes
|