mapillary-tools 0.13.3__py3-none-any.whl → 0.14.0__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.
- mapillary_tools/__init__.py +1 -1
- mapillary_tools/api_v4.py +198 -55
- mapillary_tools/authenticate.py +326 -64
- mapillary_tools/blackvue_parser.py +195 -0
- mapillary_tools/camm/camm_builder.py +55 -97
- mapillary_tools/camm/camm_parser.py +429 -181
- mapillary_tools/commands/__main__.py +10 -6
- mapillary_tools/commands/authenticate.py +8 -1
- mapillary_tools/commands/process.py +27 -51
- mapillary_tools/commands/process_and_upload.py +18 -5
- mapillary_tools/commands/sample_video.py +2 -3
- mapillary_tools/commands/upload.py +44 -13
- mapillary_tools/commands/video_process_and_upload.py +19 -5
- mapillary_tools/config.py +65 -26
- mapillary_tools/constants.py +141 -18
- mapillary_tools/exceptions.py +37 -34
- mapillary_tools/exif_read.py +221 -116
- mapillary_tools/exif_write.py +10 -8
- mapillary_tools/exiftool_read.py +33 -42
- mapillary_tools/exiftool_read_video.py +97 -47
- mapillary_tools/exiftool_runner.py +57 -0
- mapillary_tools/ffmpeg.py +417 -242
- mapillary_tools/geo.py +158 -118
- mapillary_tools/geotag/__init__.py +0 -1
- mapillary_tools/geotag/base.py +147 -0
- mapillary_tools/geotag/factory.py +307 -0
- mapillary_tools/geotag/geotag_images_from_exif.py +14 -131
- mapillary_tools/geotag/geotag_images_from_exiftool.py +136 -85
- mapillary_tools/geotag/geotag_images_from_gpx.py +60 -124
- mapillary_tools/geotag/geotag_images_from_gpx_file.py +13 -126
- mapillary_tools/geotag/geotag_images_from_nmea_file.py +4 -5
- mapillary_tools/geotag/geotag_images_from_video.py +88 -51
- mapillary_tools/geotag/geotag_videos_from_exiftool.py +123 -0
- mapillary_tools/geotag/geotag_videos_from_gpx.py +52 -0
- mapillary_tools/geotag/geotag_videos_from_video.py +20 -185
- mapillary_tools/geotag/image_extractors/base.py +18 -0
- mapillary_tools/geotag/image_extractors/exif.py +60 -0
- mapillary_tools/geotag/image_extractors/exiftool.py +18 -0
- mapillary_tools/geotag/options.py +182 -0
- mapillary_tools/geotag/utils.py +52 -16
- mapillary_tools/geotag/video_extractors/base.py +18 -0
- mapillary_tools/geotag/video_extractors/exiftool.py +70 -0
- mapillary_tools/geotag/video_extractors/gpx.py +116 -0
- mapillary_tools/geotag/video_extractors/native.py +160 -0
- mapillary_tools/{geotag → gpmf}/gpmf_parser.py +205 -182
- mapillary_tools/{geotag → gpmf}/gps_filter.py +5 -3
- mapillary_tools/history.py +134 -20
- mapillary_tools/mp4/construct_mp4_parser.py +17 -10
- mapillary_tools/mp4/io_utils.py +0 -1
- mapillary_tools/mp4/mp4_sample_parser.py +36 -28
- mapillary_tools/mp4/simple_mp4_builder.py +10 -9
- mapillary_tools/mp4/simple_mp4_parser.py +13 -22
- mapillary_tools/process_geotag_properties.py +184 -414
- mapillary_tools/process_sequence_properties.py +594 -225
- mapillary_tools/sample_video.py +20 -26
- mapillary_tools/serializer/description.py +587 -0
- mapillary_tools/serializer/gpx.py +132 -0
- mapillary_tools/telemetry.py +26 -13
- mapillary_tools/types.py +98 -611
- mapillary_tools/upload.py +411 -387
- mapillary_tools/upload_api_v4.py +167 -142
- mapillary_tools/uploader.py +804 -284
- mapillary_tools/utils.py +49 -18
- {mapillary_tools-0.13.3.dist-info → mapillary_tools-0.14.0.dist-info}/METADATA +93 -35
- mapillary_tools-0.14.0.dist-info/RECORD +75 -0
- {mapillary_tools-0.13.3.dist-info → mapillary_tools-0.14.0.dist-info}/WHEEL +1 -1
- mapillary_tools/geotag/blackvue_parser.py +0 -118
- mapillary_tools/geotag/geotag_from_generic.py +0 -22
- mapillary_tools/geotag/geotag_images_from_exiftool_both_image_and_video.py +0 -93
- mapillary_tools/geotag/geotag_videos_from_exiftool_video.py +0 -145
- mapillary_tools/video_data_extraction/cli_options.py +0 -22
- mapillary_tools/video_data_extraction/extract_video_data.py +0 -176
- mapillary_tools/video_data_extraction/extractors/base_parser.py +0 -75
- mapillary_tools/video_data_extraction/extractors/blackvue_parser.py +0 -34
- mapillary_tools/video_data_extraction/extractors/camm_parser.py +0 -38
- mapillary_tools/video_data_extraction/extractors/exiftool_runtime_parser.py +0 -71
- mapillary_tools/video_data_extraction/extractors/exiftool_xml_parser.py +0 -53
- mapillary_tools/video_data_extraction/extractors/generic_video_parser.py +0 -52
- mapillary_tools/video_data_extraction/extractors/gopro_parser.py +0 -43
- mapillary_tools/video_data_extraction/extractors/gpx_parser.py +0 -108
- mapillary_tools/video_data_extraction/extractors/nmea_parser.py +0 -24
- mapillary_tools/video_data_extraction/video_data_parser_factory.py +0 -39
- mapillary_tools-0.13.3.dist-info/RECORD +0 -75
- /mapillary_tools/{geotag → gpmf}/gpmf_gps_filter.py +0 -0
- {mapillary_tools-0.13.3.dist-info → mapillary_tools-0.14.0.dist-info}/entry_points.txt +0 -0
- {mapillary_tools-0.13.3.dist-info → mapillary_tools-0.14.0.dist-info/licenses}/LICENSE +0 -0
- {mapillary_tools-0.13.3.dist-info → mapillary_tools-0.14.0.dist-info}/top_level.txt +0 -0
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import typing as T
|
|
2
|
-
|
|
3
|
-
from ... import geo
|
|
4
|
-
from ...geotag import gpmf_parser
|
|
5
|
-
from ...mp4 import simple_mp4_parser as sparser
|
|
6
|
-
from .base_parser import BaseParser
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class GoProParser(BaseParser):
|
|
10
|
-
default_source_pattern = "%f"
|
|
11
|
-
must_rebase_times_to_zero = False
|
|
12
|
-
parser_label = "gopro"
|
|
13
|
-
|
|
14
|
-
pointsFound: bool = False
|
|
15
|
-
|
|
16
|
-
def extract_points(self) -> T.Sequence[geo.Point]:
|
|
17
|
-
source_path = self.geotag_source_path
|
|
18
|
-
if not source_path:
|
|
19
|
-
return []
|
|
20
|
-
with source_path.open("rb") as fp:
|
|
21
|
-
try:
|
|
22
|
-
points = gpmf_parser.extract_points(fp) or []
|
|
23
|
-
self.pointsFound = len(points) > 0
|
|
24
|
-
return points
|
|
25
|
-
except sparser.ParsingError:
|
|
26
|
-
return []
|
|
27
|
-
|
|
28
|
-
def extract_make(self) -> T.Optional[str]:
|
|
29
|
-
model = self.extract_model()
|
|
30
|
-
if model:
|
|
31
|
-
return "GoPro"
|
|
32
|
-
|
|
33
|
-
# make sure self.pointsFound is updated
|
|
34
|
-
_ = self.extract_points()
|
|
35
|
-
# If no points were found, assume this is not a GoPro
|
|
36
|
-
return "GoPro" if self.pointsFound else None
|
|
37
|
-
|
|
38
|
-
def extract_model(self) -> T.Optional[str]:
|
|
39
|
-
source_path = self.geotag_source_path
|
|
40
|
-
if not source_path:
|
|
41
|
-
return None
|
|
42
|
-
with source_path.open("rb") as fp:
|
|
43
|
-
return gpmf_parser.extract_camera_model(fp) or None
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import datetime
|
|
2
|
-
import logging
|
|
3
|
-
import typing as T
|
|
4
|
-
|
|
5
|
-
from ... import geo, telemetry
|
|
6
|
-
from ...geotag import geotag_images_from_gpx_file
|
|
7
|
-
from .base_parser import BaseParser
|
|
8
|
-
from .generic_video_parser import GenericVideoParser
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
LOG = logging.getLogger(__name__)
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class GpxParser(BaseParser):
|
|
15
|
-
default_source_pattern = "%g.gpx"
|
|
16
|
-
parser_label = "gpx"
|
|
17
|
-
|
|
18
|
-
def extract_points(self) -> T.Sequence[geo.Point]:
|
|
19
|
-
path = self.geotag_source_path
|
|
20
|
-
if not path:
|
|
21
|
-
return []
|
|
22
|
-
|
|
23
|
-
try:
|
|
24
|
-
gpx_tracks = geotag_images_from_gpx_file.parse_gpx(path)
|
|
25
|
-
except Exception as ex:
|
|
26
|
-
raise RuntimeError(
|
|
27
|
-
f"Error parsing GPX {path}: {ex.__class__.__name__}: {ex}"
|
|
28
|
-
)
|
|
29
|
-
|
|
30
|
-
if 1 < len(gpx_tracks):
|
|
31
|
-
LOG.warning(
|
|
32
|
-
"Found %s tracks in the GPX file %s. Will merge points in all the tracks as a single track for interpolation",
|
|
33
|
-
len(gpx_tracks),
|
|
34
|
-
self.videoPath,
|
|
35
|
-
)
|
|
36
|
-
|
|
37
|
-
gpx_points: T.Sequence[geo.Point] = sum(gpx_tracks, [])
|
|
38
|
-
if not gpx_points:
|
|
39
|
-
return gpx_points
|
|
40
|
-
|
|
41
|
-
offset = self._synx_gpx_by_first_gps_timestamp(gpx_points)
|
|
42
|
-
|
|
43
|
-
self._rebase_times(gpx_points, offset=offset)
|
|
44
|
-
|
|
45
|
-
return gpx_points
|
|
46
|
-
|
|
47
|
-
def _synx_gpx_by_first_gps_timestamp(
|
|
48
|
-
self, gpx_points: T.Sequence[geo.Point]
|
|
49
|
-
) -> float:
|
|
50
|
-
offset: float = 0.0
|
|
51
|
-
|
|
52
|
-
if not gpx_points:
|
|
53
|
-
return offset
|
|
54
|
-
|
|
55
|
-
first_gpx_dt = datetime.datetime.fromtimestamp(
|
|
56
|
-
gpx_points[0].time, tz=datetime.timezone.utc
|
|
57
|
-
)
|
|
58
|
-
LOG.info("First GPX timestamp: %s", first_gpx_dt)
|
|
59
|
-
|
|
60
|
-
# Extract first GPS timestamp (if found) for synchronization
|
|
61
|
-
# Use an empty dictionary to force video parsers to extract make/model from the video metadata itself
|
|
62
|
-
parser = GenericVideoParser(self.videoPath, self.options, {})
|
|
63
|
-
gps_points = parser.extract_points()
|
|
64
|
-
|
|
65
|
-
if not gps_points:
|
|
66
|
-
LOG.warning(
|
|
67
|
-
"Skip GPX synchronization because no GPS found in video %s",
|
|
68
|
-
self.videoPath,
|
|
69
|
-
)
|
|
70
|
-
return offset
|
|
71
|
-
|
|
72
|
-
first_gps_point = gps_points[0]
|
|
73
|
-
if isinstance(first_gps_point, telemetry.GPSPoint):
|
|
74
|
-
if first_gps_point.epoch_time is not None:
|
|
75
|
-
first_gps_dt = datetime.datetime.fromtimestamp(
|
|
76
|
-
first_gps_point.epoch_time, tz=datetime.timezone.utc
|
|
77
|
-
)
|
|
78
|
-
LOG.info("First GPS timestamp: %s", first_gps_dt)
|
|
79
|
-
offset = gpx_points[0].time - first_gps_point.epoch_time
|
|
80
|
-
if offset:
|
|
81
|
-
LOG.warning(
|
|
82
|
-
"Found offset between GPX %s and video GPS timestamps %s: %s seconds",
|
|
83
|
-
first_gpx_dt,
|
|
84
|
-
first_gps_dt,
|
|
85
|
-
offset,
|
|
86
|
-
)
|
|
87
|
-
else:
|
|
88
|
-
LOG.info(
|
|
89
|
-
"GPX and GPS are perfectly synchronized (all starts from %s)",
|
|
90
|
-
first_gpx_dt,
|
|
91
|
-
)
|
|
92
|
-
else:
|
|
93
|
-
LOG.warning(
|
|
94
|
-
"Skip GPX synchronization because no GPS epoch time found in video %s",
|
|
95
|
-
self.videoPath,
|
|
96
|
-
)
|
|
97
|
-
|
|
98
|
-
return offset
|
|
99
|
-
|
|
100
|
-
def extract_make(self) -> T.Optional[str]:
|
|
101
|
-
# Use an empty dictionary to force video parsers to extract make/model from the video metadata itself
|
|
102
|
-
parser = GenericVideoParser(self.videoPath, self.options, {})
|
|
103
|
-
return parser.extract_make()
|
|
104
|
-
|
|
105
|
-
def extract_model(self) -> T.Optional[str]:
|
|
106
|
-
# Use an empty dictionary to force video parsers to extract make/model from the video metadata itself
|
|
107
|
-
parser = GenericVideoParser(self.videoPath, self.options, {})
|
|
108
|
-
return parser.extract_model()
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import typing as T
|
|
2
|
-
|
|
3
|
-
from ... import geo
|
|
4
|
-
from ...geotag import geotag_images_from_nmea_file
|
|
5
|
-
from .base_parser import BaseParser
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class NmeaParser(BaseParser):
|
|
9
|
-
default_source_pattern = "%g.nmea"
|
|
10
|
-
must_rebase_times_to_zero = True
|
|
11
|
-
parser_label = "nmea"
|
|
12
|
-
|
|
13
|
-
def extract_points(self) -> T.Sequence[geo.Point]:
|
|
14
|
-
source_path = self.geotag_source_path
|
|
15
|
-
if not source_path:
|
|
16
|
-
return []
|
|
17
|
-
points = geotag_images_from_nmea_file.get_lat_lon_time_from_nmea(source_path)
|
|
18
|
-
return points
|
|
19
|
-
|
|
20
|
-
def extract_make(self) -> T.Optional[str]:
|
|
21
|
-
return None
|
|
22
|
-
|
|
23
|
-
def extract_model(self) -> T.Optional[str]:
|
|
24
|
-
return None
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import typing as T
|
|
2
|
-
from pathlib import Path
|
|
3
|
-
|
|
4
|
-
from .cli_options import CliOptions
|
|
5
|
-
|
|
6
|
-
from .extractors.base_parser import BaseParser
|
|
7
|
-
|
|
8
|
-
from .extractors.blackvue_parser import BlackVueParser
|
|
9
|
-
from .extractors.camm_parser import CammParser
|
|
10
|
-
|
|
11
|
-
from .extractors.exiftool_runtime_parser import ExiftoolRuntimeParser
|
|
12
|
-
from .extractors.exiftool_xml_parser import ExiftoolXmlParser
|
|
13
|
-
from .extractors.generic_video_parser import GenericVideoParser
|
|
14
|
-
from .extractors.gopro_parser import GoProParser
|
|
15
|
-
from .extractors.gpx_parser import GpxParser
|
|
16
|
-
from .extractors.nmea_parser import NmeaParser
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
known_parsers = {
|
|
20
|
-
"gpx": GpxParser,
|
|
21
|
-
"nmea": NmeaParser,
|
|
22
|
-
"exiftool_xml": ExiftoolXmlParser,
|
|
23
|
-
"exiftool_runtime": ExiftoolRuntimeParser,
|
|
24
|
-
"camm": CammParser,
|
|
25
|
-
"blackvue": BlackVueParser,
|
|
26
|
-
"gopro": GoProParser,
|
|
27
|
-
"video": GenericVideoParser,
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
def make_parsers(file: Path, options: CliOptions) -> T.Sequence[BaseParser]:
|
|
32
|
-
src_options = options["geotag_sources_options"]
|
|
33
|
-
parsers = [
|
|
34
|
-
known_parsers[s["source"]](file, options, s)
|
|
35
|
-
for s in src_options
|
|
36
|
-
if s["source"] in known_parsers
|
|
37
|
-
]
|
|
38
|
-
|
|
39
|
-
return parsers
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
mapillary_tools/__init__.py,sha256=tOdTWrFVTLaGb-_qr6fgRv_nOA5NidkflFCzgUk9sdQ,19
|
|
2
|
-
mapillary_tools/api_v4.py,sha256=bbu2VuzkUysLOBcjyGD_qQqnS1zsYgYDJAqBhQEVESw,7786
|
|
3
|
-
mapillary_tools/authenticate.py,sha256=LCFcs6LqZmXaYkTUEKgGfmqytWdh5v_L3KXB48ojOZ4,3090
|
|
4
|
-
mapillary_tools/config.py,sha256=jCjaK4jJaTY4AV4qf_b_tcxn5LA_uPsEWlGIdm2zw6g,2103
|
|
5
|
-
mapillary_tools/constants.py,sha256=KKQMwzpN2z7wka6lhZv-agdxNldaEQqvQXu3Kg5XuUk,2453
|
|
6
|
-
mapillary_tools/exceptions.py,sha256=Mh1tgVEFTSMnYEzrl9x7b95fW9Z3SPVD_YMEl7r8I0I,2693
|
|
7
|
-
mapillary_tools/exif_read.py,sha256=F60A0-T8XSBHvFKgVIrUz_ZWKQrTFWrtj3c6siB0IMg,28707
|
|
8
|
-
mapillary_tools/exif_write.py,sha256=3PawLnBOY8Z86TYiA_F4LxRhe5Ui6CTNhxYm9yeJNX8,8786
|
|
9
|
-
mapillary_tools/exiftool_read.py,sha256=Mg027me1IzblKb9IyGaLgU6goFqk_QiOt0Ppq-CeECg,16288
|
|
10
|
-
mapillary_tools/exiftool_read_video.py,sha256=f3l8HiDjkrIhmslIXSsC8cNgkqCVWUFkN_0OQ5ZUd-U,14431
|
|
11
|
-
mapillary_tools/ffmpeg.py,sha256=p1a5VxlbpLGLkzulMv51bpyD5omwK7Qg8277TGYmcZA,15780
|
|
12
|
-
mapillary_tools/geo.py,sha256=QybCiQr0UDcH6DIDa2L6cZw4sDoTJNgR99oo6S7gCts,9746
|
|
13
|
-
mapillary_tools/history.py,sha256=l2z3YdYRyBGEOvcqcLExTV-0LUAX3iBq2OdBzLNMHLM,1766
|
|
14
|
-
mapillary_tools/ipc.py,sha256=DwWQb9hNshx0bg0Fo5NjY0mXjs-FkbR6tIQmjMgMtmg,1089
|
|
15
|
-
mapillary_tools/process_geotag_properties.py,sha256=w4hhv_c4sRydCK9QCO50sT2yo2zeVlY7dSdXQ93InFc,23159
|
|
16
|
-
mapillary_tools/process_sequence_properties.py,sha256=5oYEjz9crnLVQtCkxbwn57TkeuHFbBh_zQXQSA4ENWg,11561
|
|
17
|
-
mapillary_tools/sample_video.py,sha256=dpdX7bUNEmcrz-3gh3Y3awnTDX66pChbTKuF8qGfeCI,14400
|
|
18
|
-
mapillary_tools/telemetry.py,sha256=WpBGPF_GMPjM_EFqXIutFtpDFL9wj7yEzGNGnfQZUo8,1255
|
|
19
|
-
mapillary_tools/types.py,sha256=6kww2UdKM6YzabYbc862BYzEWtxL2hhxCRFfeDiUtF0,22074
|
|
20
|
-
mapillary_tools/upload.py,sha256=C8sWMCYOVzjXpvMsEcx6dpZ47ezKaKV61yFwZs286oo,23639
|
|
21
|
-
mapillary_tools/upload_api_v4.py,sha256=qN6yRpi-qXycRLgIOJqixjXqkYvgt-LJX7NXbQKXZaA,7502
|
|
22
|
-
mapillary_tools/uploader.py,sha256=DBHso4QIP5nsZFDynLjkUvytzwpEOPnOlfeDyA6rTBk,14007
|
|
23
|
-
mapillary_tools/utils.py,sha256=VNtK1tAb3Hh8y3P5e5Y3iewREkIoLDa3C2myRYcF2lY,5970
|
|
24
|
-
mapillary_tools/camm/camm_builder.py,sha256=TXZfhu3xGjtrLEWnB14D7aSOrHOoSJef24YSLApiIfY,10631
|
|
25
|
-
mapillary_tools/camm/camm_parser.py,sha256=RaCWeLvS_AyHD6B6wDUu9DAsdfByVHMAPTqEqjtFibE,9734
|
|
26
|
-
mapillary_tools/commands/__init__.py,sha256=41CFrPLGlG3566uhxssEF3TGAtSpADFPPcDMHbViU0E,171
|
|
27
|
-
mapillary_tools/commands/__main__.py,sha256=iDehfT38k4D283BIqy8TDD4K_q42jNhkrUNzWEXuZP4,4974
|
|
28
|
-
mapillary_tools/commands/authenticate.py,sha256=4aVvAQal_mqtm2NEMBt5aKLahi0iRdO8b7WSBf6jokA,1136
|
|
29
|
-
mapillary_tools/commands/process.py,sha256=VxcvQpYHPw7QfT9dNwBLV1jWQ-1w4GtVNVPpmu4Sx9s,10578
|
|
30
|
-
mapillary_tools/commands/process_and_upload.py,sha256=cbYr6g4sDxZ3A9jLr-GZdHZObJ8ZKS43jAdZgvqAkWk,655
|
|
31
|
-
mapillary_tools/commands/sample_video.py,sha256=bTJmlDsajkC-QJ_ZO_scdD4R664zs-r_dh-x2PlOgyY,3281
|
|
32
|
-
mapillary_tools/commands/upload.py,sha256=JIWgxupV3ppLvPi1iE7UVaE1302JGcIOvnuNt1Y7YEw,1671
|
|
33
|
-
mapillary_tools/commands/video_process.py,sha256=-wQeeIwWXPmy81HQHam5A0huMLRHknkEFa_V1OwElU4,890
|
|
34
|
-
mapillary_tools/commands/video_process_and_upload.py,sha256=llV0dHBS31qPZp-Fs1GCM0yYezEA_VF_tfYcp-Z8NkY,701
|
|
35
|
-
mapillary_tools/commands/zip.py,sha256=DVQuMLpbstwiy5o4pU_fBvM6eORuFjLeySd80AhHKU0,991
|
|
36
|
-
mapillary_tools/geotag/__init__.py,sha256=ohud7lLsqO1b9ddCF0SjrNOcUcRdQzNVR43RkcVVLAc,33
|
|
37
|
-
mapillary_tools/geotag/blackvue_parser.py,sha256=_LTI_biiznFPvrk5dcpoDH4tP4_7khPIpW5Daumuf68,2968
|
|
38
|
-
mapillary_tools/geotag/geotag_from_generic.py,sha256=bCYfIbkv4qIlkKttAjSGl9t4i_QAtzIiCZoth1hMVI4,480
|
|
39
|
-
mapillary_tools/geotag/geotag_images_from_exif.py,sha256=hCgBwZABk2tbBQC3cHQBV5pvNwlAo8AkWSgCD0BU_QU,4823
|
|
40
|
-
mapillary_tools/geotag/geotag_images_from_exiftool.py,sha256=a-c4H8VIyPdJkfUIvJho0phR0QU0zN8-lSyiCz0wc4s,3981
|
|
41
|
-
mapillary_tools/geotag/geotag_images_from_exiftool_both_image_and_video.py,sha256=nRVAjgTJwx_eCaSBpPCgcIaZs3EYgGueYxSS9XhKv40,3350
|
|
42
|
-
mapillary_tools/geotag/geotag_images_from_gpx.py,sha256=S9Pw6FvP5kRSpHUnKUYKXmw0CHa9V92UmrS_MJfbjS4,9053
|
|
43
|
-
mapillary_tools/geotag/geotag_images_from_gpx_file.py,sha256=-vTbZ1HufZzJCd8VvukdTjsJRcymtfld2W5t65VSG5E,5300
|
|
44
|
-
mapillary_tools/geotag/geotag_images_from_nmea_file.py,sha256=dDdHnJInQ_WN3ZRf-w44NSBElDLPs7XYBiimvE2iCNo,1651
|
|
45
|
-
mapillary_tools/geotag/geotag_images_from_video.py,sha256=XsaWOFChGItl-j1UbKM4hNjUqN29pVNbMpGT_BvI-o8,3306
|
|
46
|
-
mapillary_tools/geotag/geotag_videos_from_exiftool_video.py,sha256=fkkWou1WFt3ft024399vis9No2cxrwot7Pg5HBw7o7s,5225
|
|
47
|
-
mapillary_tools/geotag/geotag_videos_from_video.py,sha256=mqBZKUEkqT96nOzl5LJxzzTKuKsnAkMK5lH8k3oY3YE,7330
|
|
48
|
-
mapillary_tools/geotag/gpmf_gps_filter.py,sha256=7cg8wEjC1DrujKY76FZguXsaPqTRkG9-t32OeuOJQIc,2755
|
|
49
|
-
mapillary_tools/geotag/gpmf_parser.py,sha256=6Q38oeSd2kHTs44Fzpg9R555EbQqdd5QcIuIZdG4z_o,23233
|
|
50
|
-
mapillary_tools/geotag/gps_filter.py,sha256=4CPL8glxdzPWIbfGPPgyqMLyiZFt-djce5vhiFPuZB8,3766
|
|
51
|
-
mapillary_tools/geotag/utils.py,sha256=Orl35Df4ypxj4v6Lu1Mhk9d2XZxa8yNffz1s1C0JZsQ,651
|
|
52
|
-
mapillary_tools/mp4/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
53
|
-
mapillary_tools/mp4/construct_mp4_parser.py,sha256=31oJbg6umKJjdZ0Ni5eCudC0lXd0Y-K_EiCCj6yW9js,17199
|
|
54
|
-
mapillary_tools/mp4/io_utils.py,sha256=wc3-F1TnxZjTwB7-oea5yRmRQ_0T3Zbz8oBkW9JL8d4,5454
|
|
55
|
-
mapillary_tools/mp4/mp4_sample_parser.py,sha256=YnTIIHGHL3ViLo_Ap0C2hk8MDWbWtvSXBLD42pRIWqY,11337
|
|
56
|
-
mapillary_tools/mp4/simple_mp4_builder.py,sha256=7zVepmW-2SwoAeA-fvucmBW94jlcCFExDcEg8P3TOGY,12727
|
|
57
|
-
mapillary_tools/mp4/simple_mp4_parser.py,sha256=eji6JZa497wK8CY8hQt21fjgtnd0nzuyBx7MPEKST74,6671
|
|
58
|
-
mapillary_tools/video_data_extraction/cli_options.py,sha256=N0uHi9Uzaw1C8N-PE3yu8J3uEQP3HvSjJ9AZbIqoREg,535
|
|
59
|
-
mapillary_tools/video_data_extraction/extract_video_data.py,sha256=_2BBdSYeYKR4BCHAZa1Jzo7OIK_va1lJDkTU2sXsPc0,6000
|
|
60
|
-
mapillary_tools/video_data_extraction/video_data_parser_factory.py,sha256=qaJHvLgwI5lukJncMd8ggxeSxXOiVzBSJO5GlGQYiXY,1134
|
|
61
|
-
mapillary_tools/video_data_extraction/extractors/base_parser.py,sha256=s7Xuwg4I5JZ27oL4ebMSdo093plAXfZ-6uDQ_h97WHY,2134
|
|
62
|
-
mapillary_tools/video_data_extraction/extractors/blackvue_parser.py,sha256=jAcGyF6PML2EdJ4zle8cR12QeTRZc5qxlz8_4gcTZPU,1089
|
|
63
|
-
mapillary_tools/video_data_extraction/extractors/camm_parser.py,sha256=YMiViocXSVlfn8_qm1jcwSJhnnEaK8v5ADHwo2YXe10,1117
|
|
64
|
-
mapillary_tools/video_data_extraction/extractors/exiftool_runtime_parser.py,sha256=PFNCRk9pGrPIfVwLMcnzmVNMITVjNHhbrOOMwxaSstg,2270
|
|
65
|
-
mapillary_tools/video_data_extraction/extractors/exiftool_xml_parser.py,sha256=Tt0h4TiCKocERWMlRXzlpoaA_WJ_4b20MgMLGYNl4AM,1734
|
|
66
|
-
mapillary_tools/video_data_extraction/extractors/generic_video_parser.py,sha256=34O6Km5kNDoJNJtIUOwtAzzMntuqkSZJfeli7caWSkA,1693
|
|
67
|
-
mapillary_tools/video_data_extraction/extractors/gopro_parser.py,sha256=IVnTyquSraTUaG9rxbJfVWc1-drdY5PaHn5urh3IBk4,1325
|
|
68
|
-
mapillary_tools/video_data_extraction/extractors/gpx_parser.py,sha256=FNrdnXl48k8I1I5fGwYsClhfFEHVsooRLRboUYECv3I,3811
|
|
69
|
-
mapillary_tools/video_data_extraction/extractors/nmea_parser.py,sha256=raSXavBvP-0LJCB_TwLL0mOv2uHSsB744igTsaKAaGc,658
|
|
70
|
-
mapillary_tools-0.13.3.dist-info/LICENSE,sha256=l2D8cKfFmmJq_wcVq_JElPJrlvWQOzNWx7gMLINucxc,1292
|
|
71
|
-
mapillary_tools-0.13.3.dist-info/METADATA,sha256=qJo2HTakj1kI0l5wl_CMb8pcRP68REFJkO1oJVPdtu4,19758
|
|
72
|
-
mapillary_tools-0.13.3.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
|
|
73
|
-
mapillary_tools-0.13.3.dist-info/entry_points.txt,sha256=A3f3LP-BO_P-U8Y29QfpT4jx6Mjk3sXjTi2Yew4bvj8,75
|
|
74
|
-
mapillary_tools-0.13.3.dist-info/top_level.txt,sha256=FbDkMgOrt1S70ho1WSBrOwzKOSkJFDwwqFOoY5-527s,16
|
|
75
|
-
mapillary_tools-0.13.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|