mapillary-tools 0.14.0a2__py3-none-any.whl → 0.14.1__py3-none-any.whl

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 (49) hide show
  1. mapillary_tools/__init__.py +1 -1
  2. mapillary_tools/api_v4.py +66 -262
  3. mapillary_tools/authenticate.py +54 -46
  4. mapillary_tools/blackvue_parser.py +79 -22
  5. mapillary_tools/commands/__main__.py +15 -16
  6. mapillary_tools/commands/upload.py +33 -4
  7. mapillary_tools/config.py +38 -17
  8. mapillary_tools/constants.py +127 -43
  9. mapillary_tools/exceptions.py +4 -0
  10. mapillary_tools/exif_read.py +2 -1
  11. mapillary_tools/exif_write.py +3 -1
  12. mapillary_tools/exiftool_read_video.py +52 -15
  13. mapillary_tools/exiftool_runner.py +4 -24
  14. mapillary_tools/ffmpeg.py +406 -232
  15. mapillary_tools/geo.py +16 -0
  16. mapillary_tools/geotag/__init__.py +0 -0
  17. mapillary_tools/geotag/base.py +8 -4
  18. mapillary_tools/geotag/factory.py +106 -89
  19. mapillary_tools/geotag/geotag_images_from_exiftool.py +27 -20
  20. mapillary_tools/geotag/geotag_images_from_gpx.py +7 -6
  21. mapillary_tools/geotag/geotag_images_from_video.py +35 -0
  22. mapillary_tools/geotag/geotag_videos_from_exiftool.py +61 -14
  23. mapillary_tools/geotag/geotag_videos_from_gpx.py +22 -9
  24. mapillary_tools/geotag/options.py +25 -3
  25. mapillary_tools/geotag/utils.py +9 -12
  26. mapillary_tools/geotag/video_extractors/base.py +1 -1
  27. mapillary_tools/geotag/video_extractors/exiftool.py +1 -1
  28. mapillary_tools/geotag/video_extractors/gpx.py +61 -70
  29. mapillary_tools/geotag/video_extractors/native.py +34 -31
  30. mapillary_tools/history.py +128 -8
  31. mapillary_tools/http.py +211 -0
  32. mapillary_tools/mp4/construct_mp4_parser.py +8 -2
  33. mapillary_tools/process_geotag_properties.py +47 -35
  34. mapillary_tools/process_sequence_properties.py +340 -325
  35. mapillary_tools/sample_video.py +8 -8
  36. mapillary_tools/serializer/description.py +587 -0
  37. mapillary_tools/serializer/gpx.py +132 -0
  38. mapillary_tools/types.py +44 -610
  39. mapillary_tools/upload.py +327 -352
  40. mapillary_tools/upload_api_v4.py +125 -72
  41. mapillary_tools/uploader.py +797 -216
  42. mapillary_tools/utils.py +57 -5
  43. {mapillary_tools-0.14.0a2.dist-info → mapillary_tools-0.14.1.dist-info}/METADATA +91 -34
  44. mapillary_tools-0.14.1.dist-info/RECORD +76 -0
  45. {mapillary_tools-0.14.0a2.dist-info → mapillary_tools-0.14.1.dist-info}/WHEEL +1 -1
  46. mapillary_tools-0.14.0a2.dist-info/RECORD +0 -72
  47. {mapillary_tools-0.14.0a2.dist-info → mapillary_tools-0.14.1.dist-info}/entry_points.txt +0 -0
  48. {mapillary_tools-0.14.0a2.dist-info → mapillary_tools-0.14.1.dist-info}/licenses/LICENSE +0 -0
  49. {mapillary_tools-0.14.0a2.dist-info → mapillary_tools-0.14.1.dist-info}/top_level.txt +0 -0
mapillary_tools/utils.py CHANGED
@@ -1,9 +1,11 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import concurrent.futures
4
+
3
5
  import hashlib
6
+ import logging
4
7
  import os
5
8
  import typing as T
6
- from multiprocessing import Pool
7
9
  from pathlib import Path
8
10
 
9
11
 
@@ -197,6 +199,13 @@ def get_file_size(path: Path) -> int:
197
199
  return os.path.getsize(path)
198
200
 
199
201
 
202
+ def get_file_size_quietly(path: Path) -> int:
203
+ try:
204
+ return get_file_size(path)
205
+ except Exception:
206
+ return 0
207
+
208
+
200
209
  TMapIn = T.TypeVar("TMapIn")
201
210
  TMapOut = T.TypeVar("TMapOut")
202
211
 
@@ -207,14 +216,57 @@ def mp_map_maybe(
207
216
  num_processes: int | None = None,
208
217
  ) -> T.Generator[TMapOut, None, None]:
209
218
  if num_processes is None:
210
- pool_num_processes = None
219
+ max_workers = None
211
220
  disable_multiprocessing = False
212
221
  else:
213
- pool_num_processes = max(num_processes, 1)
222
+ max_workers = max(num_processes, 1)
214
223
  disable_multiprocessing = num_processes <= 0
215
224
 
216
225
  if disable_multiprocessing:
