geopic-tag-reader 1.4.0__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.0 → geopic_tag_reader-1.4.2}/CHANGELOG.md +19 -1
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/PKG-INFO +1 -1
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/docs/index.md +3 -1
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/docs/quality_score.md +1 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/geopic_tag_reader/__init__.py +1 -1
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/geopic_tag_reader/cameras.csv +2 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/geopic_tag_reader/reader.py +72 -33
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/geopic_tag_reader/sequence.py +32 -11
- geopic_tag_reader-1.4.2/geopic_tag_reader/translations/da/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/da/LC_MESSAGES/geopic_tag_reader.po +13 -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.0 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/de/LC_MESSAGES/geopic_tag_reader.po +14 -2
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/en/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/en/LC_MESSAGES/geopic_tag_reader.po +17 -17
- geopic_tag_reader-1.4.2/geopic_tag_reader/translations/eo/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/eo/LC_MESSAGES/geopic_tag_reader.po +15 -3
- geopic_tag_reader-1.4.2/geopic_tag_reader/translations/fr/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/fr/LC_MESSAGES/geopic_tag_reader.po +17 -5
- geopic_tag_reader-1.4.2/geopic_tag_reader/translations/geopic_tag_reader.pot +197 -0
- geopic_tag_reader-1.4.2/geopic_tag_reader/translations/it/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/it/LC_MESSAGES/geopic_tag_reader.po +13 -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.0/geopic_tag_reader/translations/geopic_tag_reader.pot → geopic_tag_reader-1.4.2/geopic_tag_reader/translations/ja/LC_MESSAGES/geopic_tag_reader.po +4 -5
- 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.2/geopic_tag_reader/translations/zh_Hant/LC_MESSAGES/geopic_tag_reader.po +196 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/pyproject.toml +1 -0
- geopic_tag_reader-1.4.0/geopic_tag_reader/translations/da/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- geopic_tag_reader-1.4.0/geopic_tag_reader/translations/de/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- geopic_tag_reader-1.4.0/geopic_tag_reader/translations/eo/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- geopic_tag_reader-1.4.0/geopic_tag_reader/translations/fr/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- geopic_tag_reader-1.4.0/geopic_tag_reader/translations/it/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/.gitignore +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/.gitlab-ci.yml +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/.pre-commit-config.yaml +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/CODE_OF_CONDUCT.md +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/LICENSE +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/Makefile +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/README.md +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/docs/develop.md +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/docs/images/quality_score.png +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/docs/images/quality_score_viewer.png +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/docs/install.md +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/docs/tech/api_reference.md +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/docs/tech/cli.md +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/geopic_tag_reader/camera.py +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/geopic_tag_reader/i18n.py +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/geopic_tag_reader/main.py +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/geopic_tag_reader/model.py +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/geopic_tag_reader/py.typed +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/es/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/es/LC_MESSAGES/geopic_tag_reader.po +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/fi/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/fi/LC_MESSAGES/geopic_tag_reader.po +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/hu/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/hu/LC_MESSAGES/geopic_tag_reader.po +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/ko/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/ko/LC_MESSAGES/geopic_tag_reader.po +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/nl/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/nl/LC_MESSAGES/geopic_tag_reader.po +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/pl/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/geopic_tag_reader/translations/pl/LC_MESSAGES/geopic_tag_reader.po +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/geopic_tag_reader/writer.py +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/mkdocs.yml +0 -0
- {geopic_tag_reader-1.4.0 → geopic_tag_reader-1.4.2}/pytest.ini +0 -0
|
@@ -7,6 +7,22 @@ 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
|
+
|
|
16
|
+
## [1.4.1] - 2025-02-03
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
|
|
20
|
+
- Field of view is also computed based on focal length and its equivalent in 35mm format (based on ExifTool formula).
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
|
|
24
|
+
- GPS horizontal precision and dilution of precision are also read from fraction values.
|
|
25
|
+
|
|
10
26
|
## [1.4.0] - 2025-01-06
|
|
11
27
|
|
|
12
28
|
### Added
|
|
@@ -251,7 +267,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
251
267
|
|
|
252
268
|
- EXIF tag reading methods extracted from [Panoramax/GeoVisio API](https://gitlab.com/panoramax/server/api)
|
|
253
269
|
|
|
254
|
-
[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
|
|
272
|
+
[1.4.1]: https://gitlab.com/panoramax/server/geo-picture-tag-reader/-/compare/1.4.0...1.4.1
|
|
255
273
|
[1.4.0]: https://gitlab.com/panoramax/server/geo-picture-tag-reader/-/compare/1.3.3...1.4.0
|
|
256
274
|
[1.3.3]: https://gitlab.com/panoramax/server/geo-picture-tag-reader/-/compare/1.3.2...1.3.3
|
|
257
275
|
[1.3.2]: https://gitlab.com/panoramax/server/geo-picture-tag-reader/-/compare/1.3.1...1.3.2
|
|
@@ -74,10 +74,12 @@ Camera model is read from:
|
|
|
74
74
|
|
|
75
75
|
#### Focal length
|
|
76
76
|
|
|
77
|
-
Camera focal length (to get precise field of view) is read from:
|
|
77
|
+
Camera focal length (basic and 35mm-equivalent, to get precise field of view) is read from:
|
|
78
78
|
|
|
79
79
|
- `Exif.Image.FocalLength`
|
|
80
80
|
- `Exif.Photo.FocalLength`
|
|
81
|
+
- `Exif.Image.FocalLengthIn35mmFilm`
|
|
82
|
+
- `Exif.Photo.FocalLengthIn35mmFilm`
|
|
81
83
|
|
|
82
84
|
#### :octicons-horizontal-rule-16: Yaw, Pitch and Roll
|
|
83
85
|
|
|
@@ -71,6 +71,7 @@ This indicator allows to have an idea of how high the picture resolution is, ind
|
|
|
71
71
|
The value is computed from picture width in pixels, and some EXIF metadata. We rely on the following tags:
|
|
72
72
|
|
|
73
73
|
- __Focal length__ (`Exif.Image.FocalLength` or `Exif.Photo.FocalLength`): distance in millimeters between the nodal point of the lens and the camera sensor.
|
|
74
|
+
- __Focal length (35mm equivalent)__ (`Exif.Image.FocalLengthIn35mmFilm` or `Exif.Photo.FocalLengthIn35mmFilm`): same as focal length, but in 35mm film equivalent.
|
|
74
75
|
- __Make and model__ (`Exif.Image.Make` and `Exif.Image.Make`): camera model, which is used to find camera sensor width.
|
|
75
76
|
- __Projection type__ (for 360° pictures, `Xmp.GPano.ProjectionType`): to mark a picture as 360°
|
|
76
77
|
|
|
@@ -742,6 +742,7 @@
|
|
|
742
742
|
"Epson";"R-D1";"23.7";;
|
|
743
743
|
"Epson";"R-D1xG";"23.7";;
|
|
744
744
|
"Epson";"RD-1s";"23.7";;
|
|
745
|
+
"FLIR Systems Inc.";"Ladybug";;"1";2
|
|
745
746
|
"Fujifilm";"A850";"5.75";;
|
|
746
747
|
"Fujifilm";"Bigjob HD-3W";"5.75";;
|
|
747
748
|
"Fujifilm";"Bigjob HD1";"5.33";;
|
|
@@ -1169,6 +1170,7 @@
|
|
|
1169
1170
|
"GoPro";"HERO4 Black";"6.17";;
|
|
1170
1171
|
"GoPro";"HERO4 Silver";"6.17";;
|
|
1171
1172
|
"GoPro";"HERO5 Black";"6.17";;
|
|
1173
|
+
"GoPro";"HERO6 Black";"6.17";;
|
|
1172
1174
|
"GoPro";"HERO7 Black";"6.17";;
|
|
1173
1175
|
"GoPro";"HERO8 Black";"6.17";;
|
|
1174
1176
|
"GoPro";"HERO9 Black";"6.17";;
|
|
@@ -373,11 +373,10 @@ def readPictureMetadata(picture: bytes, lang_code: str = "en") -> GeoPicTags:
|
|
|
373
373
|
pic_type = "flat"
|
|
374
374
|
|
|
375
375
|
# Focal length
|
|
376
|
-
focalLength =
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
focalLength = float(Fraction(data["Exif.Photo.FocalLength"]))
|
|
376
|
+
focalLength = decodeFloat(data, ["Exif.Image.FocalLength", "Exif.Photo.FocalLength"])
|
|
377
|
+
focalLength35mm = decodeFloat(data, ["Exif.Image.FocalLengthIn35mmFilm", "Exif.Photo.FocalLengthIn35mmFilm"])
|
|
378
|
+
scaleFactor35efl = focalLength35mm / focalLength if focalLength and focalLength35mm else None
|
|
379
|
+
|
|
381
380
|
if focalLength is None and pic_type != "equirectangular":
|
|
382
381
|
warnings.append(_("No focal length value was found, this prevents calculating field of view"))
|
|
383
382
|
|
|
@@ -388,10 +387,12 @@ def readPictureMetadata(picture: bytes, lang_code: str = "en") -> GeoPicTags:
|
|
|
388
387
|
|
|
389
388
|
# Field of view
|
|
390
389
|
fieldOfView = None
|
|
391
|
-
if pic_type == "equirectangular":
|
|
390
|
+
if pic_type == "equirectangular": # 360°
|
|
392
391
|
fieldOfView = 360
|
|
393
|
-
elif sensorWidth is not None and focalLength is not None:
|
|
392
|
+
elif sensorWidth is not None and focalLength is not None: # Based on camera metadata
|
|
394
393
|
fieldOfView = round(math.degrees(2 * math.atan(sensorWidth / (2 * focalLength))))
|
|
394
|
+
elif focalLength is not None and scaleFactor35efl is not None: # Using EXIF Tags
|
|
395
|
+
fieldOfView = compute_fov(focalLength, scaleFactor35efl)
|
|
395
396
|
|
|
396
397
|
# Altitude
|
|
397
398
|
altitude = None
|
|
@@ -401,18 +402,9 @@ def readPictureMetadata(picture: bytes, lang_code: str = "en") -> GeoPicTags:
|
|
|
401
402
|
altitude = altitude_raw * ref
|
|
402
403
|
|
|
403
404
|
# GPS accuracy
|
|
404
|
-
gpshpos = None
|
|
405
405
|
gpshposEstimated = False
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
elif isExifTagUsable(data, "Xmp.exif.GPSHPositioningError", float):
|
|
409
|
-
gpshpos = float(data["Xmp.exif.GPSHPositioningError"])
|
|
410
|
-
|
|
411
|
-
gpsdop = None
|
|
412
|
-
if isExifTagUsable(data, "Exif.GPSInfo.GPSDOP", float):
|
|
413
|
-
gpsdop = float(data["Exif.GPSInfo.GPSDOP"])
|
|
414
|
-
elif isExifTagUsable(data, "Xmp.exif.GPSDOP", float):
|
|
415
|
-
gpsdop = float(data["Xmp.exif.GPSDOP"])
|
|
406
|
+
gpshpos = decodeFloat(data, ["Exif.GPSInfo.GPSHPositioningError", "Xmp.exif.GPSHPositioningError"], 2)
|
|
407
|
+
gpsdop = decodeFloat(data, ["Exif.GPSInfo.GPSDOP", "Xmp.exif.GPSDOP"], 2)
|
|
416
408
|
|
|
417
409
|
gpsdiff = None
|
|
418
410
|
if isExifTagUsable(data, "Exif.GPSInfo.GPSDifferential", int):
|
|
@@ -420,21 +412,22 @@ def readPictureMetadata(picture: bytes, lang_code: str = "en") -> GeoPicTags:
|
|
|
420
412
|
elif isExifTagUsable(data, "Xmp.exif.GPSDifferential", int):
|
|
421
413
|
gpsdiff = int(data["Xmp.exif.GPSDifferential"])
|
|
422
414
|
|
|
423
|
-
if
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
415
|
+
if gpshpos is None:
|
|
416
|
+
if gpsdop is not None and gpsdop > 0:
|
|
417
|
+
gpshposEstimated = True
|
|
418
|
+
if gpsdiff == 1: # DOP with a DGPS -> consider GPS nominal error as 1 meter
|
|
419
|
+
gpshpos = gpsdop
|
|
420
|
+
else: # DOP without DGPS -> consider GPS nominal error as 3 meters in average
|
|
421
|
+
gpshpos = round(3 * gpsdop, 2)
|
|
422
|
+
elif gpsdiff == 1: # DGPS only -> return 2 meters precision
|
|
423
|
+
gpshpos = 2
|
|
424
|
+
gpshposEstimated = True
|
|
425
|
+
elif cameraMetadata is not None and cameraMetadata.gps_accuracy is not None: # Estimate based on model
|
|
426
|
+
gpshpos = cameraMetadata.gps_accuracy
|
|
427
|
+
gpshposEstimated = True
|
|
428
|
+
elif make is not None and make.lower() in camera.GPS_ACCURACY_MAKE:
|
|
429
|
+
gpshpos = camera.GPS_ACCURACY_MAKE[make.lower()]
|
|
430
|
+
gpshposEstimated = True
|
|
438
431
|
|
|
439
432
|
if gpshpos is None:
|
|
440
433
|
warnings.append(_("No GPS accuracy value found, this prevents computing a quality score"))
|
|
@@ -544,6 +537,23 @@ def decodeManyFractions(value: str) -> List[Fraction]:
|
|
|
544
537
|
raise InvalidFractionException()
|
|
545
538
|
|
|
546
539
|
|
|
540
|
+
def decodeFloat(data: dict, tags: List[str], precision: Optional[int] = None) -> Optional[float]:
|
|
541
|
+
"""
|
|
542
|
+
Tries to read float-like value from many EXIF tags (looks for decimal value and fraction)
|
|
543
|
+
"""
|
|
544
|
+
|
|
545
|
+
for tag in tags:
|
|
546
|
+
v = None
|
|
547
|
+
if isExifTagUsable(data, tag, float):
|
|
548
|
+
v = float(data[tag])
|
|
549
|
+
elif isExifTagUsable(data, tag, Fraction):
|
|
550
|
+
v = float(Fraction(data[tag]))
|
|
551
|
+
if v is not None:
|
|
552
|
+
return round(v, precision) if precision is not None else v
|
|
553
|
+
|
|
554
|
+
return None
|
|
555
|
+
|
|
556
|
+
|
|
547
557
|
def decodeLatLon(data: dict, group: str, _: Callable[[str], str]) -> Tuple[Optional[float], Optional[float], List[str]]:
|
|
548
558
|
"""Reads GPS info from given group to get latitude/longitude as float coordinates"""
|
|
549
559
|
|
|
@@ -803,3 +813,32 @@ def isExifTagUsable(exif, tag, expectedType: Any = str) -> bool:
|
|
|
803
813
|
return True
|
|
804
814
|
except ValueError:
|
|
805
815
|
return False
|
|
816
|
+
|
|
817
|
+
|
|
818
|
+
def compute_fov(focal_length, scale_factor_35efl, focus_distance=None) -> int:
|
|
819
|
+
"""
|
|
820
|
+
Computes horizontal field of view (only for rectilinear sensors)
|
|
821
|
+
Based on ExifTool computation.
|
|
822
|
+
|
|
823
|
+
Args:
|
|
824
|
+
focal_length (float): focal length (in mm)
|
|
825
|
+
scale_factor_35efl (float): scale factor for 35mm-equivalent sensor
|
|
826
|
+
focus_distance (float, optional): focus distance
|
|
827
|
+
|
|
828
|
+
Returns:
|
|
829
|
+
int: the computed field of view
|
|
830
|
+
"""
|
|
831
|
+
|
|
832
|
+
if not focal_length or not scale_factor_35efl:
|
|
833
|
+
raise Exception("Missing focal length or scale factor")
|
|
834
|
+
|
|
835
|
+
correction_factor = 1.0
|
|
836
|
+
if focus_distance:
|
|
837
|
+
d = 1000 * focus_distance - focal_length
|
|
838
|
+
if d > 0:
|
|
839
|
+
correction_factor += focal_length / d
|
|
840
|
+
|
|
841
|
+
fd2 = math.atan2(36, 2 * focal_length * scale_factor_35efl * correction_factor)
|
|
842
|
+
fov_degrees = fd2 * 360 / math.pi
|
|
843
|
+
|
|
844
|
+
return round(fov_degrees)
|
|
@@ -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
|
|
@@ -8,7 +8,7 @@ msgstr ""
|
|
|
8
8
|
"Project-Id-Version: PACKAGE VERSION\n"
|
|
9
9
|
"Report-Msgid-Bugs-To: \n"
|
|
10
10
|
"POT-Creation-Date: 2024-11-24 15:36+0100\n"
|
|
11
|
-
"PO-Revision-Date:
|
|
11
|
+
"PO-Revision-Date: 2025-01-07 15:14+0000\n"
|
|
12
12
|
"Last-Translator: ERYpTION <eryption.ar9q2@slmail.me>\n"
|
|
13
13
|
"Language-Team: Danish <http://weblate.panoramax.xyz/projects/panoramax/"
|
|
14
14
|
"tag-reader/da/>\n"
|
|
@@ -207,3 +207,15 @@ msgstr ""
|
|
|
207
207
|
#, python-brace-format
|
|
208
208
|
msgid "Unsupported key in additional tags ({k})"
|
|
209
209
|
msgstr "Ikke-understøttet nøgle i ekstra tags ({k})"
|
|
210
|
+
|
|
211
|
+
#: geopic_tag_reader/main.py:28
|
|
212
|
+
msgid "GPS accuracy:"
|
|
213
|
+
msgstr "GPS-nøjagtighed:"
|
|
214
|
+
|
|
215
|
+
#: geopic_tag_reader/main.py:38
|
|
216
|
+
msgid "Field of view:"
|
|
217
|
+
msgstr "Synsfelt:"
|
|
218
|
+
|
|
219
|
+
#: geopic_tag_reader/main.py:39
|
|
220
|
+
msgid "Sensor width:"
|
|
221
|
+
msgstr "Sensor-bredde:"
|
|
Binary file
|
|
@@ -8,8 +8,8 @@ msgstr ""
|
|
|
8
8
|
"Project-Id-Version: PACKAGE VERSION\n"
|
|
9
9
|
"Report-Msgid-Bugs-To: \n"
|
|
10
10
|
"POT-Creation-Date: 2024-07-10 13:05+0200\n"
|
|
11
|
-
"PO-Revision-Date:
|
|
12
|
-
"Last-Translator:
|
|
11
|
+
"PO-Revision-Date: 2025-01-09 08:14+0000\n"
|
|
12
|
+
"Last-Translator: mcliquid <weblate@mcliquid.de>\n"
|
|
13
13
|
"Language-Team: German <http://weblate.panoramax.xyz/projects/panoramax/"
|
|
14
14
|
"tag-reader/de/>\n"
|
|
15
15
|
"Language: de\n"
|
|
@@ -210,3 +210,15 @@ msgid ""
|
|
|
210
210
|
msgstr ""
|
|
211
211
|
"Kein Hersteller und Modell gefunden, keine Annahmen zu Brennweite oder GPS-"
|
|
212
212
|
"Genauigkeit können angestellt werden"
|
|
213
|
+
|
|
214
|
+
#: geopic_tag_reader/main.py:28
|
|
215
|
+
msgid "GPS accuracy:"
|
|
216
|
+
msgstr "GPS-Genauigkeit:"
|
|
217
|
+
|
|
218
|
+
#: geopic_tag_reader/main.py:38
|
|
219
|
+
msgid "Field of view:"
|
|
220
|
+
msgstr "Sichtbereich:"
|
|
221
|
+
|
|
222
|
+
#: geopic_tag_reader/main.py:39
|
|
223
|
+
msgid "Sensor width:"
|
|
224
|
+
msgstr "Sensorbreite:"
|
|
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-
|
|
11
|
-
"PO-Revision-Date: 2025-
|
|
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"
|
|
@@ -119,17 +119,17 @@ msgstr ""
|
|
|
119
119
|
"No make and model value found, no assumption on focal length or GPS "
|
|
120
120
|
"precision can be made"
|
|
121
121
|
|
|
122
|
-
#: geopic_tag_reader/reader.py:
|
|
122
|
+
#: geopic_tag_reader/reader.py:381
|
|
123
123
|
msgid ""
|
|
124
124
|
"No focal length value was found, this prevents calculating field of view"
|
|
125
125
|
msgstr ""
|
|
126
126
|
"No focal length value was found, this prevents calculating field of view"
|
|
127
127
|
|
|
128
|
-
#: geopic_tag_reader/reader.py:
|
|
128
|
+
#: geopic_tag_reader/reader.py:433
|
|
129
129
|
msgid "No GPS accuracy value found, this prevents computing a quality score"
|
|
130
130
|
msgstr "No GPS accuracy value found, this prevents computing a quality score"
|
|
131
131
|
|
|
132
|
-
#: geopic_tag_reader/reader.py:
|
|
132
|
+
#: geopic_tag_reader/reader.py:435
|
|
133
133
|
msgid ""
|
|
134
134
|
"No GPS horizontal positioning error value found, GPS accuracy can only be "
|
|
135
135
|
"estimated"
|
|
@@ -137,35 +137,35 @@ msgstr ""
|
|
|
137
137
|
"No GPS horizontal positioning error value found, GPS accuracy can only be "
|
|
138
138
|
"estimated"
|
|
139
139
|
|
|
140
|
-
#: geopic_tag_reader/reader.py:
|
|
140
|
+
#: geopic_tag_reader/reader.py:442
|
|
141
141
|
msgid "No GPS coordinates or broken coordinates in picture EXIF tags"
|
|
142
142
|
msgstr "No GPS coordinates or broken coordinates in picture EXIF tags"
|
|
143
143
|
|
|
144
|
-
#: geopic_tag_reader/reader.py:
|
|
144
|
+
#: geopic_tag_reader/reader.py:448
|
|
145
145
|
msgid "No valid date in picture EXIF tags"
|
|
146
146
|
msgstr "No valid date in picture EXIF tags"
|
|
147
147
|
|
|
148
|
-
#: geopic_tag_reader/reader.py:
|
|
148
|
+
#: geopic_tag_reader/reader.py:453
|
|
149
149
|
msgid "The picture is missing mandatory metadata:"
|
|
150
150
|
msgstr "The picture is missing mandatory metadata:"
|
|
151
151
|
|
|
152
|
-
#: geopic_tag_reader/reader.py:
|
|
152
|
+
#: geopic_tag_reader/reader.py:567 geopic_tag_reader/reader.py:596
|
|
153
153
|
msgid "GPSLatitudeRef not found, assuming GPSLatitudeRef is North"
|
|
154
154
|
msgstr "GPSLatitudeRef not found, assuming GPSLatitudeRef is North"
|
|
155
155
|
|
|
156
|
-
#: geopic_tag_reader/reader.py:
|
|
156
|
+
#: geopic_tag_reader/reader.py:575
|
|
157
157
|
msgid "Broken GPS coordinates in picture EXIF tags"
|
|
158
158
|
msgstr "Broken GPS coordinates in picture EXIF tags"
|
|
159
159
|
|
|
160
|
-
#: geopic_tag_reader/reader.py:
|
|
160
|
+
#: geopic_tag_reader/reader.py:578 geopic_tag_reader/reader.py:602
|
|
161
161
|
msgid "GPSLongitudeRef not found, assuming GPSLongitudeRef is East"
|
|
162
162
|
msgstr "GPSLongitudeRef not found, assuming GPSLongitudeRef is East"
|
|
163
163
|
|
|
164
|
-
#: geopic_tag_reader/reader.py:
|
|
164
|
+
#: geopic_tag_reader/reader.py:663
|
|
165
165
|
msgid "Precise timezone information not found, fallback to UTC"
|
|
166
166
|
msgstr "Precise timezone information not found, fallback to UTC"
|
|
167
167
|
|
|
168
|
-
#: geopic_tag_reader/reader.py:
|
|
168
|
+
#: geopic_tag_reader/reader.py:668
|
|
169
169
|
msgid ""
|
|
170
170
|
"Precise timezone information not found (and no GPS coordinates to help), "
|
|
171
171
|
"fallback to UTC"
|
|
@@ -173,14 +173,14 @@ msgstr ""
|
|
|
173
173
|
"Precise timezone information not found (and no GPS coordinates to help), "
|
|
174
174
|
"fallback to UTC"
|
|
175
175
|
|
|
176
|
-
#: geopic_tag_reader/reader.py:
|
|
176
|
+
#: geopic_tag_reader/reader.py:672
|
|
177
177
|
#, python-brace-format
|
|
178
178
|
msgid ""
|
|
179
179
|
"Skipping original date/time (from {datefield}) as it was not recognized: {v}"
|
|
180
180
|
msgstr ""
|
|
181
181
|
"Skipping original date/time (from {datefield}) as it was not recognized: {v}"
|
|
182
182
|
|
|
183
|
-
#: geopic_tag_reader/reader.py:
|
|
183
|
+
#: geopic_tag_reader/reader.py:704
|
|
184
184
|
#, python-brace-format
|
|
185
185
|
msgid ""
|
|
186
186
|
"GPSTimeStamp and GPSDateTime don't contain supported time format (in {group} "
|
|
@@ -189,12 +189,12 @@ msgstr ""
|
|
|
189
189
|
"GPSTimeStamp and GPSDateTime don't contain supported time format (in {group} "
|
|
190
190
|
"group)"
|
|
191
191
|
|
|
192
|
-
#: geopic_tag_reader/reader.py:
|
|
192
|
+
#: geopic_tag_reader/reader.py:735
|
|
193
193
|
#, python-brace-format
|
|
194
194
|
msgid "Skipping GPS date/time ({group} group) as it was not recognized: {v}"
|
|
195
195
|
msgstr "Skipping GPS date/time ({group} group) as it was not recognized: {v}"
|
|
196
196
|
|
|
197
|
-
#: geopic_tag_reader/reader.py:
|
|
197
|
+
#: geopic_tag_reader/reader.py:761
|
|
198
198
|
#, python-brace-format
|
|
199
199
|
msgid ""
|
|
200
200
|
"Microseconds read from decimal seconds value ({microsecondsFromSeconds}) is "
|
|
Binary file
|
|
@@ -8,7 +8,7 @@ msgstr ""
|
|
|
8
8
|
"Project-Id-Version: PACKAGE VERSION\n"
|
|
9
9
|
"Report-Msgid-Bugs-To: \n"
|
|
10
10
|
"POT-Creation-Date: 2024-11-24 15:36+0100\n"
|
|
11
|
-
"PO-Revision-Date:
|
|
11
|
+
"PO-Revision-Date: 2025-01-17 15:11+0000\n"
|
|
12
12
|
"Last-Translator: Rémi Simonnin <remisimonnin@orange.fr>\n"
|
|
13
13
|
"Language-Team: Esperanto <http://weblate.panoramax.xyz/projects/panoramax/"
|
|
14
14
|
"tag-reader/eo/>\n"
|
|
@@ -73,11 +73,11 @@ msgstr "Tango:"
|
|
|
73
73
|
|
|
74
74
|
#: geopic_tag_reader/main.py:39
|
|
75
75
|
msgid "Roll:"
|
|
76
|
-
msgstr ""
|
|
76
|
+
msgstr "Angulo de ruliĝo:"
|
|
77
77
|
|
|
78
78
|
#: geopic_tag_reader/main.py:40
|
|
79
79
|
msgid "Yaw:"
|
|
80
|
-
msgstr ""
|
|
80
|
+
msgstr "Angulo de laciĝo:"
|
|
81
81
|
|
|
82
82
|
#: geopic_tag_reader/main.py:43
|
|
83
83
|
msgid "Warnings raised by reader:"
|
|
@@ -205,3 +205,15 @@ msgstr ""
|
|
|
205
205
|
#, python-brace-format
|
|
206
206
|
msgid "Unsupported key in additional tags ({k})"
|
|
207
207
|
msgstr "Nesubtenata ŝlosilo en aldonaj etikedoj ({k})"
|
|
208
|
+
|
|
209
|
+
#: geopic_tag_reader/main.py:28
|
|
210
|
+
msgid "GPS accuracy:"
|
|
211
|
+
msgstr "GPS-precizeco:"
|
|
212
|
+
|
|
213
|
+
#: geopic_tag_reader/main.py:38
|
|
214
|
+
msgid "Field of view:"
|
|
215
|
+
msgstr "Vida kampo:"
|
|
216
|
+
|
|
217
|
+
#: geopic_tag_reader/main.py:39
|
|
218
|
+
msgid "Sensor width:"
|
|
219
|
+
msgstr "Larĝeco de la sensilo:"
|
|
Binary file
|
|
@@ -8,16 +8,16 @@ msgstr ""
|
|
|
8
8
|
"Project-Id-Version: \n"
|
|
9
9
|
"Report-Msgid-Bugs-To: \n"
|
|
10
10
|
"POT-Creation-Date: 2024-10-28 11:05+0100\n"
|
|
11
|
-
"PO-Revision-Date:
|
|
12
|
-
"Last-Translator:
|
|
13
|
-
"Language-Team: French <http://weblate.panoramax.xyz/projects/panoramax/
|
|
14
|
-
"reader/fr/>\n"
|
|
11
|
+
"PO-Revision-Date: 2025-01-10 14:14+0000\n"
|
|
12
|
+
"Last-Translator: PanierAvide <adrien@pavie.info>\n"
|
|
13
|
+
"Language-Team: French <http://weblate.panoramax.xyz/projects/panoramax/"
|
|
14
|
+
"tag-reader/fr/>\n"
|
|
15
15
|
"Language: fr\n"
|
|
16
16
|
"MIME-Version: 1.0\n"
|
|
17
17
|
"Content-Type: text/plain; charset=UTF-8\n"
|
|
18
18
|
"Content-Transfer-Encoding: 8bit\n"
|
|
19
19
|
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
|
20
|
-
"X-Generator:
|
|
20
|
+
"X-Generator: Weblate 5.4.3\n"
|
|
21
21
|
|
|
22
22
|
#: geopic_tag_reader/main.py:26
|
|
23
23
|
msgid "Latitude:"
|
|
@@ -233,3 +233,15 @@ msgstr "Clé non-supportée dans les attributs additionnels ({k})"
|
|
|
233
233
|
#~ msgid "Skipping GPS date/time ({group} group) as it was not recognized:"
|
|
234
234
|
#~ msgstr ""
|
|
235
235
|
#~ "Date/heure du GPS (groupe {group}) ignorée car elle n'a pas été reconnue :"
|
|
236
|
+
|
|
237
|
+
#: geopic_tag_reader/main.py:28
|
|
238
|
+
msgid "GPS accuracy:"
|
|
239
|
+
msgstr "Précision GPS :"
|
|
240
|
+
|
|
241
|
+
#: geopic_tag_reader/main.py:38
|
|
242
|
+
msgid "Field of view:"
|
|
243
|
+
msgstr "Angle de vue :"
|
|
244
|
+
|
|
245
|
+
#: geopic_tag_reader/main.py:39
|
|
246
|
+
msgid "Sensor width:"
|
|
247
|
+
msgstr "Longueur du capteur :"
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
# SOME DESCRIPTIVE TITLE.
|
|
2
|
+
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
|
3
|
+
# This file is distributed under the same license as the PACKAGE package.
|
|
4
|
+
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
|
5
|
+
#
|
|
6
|
+
#, fuzzy
|
|
7
|
+
msgid ""
|
|
8
|
+
msgstr ""
|
|
9
|
+
"Project-Id-Version: PACKAGE VERSION\n"
|
|
10
|
+
"Report-Msgid-Bugs-To: \n"
|
|
11
|
+
"POT-Creation-Date: 2025-02-10 11:04+0100\n"
|
|
12
|
+
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
|
13
|
+
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
14
|
+
"Language-Team: LANGUAGE <LL@li.org>\n"
|
|
15
|
+
"Language: \n"
|
|
16
|
+
"MIME-Version: 1.0\n"
|
|
17
|
+
"Content-Type: text/plain; charset=CHARSET\n"
|
|
18
|
+
"Content-Transfer-Encoding: 8bit\n"
|
|
19
|
+
|
|
20
|
+
#: geopic_tag_reader/main.py:26
|
|
21
|
+
msgid "Latitude:"
|
|
22
|
+
msgstr ""
|
|
23
|
+
|
|
24
|
+
#: geopic_tag_reader/main.py:27
|
|
25
|
+
msgid "Longitude:"
|
|
26
|
+
msgstr ""
|
|
27
|
+
|
|
28
|
+
#: geopic_tag_reader/main.py:28
|
|
29
|
+
msgid "GPS accuracy:"
|
|
30
|
+
msgstr ""
|
|
31
|
+
|
|
32
|
+
#: geopic_tag_reader/main.py:28 geopic_tag_reader/main.py:31
|
|
33
|
+
#: geopic_tag_reader/main.py:32
|
|
34
|
+
msgid "not set"
|
|
35
|
+
msgstr ""
|
|
36
|
+
|
|
37
|
+
#: geopic_tag_reader/main.py:29
|
|
38
|
+
msgid "Timestamp:"
|
|
39
|
+
msgstr ""
|
|
40
|
+
|
|
41
|
+
#: geopic_tag_reader/main.py:31
|
|
42
|
+
msgid "(GPS)"
|
|
43
|
+
msgstr ""
|
|
44
|
+
|
|
45
|
+
#: geopic_tag_reader/main.py:32
|
|
46
|
+
msgid "(Camera)"
|
|
47
|
+
msgstr ""
|
|
48
|
+
|
|
49
|
+
#: geopic_tag_reader/main.py:33
|
|
50
|
+
msgid "Heading:"
|
|
51
|
+
msgstr ""
|
|
52
|
+
|
|
53
|
+
#: geopic_tag_reader/main.py:34
|
|
54
|
+
msgid "Type:"
|
|
55
|
+
msgstr ""
|
|
56
|
+
|
|
57
|
+
#: geopic_tag_reader/main.py:35
|
|
58
|
+
msgid "Make:"
|
|
59
|
+
msgstr ""
|
|
60
|
+
|
|
61
|
+
#: geopic_tag_reader/main.py:36
|
|
62
|
+
msgid "Model:"
|
|
63
|
+
msgstr ""
|
|
64
|
+
|
|
65
|
+
#: geopic_tag_reader/main.py:37
|
|
66
|
+
msgid "Focal length:"
|
|
67
|
+
msgstr ""
|
|
68
|
+
|
|
69
|
+
#: geopic_tag_reader/main.py:38
|
|
70
|
+
msgid "Field of view:"
|
|
71
|
+
msgstr ""
|
|
72
|
+
|
|
73
|
+
#: geopic_tag_reader/main.py:39
|
|
74
|
+
msgid "Sensor width:"
|
|
75
|
+
msgstr ""
|
|
76
|
+
|
|
77
|
+
#: geopic_tag_reader/main.py:40
|
|
78
|
+
msgid "Crop parameters:"
|
|
79
|
+
msgstr ""
|
|
80
|
+
|
|
81
|
+
#: geopic_tag_reader/main.py:41
|
|
82
|
+
msgid "Pitch:"
|
|
83
|
+
msgstr ""
|
|
84
|
+
|
|
85
|
+
#: geopic_tag_reader/main.py:42
|
|
86
|
+
msgid "Roll:"
|
|
87
|
+
msgstr ""
|
|
88
|
+
|
|
89
|
+
#: geopic_tag_reader/main.py:43
|
|
90
|
+
msgid "Yaw:"
|
|
91
|
+
msgstr ""
|
|
92
|
+
|
|
93
|
+
#: geopic_tag_reader/main.py:46
|
|
94
|
+
msgid "Warnings raised by reader:"
|
|
95
|
+
msgstr ""
|
|
96
|
+
|
|
97
|
+
#: geopic_tag_reader/reader.py:228
|
|
98
|
+
msgid "Read latitude is out of WGS84 bounds (should be in [-90, 90])"
|
|
99
|
+
msgstr ""
|
|
100
|
+
|
|
101
|
+
#: geopic_tag_reader/reader.py:230
|
|
102
|
+
msgid "Read longitude is out of WGS84 bounds (should be in [-180, 180])"
|
|
103
|
+
msgstr ""
|
|
104
|
+
|
|
105
|
+
#: geopic_tag_reader/reader.py:258
|
|
106
|
+
#, python-brace-format
|
|
107
|
+
msgid "Skipping Mapillary date/time as it was not recognized: {v}"
|
|
108
|
+
msgstr ""
|
|
109
|
+
|
|
110
|
+
#: geopic_tag_reader/reader.py:288
|
|
111
|
+
msgid "No heading value was found, this reduces usability of picture"
|
|
112
|
+
msgstr ""
|
|
113
|
+
|
|
114
|
+
#: geopic_tag_reader/reader.py:331
|
|
115
|
+
msgid ""
|
|
116
|
+
"No make and model value found, no assumption on focal length or GPS "
|
|
117
|
+
"precision can be made"
|
|
118
|
+
msgstr ""
|
|
119
|
+
|
|
120
|
+
#: geopic_tag_reader/reader.py:381
|
|
121
|
+
msgid ""
|
|
122
|
+
"No focal length value was found, this prevents calculating field of view"
|
|
123
|
+
msgstr ""
|
|
124
|
+
|
|
125
|
+
#: geopic_tag_reader/reader.py:433
|
|
126
|
+
msgid "No GPS accuracy value found, this prevents computing a quality score"
|
|
127
|
+
msgstr ""
|
|
128
|
+
|
|
129
|
+
#: geopic_tag_reader/reader.py:435
|
|
130
|
+
msgid ""
|
|
131
|
+
"No GPS horizontal positioning error value found, GPS accuracy can only be "
|
|
132
|
+
"estimated"
|
|
133
|
+
msgstr ""
|
|
134
|
+
|
|
135
|
+
#: geopic_tag_reader/reader.py:442
|
|
136
|
+
msgid "No GPS coordinates or broken coordinates in picture EXIF tags"
|
|
137
|
+
msgstr ""
|
|
138
|
+
|
|
139
|
+
#: geopic_tag_reader/reader.py:448
|
|
140
|
+
msgid "No valid date in picture EXIF tags"
|
|
141
|
+
msgstr ""
|
|
142
|
+
|
|
143
|
+
#: geopic_tag_reader/reader.py:453
|
|
144
|
+
msgid "The picture is missing mandatory metadata:"
|
|
145
|
+
msgstr ""
|
|
146
|
+
|
|
147
|
+
#: geopic_tag_reader/reader.py:567 geopic_tag_reader/reader.py:596
|
|
148
|
+
msgid "GPSLatitudeRef not found, assuming GPSLatitudeRef is North"
|
|
149
|
+
msgstr ""
|
|
150
|
+
|
|
151
|
+
#: geopic_tag_reader/reader.py:575
|
|
152
|
+
msgid "Broken GPS coordinates in picture EXIF tags"
|
|
153
|
+
msgstr ""
|
|
154
|
+
|
|
155
|
+
#: geopic_tag_reader/reader.py:578 geopic_tag_reader/reader.py:602
|
|
156
|
+
msgid "GPSLongitudeRef not found, assuming GPSLongitudeRef is East"
|
|
157
|
+
msgstr ""
|
|
158
|
+
|
|
159
|
+
#: geopic_tag_reader/reader.py:663
|
|
160
|
+
msgid "Precise timezone information not found, fallback to UTC"
|
|
161
|
+
msgstr ""
|
|
162
|
+
|
|
163
|
+
#: geopic_tag_reader/reader.py:668
|
|
164
|
+
msgid ""
|
|
165
|
+
"Precise timezone information not found (and no GPS coordinates to help), "
|
|
166
|
+
"fallback to UTC"
|
|
167
|
+
msgstr ""
|
|
168
|
+
|
|
169
|
+
#: geopic_tag_reader/reader.py:672
|
|
170
|
+
#, python-brace-format
|
|
171
|
+
msgid ""
|
|
172
|
+
"Skipping original date/time (from {datefield}) as it was not recognized: {v}"
|
|
173
|
+
msgstr ""
|
|
174
|
+
|
|
175
|
+
#: geopic_tag_reader/reader.py:704
|
|
176
|
+
#, python-brace-format
|
|
177
|
+
msgid ""
|
|
178
|
+
"GPSTimeStamp and GPSDateTime don't contain supported time format (in {group} "
|
|
179
|
+
"group)"
|
|
180
|
+
msgstr ""
|
|
181
|
+
|
|
182
|
+
#: geopic_tag_reader/reader.py:735
|
|
183
|
+
#, python-brace-format
|
|
184
|
+
msgid "Skipping GPS date/time ({group} group) as it was not recognized: {v}"
|
|
185
|
+
msgstr ""
|
|
186
|
+
|
|
187
|
+
#: geopic_tag_reader/reader.py:761
|
|
188
|
+
#, python-brace-format
|
|
189
|
+
msgid ""
|
|
190
|
+
"Microseconds read from decimal seconds value ({microsecondsFromSeconds}) is "
|
|
191
|
+
"not matching value from EXIF field ({microseconds}). Max value will be kept."
|
|
192
|
+
msgstr ""
|
|
193
|
+
|
|
194
|
+
#: geopic_tag_reader/writer.py:132
|
|
195
|
+
#, python-brace-format
|
|
196
|
+
msgid "Unsupported key in additional tags ({k})"
|
|
197
|
+
msgstr ""
|
|
Binary file
|
|
@@ -8,7 +8,7 @@ msgstr ""
|
|
|
8
8
|
"Project-Id-Version: PACKAGE VERSION\n"
|
|
9
9
|
"Report-Msgid-Bugs-To: \n"
|
|
10
10
|
"POT-Creation-Date: 2024-10-28 11:05+0100\n"
|
|
11
|
-
"PO-Revision-Date:
|
|
11
|
+
"PO-Revision-Date: 2025-01-09 08:14+0000\n"
|
|
12
12
|
"Last-Translator: Marco <e5m28oxuv@mozmail.com>\n"
|
|
13
13
|
"Language-Team: Italian <http://weblate.panoramax.xyz/projects/panoramax/"
|
|
14
14
|
"tag-reader/it/>\n"
|
|
@@ -210,3 +210,15 @@ msgstr ""
|
|
|
210
210
|
#, python-brace-format
|
|
211
211
|
msgid "Unsupported key in additional tags ({k})"
|
|
212
212
|
msgstr "Chiave non supportata negli attributi aggiuntivi ({k})"
|
|
213
|
+
|
|
214
|
+
#: geopic_tag_reader/main.py:28
|
|
215
|
+
msgid "GPS accuracy:"
|
|
216
|
+
msgstr "Precisione GPS:"
|
|
217
|
+
|
|
218
|
+
#: geopic_tag_reader/main.py:38
|
|
219
|
+
msgid "Field of view:"
|
|
220
|
+
msgstr "Campo visivo:"
|
|
221
|
+
|
|
222
|
+
#: geopic_tag_reader/main.py:39
|
|
223
|
+
msgid "Sensor width:"
|
|
224
|
+
msgstr "Larghezza sensore:"
|
|
Binary file
|
|
@@ -3,18 +3,17 @@
|
|
|
3
3
|
# This file is distributed under the same license as the PACKAGE package.
|
|
4
4
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
|
5
5
|
#
|
|
6
|
-
#, fuzzy
|
|
7
6
|
msgid ""
|
|
8
7
|
msgstr ""
|
|
9
8
|
"Project-Id-Version: PACKAGE VERSION\n"
|
|
10
9
|
"Report-Msgid-Bugs-To: \n"
|
|
11
10
|
"POT-Creation-Date: 2025-01-06 15:31+0100\n"
|
|
12
11
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
|
13
|
-
"Last-Translator:
|
|
14
|
-
"Language-Team:
|
|
15
|
-
"Language: \n"
|
|
12
|
+
"Last-Translator: Automatically generated\n"
|
|
13
|
+
"Language-Team: none\n"
|
|
14
|
+
"Language: ja\n"
|
|
16
15
|
"MIME-Version: 1.0\n"
|
|
17
|
-
"Content-Type: text/plain; charset=
|
|
16
|
+
"Content-Type: text/plain; charset=UTF-8\n"
|
|
18
17
|
"Content-Transfer-Encoding: 8bit\n"
|
|
19
18
|
|
|
20
19
|
#: geopic_tag_reader/main.py:26
|
geopic_tag_reader-1.4.2/geopic_tag_reader/translations/zh_Hant/LC_MESSAGES/geopic_tag_reader.mo
ADDED
|
Binary file
|
geopic_tag_reader-1.4.2/geopic_tag_reader/translations/zh_Hant/LC_MESSAGES/geopic_tag_reader.po
ADDED
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
# SOME DESCRIPTIVE TITLE.
|
|
2
|
+
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
|
3
|
+
# This file is distributed under the same license as the PACKAGE package.
|
|
4
|
+
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
|
5
|
+
#
|
|
6
|
+
msgid ""
|
|
7
|
+
msgstr ""
|
|
8
|
+
"Project-Id-Version: PACKAGE VERSION\n"
|
|
9
|
+
"Report-Msgid-Bugs-To: \n"
|
|
10
|
+
"POT-Creation-Date: 2025-01-06 15:31+0100\n"
|
|
11
|
+
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
|
12
|
+
"Last-Translator: Automatically generated\n"
|
|
13
|
+
"Language-Team: none\n"
|
|
14
|
+
"Language: zh_Hant\n"
|
|
15
|
+
"MIME-Version: 1.0\n"
|
|
16
|
+
"Content-Type: text/plain; charset=UTF-8\n"
|
|
17
|
+
"Content-Transfer-Encoding: 8bit\n"
|
|
18
|
+
|
|
19
|
+
#: geopic_tag_reader/main.py:26
|
|
20
|
+
msgid "Latitude:"
|
|
21
|
+
msgstr ""
|
|
22
|
+
|
|
23
|
+
#: geopic_tag_reader/main.py:27
|
|
24
|
+
msgid "Longitude:"
|
|
25
|
+
msgstr ""
|
|
26
|
+
|
|
27
|
+
#: geopic_tag_reader/main.py:28
|
|
28
|
+
msgid "GPS accuracy:"
|
|
29
|
+
msgstr ""
|
|
30
|
+
|
|
31
|
+
#: geopic_tag_reader/main.py:28 geopic_tag_reader/main.py:31
|
|
32
|
+
#: geopic_tag_reader/main.py:32
|
|
33
|
+
msgid "not set"
|
|
34
|
+
msgstr ""
|
|
35
|
+
|
|
36
|
+
#: geopic_tag_reader/main.py:29
|
|
37
|
+
msgid "Timestamp:"
|
|
38
|
+
msgstr ""
|
|
39
|
+
|
|
40
|
+
#: geopic_tag_reader/main.py:31
|
|
41
|
+
msgid "(GPS)"
|
|
42
|
+
msgstr ""
|
|
43
|
+
|
|
44
|
+
#: geopic_tag_reader/main.py:32
|
|
45
|
+
msgid "(Camera)"
|
|
46
|
+
msgstr ""
|
|
47
|
+
|
|
48
|
+
#: geopic_tag_reader/main.py:33
|
|
49
|
+
msgid "Heading:"
|
|
50
|
+
msgstr ""
|
|
51
|
+
|
|
52
|
+
#: geopic_tag_reader/main.py:34
|
|
53
|
+
msgid "Type:"
|
|
54
|
+
msgstr ""
|
|
55
|
+
|
|
56
|
+
#: geopic_tag_reader/main.py:35
|
|
57
|
+
msgid "Make:"
|
|
58
|
+
msgstr ""
|
|
59
|
+
|
|
60
|
+
#: geopic_tag_reader/main.py:36
|
|
61
|
+
msgid "Model:"
|
|
62
|
+
msgstr ""
|
|
63
|
+
|
|
64
|
+
#: geopic_tag_reader/main.py:37
|
|
65
|
+
msgid "Focal length:"
|
|
66
|
+
msgstr ""
|
|
67
|
+
|
|
68
|
+
#: geopic_tag_reader/main.py:38
|
|
69
|
+
msgid "Field of view:"
|
|
70
|
+
msgstr ""
|
|
71
|
+
|
|
72
|
+
#: geopic_tag_reader/main.py:39
|
|
73
|
+
msgid "Sensor width:"
|
|
74
|
+
msgstr ""
|
|
75
|
+
|
|
76
|
+
#: geopic_tag_reader/main.py:40
|
|
77
|
+
msgid "Crop parameters:"
|
|
78
|
+
msgstr ""
|
|
79
|
+
|
|
80
|
+
#: geopic_tag_reader/main.py:41
|
|
81
|
+
msgid "Pitch:"
|
|
82
|
+
msgstr ""
|
|
83
|
+
|
|
84
|
+
#: geopic_tag_reader/main.py:42
|
|
85
|
+
msgid "Roll:"
|
|
86
|
+
msgstr ""
|
|
87
|
+
|
|
88
|
+
#: geopic_tag_reader/main.py:43
|
|
89
|
+
msgid "Yaw:"
|
|
90
|
+
msgstr ""
|
|
91
|
+
|
|
92
|
+
#: geopic_tag_reader/main.py:46
|
|
93
|
+
msgid "Warnings raised by reader:"
|
|
94
|
+
msgstr ""
|
|
95
|
+
|
|
96
|
+
#: geopic_tag_reader/reader.py:228
|
|
97
|
+
msgid "Read latitude is out of WGS84 bounds (should be in [-90, 90])"
|
|
98
|
+
msgstr ""
|
|
99
|
+
|
|
100
|
+
#: geopic_tag_reader/reader.py:230
|
|
101
|
+
msgid "Read longitude is out of WGS84 bounds (should be in [-180, 180])"
|
|
102
|
+
msgstr ""
|
|
103
|
+
|
|
104
|
+
#: geopic_tag_reader/reader.py:258
|
|
105
|
+
#, python-brace-format
|
|
106
|
+
msgid "Skipping Mapillary date/time as it was not recognized: {v}"
|
|
107
|
+
msgstr ""
|
|
108
|
+
|
|
109
|
+
#: geopic_tag_reader/reader.py:288
|
|
110
|
+
msgid "No heading value was found, this reduces usability of picture"
|
|
111
|
+
msgstr ""
|
|
112
|
+
|
|
113
|
+
#: geopic_tag_reader/reader.py:331
|
|
114
|
+
msgid ""
|
|
115
|
+
"No make and model value found, no assumption on focal length or GPS "
|
|
116
|
+
"precision can be made"
|
|
117
|
+
msgstr ""
|
|
118
|
+
|
|
119
|
+
#: geopic_tag_reader/reader.py:382
|
|
120
|
+
msgid ""
|
|
121
|
+
"No focal length value was found, this prevents calculating field of view"
|
|
122
|
+
msgstr ""
|
|
123
|
+
|
|
124
|
+
#: geopic_tag_reader/reader.py:440
|
|
125
|
+
msgid "No GPS accuracy value found, this prevents computing a quality score"
|
|
126
|
+
msgstr ""
|
|
127
|
+
|
|
128
|
+
#: geopic_tag_reader/reader.py:442
|
|
129
|
+
msgid ""
|
|
130
|
+
"No GPS horizontal positioning error value found, GPS accuracy can only be "
|
|
131
|
+
"estimated"
|
|
132
|
+
msgstr ""
|
|
133
|
+
|
|
134
|
+
#: geopic_tag_reader/reader.py:449
|
|
135
|
+
msgid "No GPS coordinates or broken coordinates in picture EXIF tags"
|
|
136
|
+
msgstr ""
|
|
137
|
+
|
|
138
|
+
#: geopic_tag_reader/reader.py:455
|
|
139
|
+
msgid "No valid date in picture EXIF tags"
|
|
140
|
+
msgstr ""
|
|
141
|
+
|
|
142
|
+
#: geopic_tag_reader/reader.py:460
|
|
143
|
+
msgid "The picture is missing mandatory metadata:"
|
|
144
|
+
msgstr ""
|
|
145
|
+
|
|
146
|
+
#: geopic_tag_reader/reader.py:557 geopic_tag_reader/reader.py:586
|
|
147
|
+
msgid "GPSLatitudeRef not found, assuming GPSLatitudeRef is North"
|
|
148
|
+
msgstr ""
|
|
149
|
+
|
|
150
|
+
#: geopic_tag_reader/reader.py:565
|
|
151
|
+
msgid "Broken GPS coordinates in picture EXIF tags"
|
|
152
|
+
msgstr ""
|
|
153
|
+
|
|
154
|
+
#: geopic_tag_reader/reader.py:568 geopic_tag_reader/reader.py:592
|
|
155
|
+
msgid "GPSLongitudeRef not found, assuming GPSLongitudeRef is East"
|
|
156
|
+
msgstr ""
|
|
157
|
+
|
|
158
|
+
#: geopic_tag_reader/reader.py:653
|
|
159
|
+
msgid "Precise timezone information not found, fallback to UTC"
|
|
160
|
+
msgstr ""
|
|
161
|
+
|
|
162
|
+
#: geopic_tag_reader/reader.py:658
|
|
163
|
+
msgid ""
|
|
164
|
+
"Precise timezone information not found (and no GPS coordinates to help), "
|
|
165
|
+
"fallback to UTC"
|
|
166
|
+
msgstr ""
|
|
167
|
+
|
|
168
|
+
#: geopic_tag_reader/reader.py:662
|
|
169
|
+
#, python-brace-format
|
|
170
|
+
msgid ""
|
|
171
|
+
"Skipping original date/time (from {datefield}) as it was not recognized: {v}"
|
|
172
|
+
msgstr ""
|
|
173
|
+
|
|
174
|
+
#: geopic_tag_reader/reader.py:694
|
|
175
|
+
#, python-brace-format
|
|
176
|
+
msgid ""
|
|
177
|
+
"GPSTimeStamp and GPSDateTime don't contain supported time format (in {group} "
|
|
178
|
+
"group)"
|
|
179
|
+
msgstr ""
|
|
180
|
+
|
|
181
|
+
#: geopic_tag_reader/reader.py:725
|
|
182
|
+
#, python-brace-format
|
|
183
|
+
msgid "Skipping GPS date/time ({group} group) as it was not recognized: {v}"
|
|
184
|
+
msgstr ""
|
|
185
|
+
|
|
186
|
+
#: geopic_tag_reader/reader.py:751
|
|
187
|
+
#, python-brace-format
|
|
188
|
+
msgid ""
|
|
189
|
+
"Microseconds read from decimal seconds value ({microsecondsFromSeconds}) is "
|
|
190
|
+
"not matching value from EXIF field ({microseconds}). Max value will be kept."
|
|
191
|
+
msgstr ""
|
|
192
|
+
|
|
193
|
+
#: geopic_tag_reader/writer.py:132
|
|
194
|
+
#, python-brace-format
|
|
195
|
+
msgid "Unsupported key in additional tags ({k})"
|
|
196
|
+
msgstr ""
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
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
|