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.
Files changed (59) hide show
  1. {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/CHANGELOG.md +8 -1
  2. {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/PKG-INFO +1 -1
  3. {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/__init__.py +1 -1
  4. {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/sequence.py +32 -11
  5. {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
  6. {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
  7. {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/geopic_tag_reader.pot +1 -1
  8. {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/pyproject.toml +1 -0
  9. {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/.gitignore +0 -0
  10. {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/.gitlab-ci.yml +0 -0
  11. {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/.pre-commit-config.yaml +0 -0
  12. {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/CODE_OF_CONDUCT.md +0 -0
  13. {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/LICENSE +0 -0
  14. {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/Makefile +0 -0
  15. {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/README.md +0 -0
  16. {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/docs/develop.md +0 -0
  17. {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/docs/images/quality_score.png +0 -0
  18. {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/docs/images/quality_score_viewer.png +0 -0
  19. {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/docs/index.md +0 -0
  20. {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/docs/install.md +0 -0
  21. {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/docs/quality_score.md +0 -0
  22. {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/docs/tech/api_reference.md +0 -0
  23. {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/docs/tech/cli.md +0 -0
  24. {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/camera.py +0 -0
  25. {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/cameras.csv +0 -0
  26. {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/i18n.py +0 -0
  27. {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/main.py +0 -0
  28. {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/model.py +0 -0
  29. {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/py.typed +0 -0
  30. {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/reader.py +0 -0
  31. {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
  32. {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
  33. {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
  34. {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
  35. {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
  36. {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
  37. {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
  38. {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
  39. {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
  40. {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
  41. {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
  42. {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
  43. {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
  44. {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
  45. {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
  46. {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
  47. {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
  48. {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
  49. {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
  50. {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
  51. {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
  52. {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
  53. {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
  54. {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
  55. {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
  56. {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
  57. {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/geopic_tag_reader/writer.py +0 -0
  58. {geopic_tag_reader-1.4.1 → geopic_tag_reader-1.4.2}/mkdocs.yml +0 -0
  59. {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.1...main
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: geopic-tag-reader
3
- Version: 1.4.1
3
+ Version: 1.4.2
4
4
  Summary: GeoPicTagReader
5
5
  Author-email: Adrien PAVIE <panieravide@riseup.net>
6
6
  Requires-Python: >=3.8
@@ -2,4 +2,4 @@
2
2
  GeoPicTagReader
3
3
  """
4
4
 
5
- __version__ = "1.4.1"
5
+ __version__ = "1.4.2"
@@ -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: # type: ignore
243
+ if params.maxDistance is not None and dist <= params.maxDistance:
219
244
  # Compare angle (if available on both images)
220
- if params.maxRotationAngle is not None and prevPic.metadata.heading is not None and currentPic.metadata.heading is not None:
221
- deltaAngle = abs(currentPic.metadata.heading - prevPic.metadata.heading)
222
-
223
- if deltaAngle <= params.maxRotationAngle:
224
- dups.append(currentPic)
225
- else:
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)
@@ -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-03 14:04+0100\n"
11
- "PO-Revision-Date: 2025-02-03 14:04+0100\n"
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-03 14:04+0100\n"
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"
@@ -56,6 +56,7 @@ exclude = ["tests"]
56
56
  [tool.pytest.ini_options]
57
57
  addopts = [
58
58
  "--import-mode=importlib",
59
+ "--doctest-modules",
59
60
  ]
60
61
 
61
62
  [tool.black]