217
226
  yield from map(func, iterable)
218
227
  else:
219
- with Pool(processes=pool_num_processes) as pool:
220
- yield from pool.imap(func, iterable)
228
+ app_logger = logging.getLogger(get_app_name())
229
+ with concurrent.futures.ProcessPoolExecutor(
230
+ max_workers=max_workers,
231
+ initializer=configure_logger,
232
+ initargs=(None, app_logger.getEffectiveLevel()),
233
+ ) as executor:
234
+ yield from executor.map(func, iterable)
235
+
236
+
237
+ def configure_logger(
238
+ logger: logging.Logger | None = None, level: int = logging.INFO
239
+ ) -> logging.Logger:
240
+ """Configure logging in each worker process"""
241
+ if logger is None:
242
+ # Root logger if app name is ""
243
+ logger = logging.getLogger(get_app_name())
244
+
245
+ logger.setLevel(level)
246
+
247
+ try:
248
+ # Disable globally for now. TODO Disable it in non-interactive mode only
249
+ raise ImportError
250
+ from rich.console import Console # type: ignore
251
+ from rich.logging import RichHandler # type: ignore
252
+ except ImportError:
253
+ formatter = logging.Formatter(
254
+ "%(asctime)s.%(msecs)03d - %(levelname)-7s - %(message)s",
255
+ datefmt="%H:%M:%S",
256
+ )
257
+ handler: logging.Handler = logging.StreamHandler()
258
+ handler.setFormatter(formatter)
259
+ else:
260
+ handler = RichHandler(console=Console(stderr=True), rich_tracebacks=True) # type: ignore
261
+
262
+ logger.addHandler(handler)
263
+
264
+ return logger
265
+
266
+
267
+ def get_app_name() -> str:
268
+ if __name__:
269
+ return __name__.split(".")[0]
270
+ else:
271
+ # Rare case
272
+ return ""
@@ -1,32 +1,38 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mapillary_tools
3
- Version: 0.14.0a2
3
+ Version: 0.14.1
4
4
  Summary: Mapillary Image/Video Import Pipeline
5
- Home-page: https://github.com/mapillary/mapillary_tools
6
- Author: Mapillary
5
+ Author-email: Mapillary <support@mapillary.com>
7
6
  License: BSD
8
- Requires-Python: >=3.8
7
+ Project-URL: Homepage, https://github.com/mapillary/mapillary_tools
8
+ Project-URL: Repository, https://github.com/mapillary/mapillary_tools
9
+ Project-URL: Issues, https://github.com/mapillary/mapillary_tools/issues
10
+ Keywords: mapillary,gis,computer vision,street view
11
+ Classifier: Development Status :: 5 - Production/Stable
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Intended Audience :: End Users/Desktop
14
+ Classifier: License :: OSI Approved :: BSD License
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.9
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
21
+ Requires-Python: >=3.9
9
22
  Description-Content-Type: text/markdown
10
23
  License-File: LICENSE
11
24
  Requires-Dist: appdirs<2.0.0,>=1.4.4
12
- Requires-Dist: construct<3.0.0,>=2.10.0
13
- Requires-Dist: exifread==2.3.2
14
- Requires-Dist: piexif==1.1.3
15
- Requires-Dist: gpxpy<1.6.0,>=1.5.0
25
+ Requires-Dist: construct~=2.10.0
26
+ Requires-Dist: exifread~=3.0
27
+ Requires-Dist: gpxpy~=1.6.0
28
+ Requires-Dist: humanize>=4.12.3
29
+ Requires-Dist: jsonschema~=4.17.0
30
+ Requires-Dist: piexif~=1.1
16
31
  Requires-Dist: pynmea2<2.0.0,>=1.12.0
17
32
  Requires-Dist: requests[socks]<3.0.0,>=2.20.0
18
33
  Requires-Dist: tqdm<5.0,>=4.0
19
- Requires-Dist: typing_extensions
20
- Requires-Dist: jsonschema~=4.17.3
21
- Dynamic: author
22
- Dynamic: description
23
- Dynamic: description-content-type
24
- Dynamic: home-page
25
- Dynamic: license
34
+ Requires-Dist: typing-extensions>=4.12.2
26
35
  Dynamic: license-file
27
- Dynamic: requires-dist
28
- Dynamic: requires-python
29
- Dynamic: summary
30
36
 
31
37
  <p align="center">
32
38
  <a href="https://github.com/mapillary/mapillary_tools/">
@@ -58,18 +64,40 @@ mapillary_tools --help
58
64
  <!--ts-->
59
65
 
