geopic-tag-reader 1.4.1__tar.gz → 1.4.2__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.
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/CHANGELOG.md +8 -1
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/PKG-INFO +1 -1
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/__init__.py +1 -1
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/sequence.py +32 -11
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/en/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/en/LC_MESSAGES/geopic_tag_reader.po +2 -2
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/geopic_tag_reader.pot +1 -1
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/pyproject.toml +1 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/.gitignore +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/.gitlab-ci.yml +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/.pre-commit-config.yaml +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/CODE_OF_CONDUCT.md +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/LICENSE +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/Makefile +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/README.md +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/docs/develop.md +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/docs/images/quality_score.png +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/docs/images/quality_score_viewer.png +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/docs/index.md +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/docs/install.md +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/docs/quality_score.md +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/docs/tech/api_reference.md +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/docs/tech/cli.md +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/camera.py +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/cameras.csv +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/i18n.py +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/main.py +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/model.py +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/py.typed +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/reader.py +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/da/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/da/LC_MESSAGES/geopic_tag_reader.po +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/de/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/de/LC_MESSAGES/geopic_tag_reader.po +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/eo/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/eo/LC_MESSAGES/geopic_tag_reader.po +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/es/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/es/LC_MESSAGES/geopic_tag_reader.po +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/fi/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/fi/LC_MESSAGES/geopic_tag_reader.po +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/fr/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/fr/LC_MESSAGES/geopic_tag_reader.po +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/hu/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/hu/LC_MESSAGES/geopic_tag_reader.po +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/it/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/it/LC_MESSAGES/geopic_tag_reader.po +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/ja/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/ja/LC_MESSAGES/geopic_tag_reader.po +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/ko/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/ko/LC_MESSAGES/geopic_tag_reader.po +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/nl/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/nl/LC_MESSAGES/geopic_tag_reader.po +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/pl/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/pl/LC_MESSAGES/geopic_tag_reader.po +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/zh_Hant/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/zh_Hant/LC_MESSAGES/geopic_tag_reader.po +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/writer.py +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/mkdocs.yml +0 -0
- {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/pytest.ini +0 -0
|
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [1.4.2] - 2025-02-10
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- Change the relative angle computation for capture duplicates detection. This new computation is more accurate and should detect more duplicates.
|
|
15
|
+
|
|
10
16
|
## [1.4.1] - 2025-02-03
|
|
11
17
|
|
|
12
18
|
### Added
|
|
@@ -261,7 +267,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
261
267
|
|
|
262
268
|
- EXIF tag reading methods extracted from [Panoramax/GeoVisio API](https://gitlab.com/panoramax/server/api)
|
|
263
269
|
|
|
264
|
-
[Unreleased]: https://gitlab.com/panoramax/server/geo-picture-tag-reader/-/compare/1.4.
|
|
270
|
+
[Unreleased]: https://gitlab.com/panoramax/server/geo-picture-tag-reader/-/compare/1.4.2...main
|
|
271
|
+
[1.4.2]: https://gitlab.com/panoramax/server/geo-picture-tag-reader/-/compare/1.4.1...1.4.2
|
|
265
272
|
[1.4.1]: https://gitlab.com/panoramax/server/geo-picture-tag-reader/-/compare/1.4.0...1.4.1
|
|
266
273
|
[1.4.0]: https://gitlab.com/panoramax/server/geo-picture-tag-reader/-/compare/1.3.3...1.4.0
|
|
267
274
|
[1.3.3]: https://gitlab.com/panoramax/server/geo-picture-tag-reader/-/compare/1.3.2...1.3.3
|
|
@@ -50,6 +50,29 @@ class Picture:
|
|
|
50
50
|
distance = R * c
|
|
51
51
|
return distance
|
|
52
52
|
|
|
53
|
+
def rotation_angle(self, other) -> Optional[float]:
|
|
54
|
+
return rotation_angle(self.metadata.heading, other.metadata.heading)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def rotation_angle(heading1: Optional[int], heading2: Optional[int]) -> Optional[int]:
|
|
58
|
+
"""Computes relative heading between two headings
|
|
59
|
+
|
|
60
|
+
>>> rotation_angle(120, 120)
|
|
61
|
+
0
|
|
62
|
+
>>> rotation_angle(120, 240)
|
|
63
|
+
120
|
|
64
|
+
>>> rotation_angle(15, 335)
|
|
65
|
+
40
|
|
66
|
+
>>> rotation_angle(335, 15)
|
|
67
|
+
40
|
|
68
|
+
>>> rotation_angle(None, 15)
|
|
69
|
+
|
|
70
|
+
"""
|
|
71
|
+
if heading1 is None or heading2 is None:
|
|
72
|
+
return None
|
|
73
|
+
diff = (heading1 - heading2) % 360
|
|
74
|
+
return min(diff, 360 - diff)
|
|
75
|
+
|
|
53
76
|
|
|
54
77
|
class SplitReason(str, Enum):
|
|
55
78
|
time = "time"
|
|
@@ -212,21 +235,19 @@ def find_duplicates(pictures: List[Picture], params: Optional[MergeParams] = Non
|
|
|
212
235
|
nonDups.append(currentPic)
|
|
213
236
|
continue
|
|
214
237
|
|
|
238
|
+
is_duplicate = False
|
|
239
|
+
|
|
215
240
|
# Compare distance
|
|
216
241
|
dist = prevPic.distance_to(currentPic)
|
|
217
242
|
|
|
218
|
-
if dist <= params.maxDistance:
|
|
243
|
+
if params.maxDistance is not None and dist <= params.maxDistance:
|
|
219
244
|
# Compare angle (if available on both images)
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
lastNonDuplicatedPicId = i
|
|
227
|
-
nonDups.append(currentPic)
|
|
228
|
-
else:
|
|
229
|
-
dups.append(currentPic)
|
|
245
|
+
angle = prevPic.rotation_angle(currentPic)
|
|
246
|
+
if angle is None or params.maxRotationAngle is None or angle <= params.maxRotationAngle:
|
|
247
|
+
is_duplicate = True
|
|
248
|
+
|
|
249
|
+
if is_duplicate:
|
|
250
|
+
dups.append(currentPic)
|
|
230
251
|
else:
|
|
231
252
|
lastNonDuplicatedPicId = i
|
|
232
253
|
nonDups.append(currentPic)
|
|
Binary file
|
|
@@ -7,8 +7,8 @@ msgid ""
|
|
|
7
7
|
msgstr ""
|
|
8
8
|
"Project-Id-Version: PACKAGE VERSION\n"
|
|
9
9
|
"Report-Msgid-Bugs-To: \n"
|
|
10
|
-
"POT-Creation-Date: 2025-02-
|
|
11
|
-
"PO-Revision-Date: 2025-02-
|
|
10
|
+
"POT-Creation-Date: 2025-02-10 11:04+0100\n"
|
|
11
|
+
"PO-Revision-Date: 2025-02-10 11:04+0100\n"
|
|
12
12
|
"Last-Translator: Automatically generated\n"
|
|
13
13
|
"Language-Team: none\n"
|
|
14
14
|
"Language: en\n"
|
|
@@ -8,7 +8,7 @@ msgid ""
|
|
|
8
8
|
msgstr ""
|
|
9
9
|
"Project-Id-Version: PACKAGE VERSION\n"
|
|
10
10
|
"Report-Msgid-Bugs-To: \n"
|
|
11
|
-
"POT-Creation-Date: 2025-02-
|
|
11
|
+
"POT-Creation-Date: 2025-02-10 11:04+0100\n"
|
|
12
12
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
|
13
13
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
14
14
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|