valetudo-map-parser 0.1.9b23__tar.gz → 0.1.9b25__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.9b23 → valetudo_map_parser-0.1.9b25}/PKG-INFO +1 -1
- {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/config/auto_crop.py +13 -30
- {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/config/shared.py +4 -7
- {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/config/types.py +29 -7
- {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/hypfer_handler.py +13 -5
- {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/rand25_handler.py +13 -4
- {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/pyproject.toml +1 -1
- {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/LICENSE +0 -0
- {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/NOTICE.txt +0 -0
- {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/README.md +0 -0
- {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/__init__.py +0 -0
- {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/config/__init__.py +0 -0
- {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/config/colors.py +0 -0
- {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/config/drawable.py +0 -0
- {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/config/rand25_parser.py +0 -0
- {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/config/utils.py +0 -0
- {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/hypfer_draw.py +0 -0
- {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/map_data.py +0 -0
- {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/py.typed +0 -0
- {valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/reimg_draw.py +0 -0
@@ -8,7 +8,7 @@ import logging
|
|
8
8
|
import numpy as np
|
9
9
|
from numpy import rot90
|
10
10
|
|
11
|
-
from .types import Color, NumpyArray, TrimCropData
|
11
|
+
from .types import Color, NumpyArray, TrimCropData, TrimsData
|
12
12
|
|
13
13
|
|
14
14
|
_LOGGER = logging.getLogger(__name__)
|
@@ -28,9 +28,6 @@ class AutoCrop:
|
|
28
28
|
def __init__(self, image_handler):
|
29
29
|
self.imh = image_handler
|
30
30
|
self.file_name = self.imh.file_name
|
31
|
-
# self.path_to_data = self.hass.config.path(
|
32
|
-
# STORAGE_DIR, CAMERA_STORAGE, f"auto_crop_{self.file_name}.json"
|
33
|
-
# )
|
34
31
|
|
35
32
|
def check_trim(
|
36
33
|
self, trimmed_height, trimmed_width, margin_size, image_array, file_name, rotate
|
@@ -71,19 +68,18 @@ class AutoCrop:
|
|
71
68
|
)
|
72
69
|
return trimmed_width, trimmed_height
|
73
70
|
|
74
|
-
async def _async_auto_crop_data(self): # , tdata=None
|
71
|
+
async def _async_auto_crop_data(self, tdata: TrimsData = None): # , tdata=None
|
75
72
|
"""Load the auto crop data from the Camera config."""
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
# return trims_data
|
73
|
+
if not self.imh.auto_crop:
|
74
|
+
trims_data = TrimCropData.from_dict(dict(tdata.to_dict())).to_list()
|
75
|
+
(
|
76
|
+
self.imh.trim_left,
|
77
|
+
self.imh.trim_up,
|
78
|
+
self.imh.trim_right,
|
79
|
+
self.imh.trim_down,
|
80
|
+
) = trims_data
|
81
|
+
self._calculate_trimmed_dimensions()
|
82
|
+
return trims_data
|
87
83
|
return None
|
88
84
|
|
89
85
|
def auto_crop_offset(self):
|
@@ -97,26 +93,13 @@ class AutoCrop:
|
|
97
93
|
async def _init_auto_crop(self):
|
98
94
|
"""Initialize the auto crop data."""
|
99
95
|
if not self.imh.auto_crop and self.imh.shared.vacuum_state == "docked":
|
100
|
-
self.imh.auto_crop = await self._async_auto_crop_data()
|
96
|
+
self.imh.auto_crop = await self._async_auto_crop_data(self.imh.shared.trims)
|
101
97
|
if self.imh.auto_crop:
|
102
98
|
self.auto_crop_offset()
|
103
99
|
else:
|
104
100
|
self.imh.max_frames = 5
|
105
101
|
return self.imh.auto_crop
|
106
102
|
|
107
|
-
# async def _async_save_auto_crop_data(self):
|
108
|
-
# """Save the auto crop data to the disk."""
|
109
|
-
# try:
|
110
|
-
# if not os.path.exists(self.path_to_data):
|
111
|
-
# data = TrimCropData(
|
112
|
-
# self.imh.trim_left,
|
113
|
-
# self.imh.trim_up,
|
114
|
-
# self.imh.trim_right,
|
115
|
-
# self.imh.trim_down,
|
116
|
-
# ).to_dict()
|
117
|
-
# except Exception as e:
|
118
|
-
# _LOGGER.error(f"Failed to save trim data due to an error: {e}")
|
119
|
-
|
120
103
|
async def async_image_margins(
|
121
104
|
self, image_array: NumpyArray, detect_colour: Color
|
122
105
|
) -> tuple[int, int, int, int]:
|
@@ -104,12 +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
|
108
|
-
TrimsData.TRIM_LEFT: 0,
|
109
|
-
TrimsData.TRIM_UP: 0,
|
110
|
-
TrimsData.TRIM_RIGHT: 0,
|
111
|
-
TrimsData.TRIM_DOWN: 0,
|
112
|
-
}
|
107
|
+
self.trims = TrimsData # Trims data
|
113
108
|
self.skip_room_ids: List[str] = []
|
114
109
|
|
115
110
|
def update_user_colors(self, user_colors):
|
@@ -228,11 +223,13 @@ class CameraSharedManager:
|
|
228
223
|
instance.vacuum_status_position = device_info.get(
|
229
224
|
CONF_VAC_STAT_POS, DEFAULT_VALUES["vac_status_position"]
|
230
225
|
)
|
231
|
-
|
232
226
|
# If enable_snapshots, check for png in www.
|
233
227
|
instance.enable_snapshots = device_info.get(
|
234
228
|
CONF_SNAPSHOTS_ENABLE, DEFAULT_VALUES["enable_www_snapshots"]
|
235
229
|
)
|
230
|
+
instance.trims.from_dict(
|
231
|
+
device_info.get("trims_data", DEFAULT_VALUES["trims_data"])
|
232
|
+
)
|
236
233
|
|
237
234
|
except TypeError as ex:
|
238
235
|
_LOGGER.error("Shared data can't be initialized due to a TypeError! %s", ex)
|
@@ -6,7 +6,7 @@ Version 0.0.1
|
|
6
6
|
import asyncio
|
7
7
|
import json
|
8
8
|
import logging
|
9
|
-
from dataclasses import dataclass
|
9
|
+
from dataclasses import dataclass, asdict
|
10
10
|
from enum import Enum
|
11
11
|
from typing import Any, Dict, Tuple, Union
|
12
12
|
|
@@ -285,6 +285,7 @@ DEFAULT_VALUES = {
|
|
285
285
|
"vac_status_position": True,
|
286
286
|
"get_svg_file": False,
|
287
287
|
"save_trims": True,
|
288
|
+
"trims_data": {"trim_left": 0, "trim_up": 0, "trim_right": 0, "trim_down": 0},
|
288
289
|
"enable_www_snapshots": False,
|
289
290
|
"color_charger": [255, 128, 0],
|
290
291
|
"color_move": [238, 247, 255],
|
@@ -346,6 +347,7 @@ KEYS_TO_UPDATE = [
|
|
346
347
|
"offset_bottom",
|
347
348
|
"offset_left",
|
348
349
|
"offset_right",
|
350
|
+
"trims_data",
|
349
351
|
"auto_zoom",
|
350
352
|
"zoom_lock_ratio",
|
351
353
|
"show_vac_status",
|
@@ -591,10 +593,30 @@ class CameraModes:
|
|
591
593
|
CAMERA_ON = True
|
592
594
|
|
593
595
|
|
594
|
-
|
595
|
-
|
596
|
+
@dataclass
|
597
|
+
class TrimsData:
|
598
|
+
"""Dataclass to store and manage trims data."""
|
599
|
+
|
600
|
+
trim_left: int = 0
|
601
|
+
trim_up: int = 0
|
602
|
+
trim_right: int = 0
|
603
|
+
trim_down: int = 0
|
596
604
|
|
597
|
-
|
598
|
-
|
599
|
-
|
600
|
-
|
605
|
+
@classmethod
|
606
|
+
def from_json(cls, json_data: str):
|
607
|
+
"""Create a TrimsConfig instance from a JSON string."""
|
608
|
+
data = json.loads(json_data)
|
609
|
+
return cls(
|
610
|
+
trim_left=data.get("trim_left", 0),
|
611
|
+
trim_up=data.get("trim_up", 0),
|
612
|
+
trim_right=data.get("trim_right", 0),
|
613
|
+
trim_down=data.get("trim_down", 0),
|
614
|
+
)
|
615
|
+
|
616
|
+
def to_json(self) -> str:
|
617
|
+
"""Convert TrimsConfig instance to a JSON string."""
|
618
|
+
return json.dumps(asdict(self))
|
619
|
+
|
620
|
+
def to_dict(self) -> dict:
|
621
|
+
"""Convert TrimsConfig instance to a dictionary."""
|
622
|
+
return asdict(self)
|
@@ -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, TrimsData
|
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,10 +42,18 @@ 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
|
-
self.
|
46
|
-
|
47
|
-
|
48
|
-
self.
|
45
|
+
self.trim_up = self.shared.trims.get(
|
46
|
+
TrimsData.TRIM_UP, 0
|
47
|
+
) # memory stored trims calculated once.
|
48
|
+
self.trim_down = self.shared.trims.get(
|
49
|
+
TrimsData.TRIM_DOWN, 0
|
50
|
+
) # memory stored trims calculated once.
|
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.
|
49
57
|
self.offset_top = self.shared.offset_top # offset top
|
50
58
|
self.offset_bottom = self.shared.offset_down # offset bottom
|
51
59
|
self.offset_left = self.shared.offset_left # offset left
|
@@ -23,6 +23,7 @@ from .config.types import (
|
|
23
23
|
PilPNG,
|
24
24
|
RobotPosition,
|
25
25
|
RoomsProperties,
|
26
|
+
TrimsData,
|
26
27
|
)
|
27
28
|
from .config.utils import BaseHandler, prepare_resize_params
|
28
29
|
from .map_data import RandImageData
|
@@ -52,10 +53,18 @@ class ReImageHandler(BaseHandler):
|
|
52
53
|
self.room_propriety = None # Room propriety data
|
53
54
|
self.shared = camera_shared # Shared data
|
54
55
|
self.active_zones = None # Active zones
|
55
|
-
self.
|
56
|
-
|
57
|
-
|
58
|
-
self.
|
56
|
+
self.trim_up = self.shared.trims.get(
|
57
|
+
TrimsData.TRIM_UP, 0
|
58
|
+
) # memory stored trims calculated once.
|
59
|
+
self.trim_down = self.shared.trims.get(
|
60
|
+
TrimsData.TRIM_DOWN, 0
|
61
|
+
) # memory stored trims calculated once.
|
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.
|
59
68
|
self.file_name = self.shared.file_name # File name
|
60
69
|
self.offset_top = self.shared.offset_top # offset top
|
61
70
|
self.offset_bottom = self.shared.offset_down # offset bottom
|
File without changes
|
File without changes
|
File without changes
|
{valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/hypfer_draw.py
RENAMED
File without changes
|
{valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/map_data.py
RENAMED
File without changes
|
{valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/py.typed
RENAMED
File without changes
|
{valetudo_map_parser-0.1.9b23 → valetudo_map_parser-0.1.9b25}/SCR/valetudo_map_parser/reimg_draw.py
RENAMED
File without changes
|