60
66
  - [Supported File Formats](#supported-file-formats)
67
+ - [Image Formats](#image-formats)
68
+ - [Video Formats](#video-formats)
61
69
  - [Installation](#installation)
70
+ - [Standalone Executable](#standalone-executable)
71
+ - [Installing via pip](#installing-via-pip)
72
+ - [Installing on Android Devices](#installing-on-android-devices)
62
73
  - [Usage](#usage)
63
74
  - [Process and Upload](#process-and-upload)
64
75
  - [Process](#process)
65
76
  - [Upload](#upload)
66
77
  - [Advanced Usage](#advanced-usage)
67
78
  - [Local Video Processing](#local-video-processing)
79
+ - [Install FFmpeg](#install-ffmpeg)
80
+ - [Video Processing](#video-processing)
68
81
  - [Geotagging with GPX](#geotagging-with-gpx)
82
+ - [New video geotagging features (experimental)](#new-video-geotagging-features-experimental)
83
+ - [Usage](#usage-1)
84
+ - [Examples](#examples)
85
+ - [Generic supported videos](#generic-supported-videos)
86
+ - [External GPX](#external-gpx)
87
+ - [Insta360 stitched videos](#insta360-stitched-videos)
88
+ - [Limitations of `--video_geotag_source`](#limitations-of---video_geotag_source)
69
89
  - [Authenticate](#authenticate)
90
+ - [Examples](#examples-1)
70
91
  - [Image Description](#image-description)
71
92
  - [Zip Images](#zip-images)
72
93
  - [Development](#development)
94
+ - [Setup](#setup)
95
+ - [Option 1: Using uv (Recommended)](#option-1-using-uv-recommended)
96
+ - [Option 2: Using pip with virtual environment](#option-2-using-pip-with-virtual-environment)
97
+ - [Running the code](#running-the-code)
98
+ - [Tests](#tests)
99
+ - [Code Quality](#code-quality)
100
+ - [Release and Build](#release-and-build)
73
101
 
74
102
  <!--te-->
75
103
 
@@ -495,29 +523,49 @@ git clone git@github.com:mapillary/mapillary_tools.git
495
523
  cd mapillary_tools
496
524
  ```
497
525
 
498
- Set up the virtual environment. It is optional but recommended:
526
+ ### Option 1: Using uv (Recommended)
527
+
528
+ Use [uv](https://docs.astral.sh/uv/) - a fast Python package manager.
529
+
530
+ Install the project in development mode with all dependencies:
499
531
 
500
532
  ```sh
501
- pip install pipenv
533
+ # Install the project and development dependencies
534
+ uv sync --group dev
535
+
536
+ # Activate the virtual environment
537
+ source .venv/bin/activate # On Windows: .venv\Scripts\activate
502
538
  ```
503
539
 
504
- Install dependencies:
540
+ ### Option 2: Using pip with virtual environment
541
+
542
+ Set up a virtual environment (recommended):
505
543
 
506
544
  ```sh
507
- pipenv install -r requirements.txt
508
- pipenv install -r requirements-dev.txt
545
+ python -m venv .venv
546
+ source .venv/bin/activate # On Windows: .venv\Scripts\activate
509
547
  ```
510
548
 
511
- Enter the virtualenv shell:
549
+ Install the project in development mode:
512
550
 
513
551
  ```sh
514
- pipenv shell
552
+ # Install the project and all dependencies in editable mode
553
+ pip install -e .
554
+
555
+ # Install development dependencies
556
+ pip install --group dev
515
557
  ```
516
558
 
559
+ ## Running the code
560
+
517
561
  Run the code from the repository:
518
562
 
519
563
  ```sh
520
- python3 -m mapillary_tools.commands --version
564
+ # If you have mapillary_tools installed in editable mode
565
+ mapillary_tools --version
566
+
567
+ # Alternatively
568
+ python -m mapillary_tools.commands --version
521
569
  ```
522
570
 
523
571
  ## Tests
@@ -525,19 +573,28 @@ python3 -m mapillary_tools.commands --version
525
573
  Run tests:
526
574
 
527
575
  ```sh
528
- # test all cases
529
- python3 -m pytest -s -vv tests
530
- # or test a single case specifically
531
- python3 -m pytest -s -vv tests/unit/test_camm_parser.py::test_build_and_parse
576
+ # Test all cases
577
+ pytest -s -vv tests
578
+ # Or test a single case specifically
579
+ pytest -s -vv tests/unit/test_camm_parser.py::test_build_and_parse
532
580
  ```
533
581
 
534
- Run linting:
582
+ ## Code Quality
583
+
584
+ Run code formatting and linting:
535
585
 
536
586
  ```sh
537
- # format code
538
- black mapillary_tools tests
539
- # sort imports
587
+ # Format code with ruff
588
+ ruff format mapillary_tools tests
589
+
590
+ # Lint code with ruff
591
+ ruff check mapillary_tools tests
592
+
593
+ # Sort imports with usort
540
594
  usort format mapillary_tools tests
595
+
596
+ # Type checking with mypy
597
+ mypy mapillary_tools
541
598
  ```
542
599
 
543
600
  ## Release and Build
@@ -0,0 +1,76 @@
1
+ mapillary_tools/__init__.py,sha256=91RNgd9bTuNlioixZy3CssJc8LG26WWwcNDinmjqx20,19
2
+ mapillary_tools/api_v4.py,sha256=bckAU_atUs0pSuqySeY4W0Rs011a21ClJHo_mbbcXXw,4864
3
+ mapillary_tools/authenticate.py,sha256=JXmoTPcAyv9difceKIupXz7vyuLcNZ_AnxLrUVdtPPs,11745
4
+ mapillary_tools/blackvue_parser.py,sha256=ea2JtU9MWU6yB0bQlF970_Of0bJVofSTRq1P30WKW-0,5623
5
+ mapillary_tools/config.py,sha256=97zsyPnZXGincEkM__c6UNWH25EMTtRKZGsp6vBpHy8,3326
6
+ mapillary_tools/constants.py,sha256=fk5HBczTBGyDOKQy-grzlf0SafiGwggdF8Ota13Rk0k,6235
7
+ mapillary_tools/exceptions.py,sha256=uxTgBEfXgGxT0XNGRIAZ5mjtdqsCYfP6gnaXAK_ewBM,2483
8
+ mapillary_tools/exif_read.py,sha256=nAbZDYAIBx3g4n6QIGKXX3s-A3SkfuvZQBInDrXMlKk,32220
9
+ mapillary_tools/exif_write.py,sha256=I9GSs8KRd28QyKPVNHuxesSVbBvahHqKBS3nw9HoLsg,8830
10
+ mapillary_tools/exiftool_read.py,sha256=5uatYE9mgbg2d9NAnPfX22nSRBjXhJ9ayMqNMd4QwGM,15779
11
+ mapillary_tools/exiftool_read_video.py,sha256=23O_bjUOVq6j7i3xMz6fY-XIEsjinsCejK_0nrbFyOM,16084
12
+ mapillary_tools/exiftool_runner.py,sha256=g4gSyqeh3D6EnMJ-c3s-RnO2EP_jD354Qkaz0Y-4D04,1658
13
+ mapillary_tools/ffmpeg.py,sha256=akpvvsjAR-Iiv-hOrUoJvPM9vUU3JqMQ5HJL1_NgwB8,22908
14
+ mapillary_tools/geo.py,sha256=mWaESfDf_zHmyvnt5aVFro4FGrjiULNsuZ6HfGUWvSA,11009
15
+ mapillary_tools/history.py,sha256=LP6e0zEYVBwRGUbFaGoE_AaBIEdpB4XrZsg9qwJVvRI,5344
16
+ mapillary_tools/http.py,sha256=-df_oGyImO2AOmPnXcKMcztlL4LOZLArE6ki81NMGUA,6411
17
+ mapillary_tools/ipc.py,sha256=DwWQb9hNshx0bg0Fo5NjY0mXjs-FkbR6tIQmjMgMtmg,1089
18
+ mapillary_tools/process_geotag_properties.py,sha256=lF2Po83BAGWlLTtS5AFf6MLLTm-kiImD8SW-tWIbyZ0,14419
19
+ mapillary_tools/process_sequence_properties.py,sha256=n4VjQHrgVjksIr3WoBviRhrQIBBDHGXMClolfyz6tu4,24057
20
+ mapillary_tools/sample_video.py,sha256=pKSj1Vc8e5p1XGjykBuKY9XieTOskc-9L3F4L407jDM,13935
21
+ mapillary_tools/telemetry.py,sha256=lL6qQbtOZft4DZZrCNK3njlwHT_30zLyYS_YRN5pgHY,1568
22
+ mapillary_tools/types.py,sha256=pIU2wcxiOUWT5Pd05pgNzY9EVEDlwoldtlF2IIYYvE0,5909
23
+ mapillary_tools/upload.py,sha256=yLunE66mZqTOiefN47KwO6auuyL5augbODyf5EafKeA,24084
24
+ mapillary_tools/upload_api_v4.py,sha256=VgOf7RhfUuzmlSBUp5CpekKIJ0xQrC0r-r0Ds9-wU4I,7344
25
+ mapillary_tools/uploader.py,sha256=gsXMyNriaFPFzCmtw9wpFSh6tDe4nrYe1agzwiVVehE,39484
26
+ mapillary_tools/utils.py,sha256=cP9idKt4EJqfC0qqOGneSoPNpPiYhaW8VjQ9CLYjESc,8092
27
+ mapillary_tools/camm/camm_builder.py,sha256=ub6Z9ijep8zAo1NOlU51Gxk95kQ2vfN58YgVCLmNMRk,9211
28
+ mapillary_tools/camm/camm_parser.py,sha256=aNHP65hNXYQBWBTfhaj_S5XYzmAHhjwcAfGhbm83__o,18043
29
+ mapillary_tools/commands/__init__.py,sha256=41CFrPLGlG3566uhxssEF3TGAtSpADFPPcDMHbViU0E,171
30
+ mapillary_tools/commands/__main__.py,sha256=W4jMlCA1jekytKA9MMn3mhKie2jgRhc00ylOY2lCxiw,4835
31
+ mapillary_tools/commands/authenticate.py,sha256=yqtpHMYzkyBrrchj6MARxB0ywUTfqCEOPkMbkyaO9Ks,1344
32
+ mapillary_tools/commands/process.py,sha256=Japc6_P0B_8HzoM8_82P3_YAiyBBaQZXS9TZF46pbMM,9771
33
+ mapillary_tools/commands/process_and_upload.py,sha256=-RB_86a5xKfQ7Ye79dh6yyJQpZg2xnJZAWOJsUNbUtQ,1041
34
+ mapillary_tools/commands/sample_video.py,sha256=jtnrZrsqqv5eYV1chNTas7RhfbeKBqbAUDUNRFjF01w,3253
35
+ mapillary_tools/commands/upload.py,sha256=Z06YJ_mZKiBQ1zLojGf6I5t1X4YBcK19sHD-9C0gdXM,3100
36
+ mapillary_tools/commands/video_process.py,sha256=-wQeeIwWXPmy81HQHam5A0huMLRHknkEFa_V1OwElU4,890
37
+ mapillary_tools/commands/video_process_and_upload.py,sha256=hOyq9L9TuD0JcqFSOOxdCdgsBA1iJ6fu1TtDbsUr8sI,1088
38
+ mapillary_tools/commands/zip.py,sha256=DVQuMLpbstwiy5o4pU_fBvM6eORuFjLeySd80AhHKU0,991
39
+ mapillary_tools/geotag/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
+ mapillary_tools/geotag/base.py,sha256=GVKorhJcTivvakcUfPzR6KMzRoIK1pxknDlLDqY2XUk,5166
41
+ mapillary_tools/geotag/factory.py,sha256=6CNQRTr9HTmOA65Iz09CVlGJCGdzOeS0sx5QZO_DXPY,10271
42
+ mapillary_tools/geotag/geotag_images_from_exif.py,sha256=a5fDOp4tlEoVNwrOCJBrvSPzu1LbyxL4RNrNDD0tPP0,608
43
+ mapillary_tools/geotag/geotag_images_from_exiftool.py,sha256=T_IOWgvieqCpfDUdma7K3qmAilme-wdjYrD4lSOdAM4,5707
44
+ mapillary_tools/geotag/geotag_images_from_gpx.py,sha256=EyhJjpP1L_DPRCX926aKeTvuxFxD-eWVCWgELp0-pzY,6313
45
+ mapillary_tools/geotag/geotag_images_from_gpx_file.py,sha256=HYQkwak32YBDuRrTNiIZOmE3iImCRc22HWWb485WRS4,1121
46
+ mapillary_tools/geotag/geotag_images_from_nmea_file.py,sha256=J8xj6ch9bMPRubJtsRGeb3sb9LyB0ZYy65NPEOVkUe8,1597
47
+ mapillary_tools/geotag/geotag_images_from_video.py,sha256=3NV3-NfSkxT0n_n8Ajqjab24x29H2vL98DpwJqnIvT8,4411
48
+ mapillary_tools/geotag/geotag_videos_from_exiftool.py,sha256=Splhtv21JvrbFPVuKycf5wen0wOJ0zqOWk8d4aSw-ys,5345
49
+ mapillary_tools/geotag/geotag_videos_from_gpx.py,sha256=IoV7asxl7dojF1lftvohm1jK_LboFg_mBz25GiV_CsY,1653
50
+ mapillary_tools/geotag/geotag_videos_from_video.py,sha256=T8XS4lVF2Wz4eDXNi5Vt076M5dxjxJXibVrWhqVvErs,863
51
+ mapillary_tools/geotag/options.py,sha256=0CSQUuhVE-WdAVQXWXjwMtxujW1yB6yxRkFmVKH8LkQ,5092
52
+ mapillary_tools/geotag/utils.py,sha256=tixXiN3uda2HuMnuXVu4xapgoSzZ86kNlJJQ66QERk0,1588
53
+ mapillary_tools/geotag/image_extractors/base.py,sha256=XoNrLCbJtd-MN-snbhv6zyr6zBfJRoJkntV0ptrh6qg,358
54
+ mapillary_tools/geotag/image_extractors/exif.py,sha256=cCUegbFqWxjAP4oOP1nZmwoJISWeKgjGO8h_t7nucHs,2079
55
+ mapillary_tools/geotag/image_extractors/exiftool.py,sha256=zokJmf-D2rPvASRJs3dZzEu7j82igpMOr4SE6Z1nsVg,497
56
+ mapillary_tools/geotag/video_extractors/base.py,sha256=KxyKxoh_mV-XBnJq3dSzNEt2rQqZAKjmS3GazsdYbnc,350
57
+ mapillary_tools/geotag/video_extractors/exiftool.py,sha256=mH9arsWBaArYhNMxnrRpoEa3YrMjSpCiZaz-baJRMCo,2305
58
+ mapillary_tools/geotag/video_extractors/gpx.py,sha256=1JDuGLgp3wpaAqfq3ln4DMsVt820dK5HZ3VfJnok98c,3823
59
+ mapillary_tools/geotag/video_extractors/native.py,sha256=_xmTQ6nrvdwkadMmIxrhw6rvGTGwQVmrdSkYLhhV1SM,5786
60
+ mapillary_tools/gpmf/gpmf_gps_filter.py,sha256=7cg8wEjC1DrujKY76FZguXsaPqTRkG9-t32OeuOJQIc,2755
61
+ mapillary_tools/gpmf/gpmf_parser.py,sha256=uOVXkwJxC3Y2YfTdzUDpt7Bh0pdVqa5u0WUuv7pEJEs,24670
62
+ mapillary_tools/gpmf/gps_filter.py,sha256=zhXkuvr0Dd1bxGTYBwvk6P7xasY_RLuWjHaX7CdBayc,3796
63
+ mapillary_tools/mp4/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
+ mapillary_tools/mp4/construct_mp4_parser.py,sha256=jS8fOgSByqieXA6C5ZqobaI0bK17U_YAkiWEUK_8j4E,17286
65
+ mapillary_tools/mp4/io_utils.py,sha256=KZaJTlgFS27Oh3pcA5MKXYFoCifqgFaEZJyU6lb1jc4,5416
66
+ mapillary_tools/mp4/mp4_sample_parser.py,sha256=0ILTq8M6mXFTI3agKgljpvO9uYa7HXGUGZpdHT8a6ac,11547
67
+ mapillary_tools/mp4/simple_mp4_builder.py,sha256=9TUGk1hzI6mQFN1P30jwHL3dCYz3Zz7rsm8UBvMAqMc,12734
68
+ mapillary_tools/mp4/simple_mp4_parser.py,sha256=g3vvPhBoNu7anhVzC5_XQCV7IwfRWro1vJ6d6GyDkHE,6315
69
+ mapillary_tools/serializer/description.py,sha256=FB-DawgHVW5M2e81Uo921bY7DQv9fogXF3QMilpmEhQ,18473
70
+ mapillary_tools/serializer/gpx.py,sha256=_xx6gHjaWHrlXaUpB5GGBrbRKzbExFyIzWWAH-CvksI,4383
71
+ mapillary_tools-0.14.1.dist-info/licenses/LICENSE,sha256=l2D8cKfFmmJq_wcVq_JElPJrlvWQOzNWx7gMLINucxc,1292
72
+ mapillary_tools-0.14.1.dist-info/METADATA,sha256=NmnszTprFtSwwR7VYc2kwUl3SYOiE9ClmQ5TWMPyA80,22200
73
+ mapillary_tools-0.14.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
74
+ mapillary_tools-0.14.1.dist-info/entry_points.txt,sha256=A3f3LP-BO_P-U8Y29QfpT4jx6Mjk3sXjTi2Yew4bvj8,75
75
+ mapillary_tools-0.14.1.dist-info/top_level.txt,sha256=FbDkMgOrt1S70ho1WSBrOwzKOSkJFDwwqFOoY5-527s,16
76
+ mapillary_tools-0.14.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (78.1.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,72 +0,0 @@
1
- mapillary_tools/__init__.py,sha256=AdfWnUWJogoEJm_EqofQxlG8NYL78h0B0M3Igr2xQpE,21
2
- mapillary_tools/api_v4.py,sha256=uvz48tb2HaM1wfomaUR0V2HdId39HoxnQAc1WWgptvo,10091
3
- mapillary_tools/authenticate.py,sha256=KG3p_7D4D7nUvrGRLGp56_ogLy7JUHzkGSpBw8V70LY,11091
4
- mapillary_tools/blackvue_parser.py,sha256=Gmz3M1cvBmB2W3Pme6x3w2yuixDpKiTOkQe82iPXr2s,3613
5
- mapillary_tools/config.py,sha256=uoNW5PnB1a2TW959KmNSYgJ1Y4_trn0xxPHJQ6T-cbI,2633
6
- mapillary_tools/constants.py,sha256=BVnAlqz2XJfodNXsJfsGIV0L4P_3--oOgw1pR38D-Ls,3770
7
- mapillary_tools/exceptions.py,sha256=P8vEh3pfOqyzJgOiQiRAcWsZTrcawjic7i4v3k335tM,2411
8
- mapillary_tools/exif_read.py,sha256=gagyRv06RkZPRHQhyV-5-uQzxHgxOsVqUX2aC8QmCyM,32145
9
- mapillary_tools/exif_write.py,sha256=Ue0ngLKCfuLQM7X4h5ETjSInUDcyEBWOR6v8ko7DJ1o,8769
10
- mapillary_tools/exiftool_read.py,sha256=5uatYE9mgbg2d9NAnPfX22nSRBjXhJ9ayMqNMd4QwGM,15779
11
- mapillary_tools/exiftool_read_video.py,sha256=WXpw7CI7B4daJHRWzzVXAyVgDrFN8nPxQ3UPcVQqRJM,14760
12
- mapillary_tools/exiftool_runner.py,sha256=J04V0Y70kTiGE2q2m5TKWfORd0hmYNmAsmrZxb34S3s,2316
13
- mapillary_tools/ffmpeg.py,sha256=tRgdChGHAhHXjZPivDuVImubrJWfSDZDBZ7mSzkeABc,15698
14
- mapillary_tools/geo.py,sha256=MSfkjSAgTAeuBqncQ8-QXvDuJ7ar7bTt5P_e9HDIgVs,10604
15
- mapillary_tools/history.py,sha256=8ng2WHXadzbE5gnsoik6gbmRoEXTuGPp997RBiiWy08,1649
16
- mapillary_tools/ipc.py,sha256=DwWQb9hNshx0bg0Fo5NjY0mXjs-FkbR6tIQmjMgMtmg,1089
17
- mapillary_tools/process_geotag_properties.py,sha256=f0Up7yNzgLn32VBFMzoMT6SCsdzFUFYmloOsVHmK5k0,13920
18
- mapillary_tools/process_sequence_properties.py,sha256=LSYyCH1nmEcYWWZKF1bOYh4hqjwXdz4FY9TqQQfW7AU,23418
19
- mapillary_tools/sample_video.py,sha256=MwTr2bY5RFnOFThNPg3YiyXCXzWOlTXKq7EOri_W3Vw,13880
20
- mapillary_tools/telemetry.py,sha256=lL6qQbtOZft4DZZrCNK3njlwHT_30zLyYS_YRN5pgHY,1568
21
- mapillary_tools/types.py,sha256=0O4fzbwwoT6Znp2Ag1ptjzBKGb3E_RhGyqUUZu6gkPY,23078
22
- mapillary_tools/upload.py,sha256=exQeEh3jpys94k-3QDT-4xoeJ_lAHbQBoy749hbPfnA,24878
23
- mapillary_tools/upload_api_v4.py,sha256=dTEpQDnV11TyPf5hefd-FVeEfw7WEVYyZcIUJttUEp0,6417
24
- mapillary_tools/uploader.py,sha256=xPEszuXlgcgCklGfsgL8qN1ozsFuU4rLT4jocMD2dVI,18694
25
- mapillary_tools/utils.py,sha256=ft-TrqgwWq1a-HpQqnCWIortZbjjTOywllPi8HBA3FU,6642
26
- mapillary_tools/camm/camm_builder.py,sha256=ub6Z9ijep8zAo1NOlU51Gxk95kQ2vfN58YgVCLmNMRk,9211
27
- mapillary_tools/camm/camm_parser.py,sha256=aNHP65hNXYQBWBTfhaj_S5XYzmAHhjwcAfGhbm83__o,18043
28
- mapillary_tools/commands/__init__.py,sha256=41CFrPLGlG3566uhxssEF3TGAtSpADFPPcDMHbViU0E,171
29
- mapillary_tools/commands/__main__.py,sha256=5gwngScbvrSNF2S1CA5w_qZgxW_kFevu5NQ89U9u1ZE,5046
30
- mapillary_tools/commands/authenticate.py,sha256=yqtpHMYzkyBrrchj6MARxB0ywUTfqCEOPkMbkyaO9Ks,1344
31
- mapillary_tools/commands/process.py,sha256=Japc6_P0B_8HzoM8_82P3_YAiyBBaQZXS9TZF46pbMM,9771
32
- mapillary_tools/commands/process_and_upload.py,sha256=-RB_86a5xKfQ7Ye79dh6yyJQpZg2xnJZAWOJsUNbUtQ,1041
33
- mapillary_tools/commands/sample_video.py,sha256=jtnrZrsqqv5eYV1chNTas7RhfbeKBqbAUDUNRFjF01w,3253
34
- mapillary_tools/commands/upload.py,sha256=YnA1iSvNcFeV7kMs1p4TdaPBUWUFYb7X-vFhQeSz0eI,2005
35
- mapillary_tools/commands/video_process.py,sha256=-wQeeIwWXPmy81HQHam5A0huMLRHknkEFa_V1OwElU4,890
36
- mapillary_tools/commands/video_process_and_upload.py,sha256=hOyq9L9TuD0JcqFSOOxdCdgsBA1iJ6fu1TtDbsUr8sI,1088
37
- mapillary_tools/commands/zip.py,sha256=DVQuMLpbstwiy5o4pU_fBvM6eORuFjLeySd80AhHKU0,991
38
- mapillary_tools/geotag/base.py,sha256=JdLBXHlC22gqmZkyfAykv1osrzitWoCK8RFHdCd5qlc,4864
39
- mapillary_tools/geotag/factory.py,sha256=2HIOnUtfxsgWn2GF0PbbgHq3Tzyssrl4T39YDMtN42U,9564
40
- mapillary_tools/geotag/geotag_images_from_exif.py,sha256=a5fDOp4tlEoVNwrOCJBrvSPzu1LbyxL4RNrNDD0tPP0,608
41
- mapillary_tools/geotag/geotag_images_from_exiftool.py,sha256=YxMFwv3A35Hh9tcGX1B1Si_m6TNep54SL5XFAQadQh0,5302
42
- mapillary_tools/geotag/geotag_images_from_gpx.py,sha256=b_4xKVUt0HLIjNN-v7ZVddXDZ9cdxAfecB5Dj2X6XQE,6353
43
- mapillary_tools/geotag/geotag_images_from_gpx_file.py,sha256=HYQkwak32YBDuRrTNiIZOmE3iImCRc22HWWb485WRS4,1121
44
- mapillary_tools/geotag/geotag_images_from_nmea_file.py,sha256=J8xj6ch9bMPRubJtsRGeb3sb9LyB0ZYy65NPEOVkUe8,1597
45
- mapillary_tools/geotag/geotag_images_from_video.py,sha256=5_qVgLt_DKl7oQrr9kWxi4iM143_HPAx5Lau-3fB7t4,3136
46
- mapillary_tools/geotag/geotag_videos_from_exiftool.py,sha256=7chO_tb7ECsBlOkFhiXQ4fhomVPkfBOWtdfzXGpsJes,3168
47
- mapillary_tools/geotag/geotag_videos_from_gpx.py,sha256=k4a1imUVLg2yDqggCwTSqjvY7jXQd3E-vniBuJj2d4M,1017
48
- mapillary_tools/geotag/geotag_videos_from_video.py,sha256=T8XS4lVF2Wz4eDXNi5Vt076M5dxjxJXibVrWhqVvErs,863
49
- mapillary_tools/geotag/options.py,sha256=7Fz0QoCMyZZbhkKvY4HPNWYfnKdQSWE2oRXb7jYZhmA,4336
50
- mapillary_tools/geotag/utils.py,sha256=0DenLVCLP-GZdk0rCFP0V1tjMGK4XAvYro3I_1RKgCA,1733
51
- mapillary_tools/geotag/image_extractors/base.py,sha256=XoNrLCbJtd-MN-snbhv6zyr6zBfJRoJkntV0ptrh6qg,358
52
- mapillary_tools/geotag/image_extractors/exif.py,sha256=cCUegbFqWxjAP4oOP1nZmwoJISWeKgjGO8h_t7nucHs,2079
53
- mapillary_tools/geotag/image_extractors/exiftool.py,sha256=zokJmf-D2rPvASRJs3dZzEu7j82igpMOr4SE6Z1nsVg,497
54
- mapillary_tools/geotag/video_extractors/base.py,sha256=_3B37T-m2HGy77avAF8i_kEatIyQqFfBu49qVnx_0PU,357
55
- mapillary_tools/geotag/video_extractors/exiftool.py,sha256=CB49qZqgmxECma-N5757aEn37xXRbCNRcT4o-Ip7dCw,2312
56
- mapillary_tools/geotag/video_extractors/gpx.py,sha256=Oycdn74CNiq1j8dAq7O9YiVNTun2mFWRH9VTUn_viRk,4114
57
- mapillary_tools/geotag/video_extractors/native.py,sha256=XChOyDvrf88Vu8ED-FTT_hzax2FllokanszSW4Q2MEA,5702
58
- mapillary_tools/gpmf/gpmf_gps_filter.py,sha256=7cg8wEjC1DrujKY76FZguXsaPqTRkG9-t32OeuOJQIc,2755
59
- mapillary_tools/gpmf/gpmf_parser.py,sha256=uOVXkwJxC3Y2YfTdzUDpt7Bh0pdVqa5u0WUuv7pEJEs,24670
60
- mapillary_tools/gpmf/gps_filter.py,sha256=zhXkuvr0Dd1bxGTYBwvk6P7xasY_RLuWjHaX7CdBayc,3796
61
- mapillary_tools/mp4/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
- mapillary_tools/mp4/construct_mp4_parser.py,sha256=ArJ5C8iWJhHNPFkN048DXh6EwQ8LMfnTMwoNlKV9NoI,17191
63
- mapillary_tools/mp4/io_utils.py,sha256=KZaJTlgFS27Oh3pcA5MKXYFoCifqgFaEZJyU6lb1jc4,5416
64
- mapillary_tools/mp4/mp4_sample_parser.py,sha256=0ILTq8M6mXFTI3agKgljpvO9uYa7HXGUGZpdHT8a6ac,11547
65
- mapillary_tools/mp4/simple_mp4_builder.py,sha256=9TUGk1hzI6mQFN1P30jwHL3dCYz3Zz7rsm8UBvMAqMc,12734
66
- mapillary_tools/mp4/simple_mp4_parser.py,sha256=g3vvPhBoNu7anhVzC5_XQCV7IwfRWro1vJ6d6GyDkHE,6315
67
- mapillary_tools-0.14.0a2.dist-info/licenses/LICENSE,sha256=l2D8cKfFmmJq_wcVq_JElPJrlvWQOzNWx7gMLINucxc,1292
68
- mapillary_tools-0.14.0a2.dist-info/METADATA,sha256=UDVbKn5kqizwZmE70erGYDOnSz8sg9CuTd81GHSWtDI,19782
69
- mapillary_tools-0.14.0a2.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
70
- mapillary_tools-0.14.0a2.dist-info/entry_points.txt,sha256=A3f3LP-BO_P-U8Y29QfpT4jx6Mjk3sXjTi2Yew4bvj8,75
71
- mapillary_tools-0.14.0a2.dist-info/top_level.txt,sha256=FbDkMgOrt1S70ho1WSBrOwzKOSkJFDwwqFOoY5-527s,16
72
- mapillary_tools-0.14.0a2.dist-info/RECORD,,