diff --git a/mapillary_tools/geotag/camm_builder.py b/mapillary_tools/camm/camm_builder.py similarity index 93% rename from mapillary_tools/geotag/camm_builder.py rename to mapillary_tools/camm/camm_builder.py index 5a013f578..4eb62ae5e 100644 --- a/mapillary_tools/geotag/camm_builder.py +++ b/mapillary_tools/camm/camm_builder.py @@ -5,13 +5,10 @@ from ..mp4 import ( construct_mp4_parser as cparser, mp4_sample_parser as sample_parser, -) - -from . import ( - camm_parser, simple_mp4_builder as builder, ) -from .simple_mp4_builder import BoxDict + +from . import camm_parser def build_camm_sample(point: geo.Point) -> bytes: @@ -31,7 +28,7 @@ def _create_edit_list( point_segments: T.Sequence[T.Sequence[geo.Point]], movie_timescale: int, media_timescale: int, -) -> BoxDict: +) -> builder.BoxDict: entries: T.List[T.Dict] = [] for idx, points in enumerate(point_segments): @@ -116,7 +113,9 @@ def convert_points_to_raw_samples( ) -def _create_camm_stbl(raw_samples: T.Iterable[sample_parser.RawSample]) -> BoxDict: +def _create_camm_stbl( + raw_samples: T.Iterable[sample_parser.RawSample], +) -> builder.BoxDict: descriptions = [ { "format": b"camm", @@ -137,10 +136,10 @@ def _create_camm_stbl(raw_samples: T.Iterable[sample_parser.RawSample]) -> BoxDi def create_camm_trak( raw_samples: T.Sequence[sample_parser.RawSample], media_timescale: int, -) -> BoxDict: +) -> builder.BoxDict: stbl = _create_camm_stbl(raw_samples) - hdlr: BoxDict = { + hdlr: builder.BoxDict = { "type": b"hdlr", "data": { "handler_type": b"camm", @@ -152,7 +151,7 @@ def create_camm_trak( assert media_timescale <= builder.UINT64_MAX # Media Header Box - mdhd: BoxDict = { + mdhd: builder.BoxDict = { "type": b"mdhd", "data": { # use 64-bit version @@ -168,7 +167,7 @@ def create_camm_trak( }, } - dinf: BoxDict = { + dinf: builder.BoxDict = { "type": b"dinf", "data": [ # self reference dref box @@ -189,7 +188,7 @@ def create_camm_trak( ], } - minf: BoxDict = { + minf: builder.BoxDict = { "type": b"minf", "data": [ dinf, @@ -197,7 +196,7 @@ def create_camm_trak( ], } - tkhd: BoxDict = { + tkhd: builder.BoxDict = { "type": b"tkhd", "data": { # use 32-bit version of the box @@ -215,7 +214,7 @@ def create_camm_trak( }, } - mdia: BoxDict = { + mdia: builder.BoxDict = { "type": b"mdia", "data": [ mdhd, @@ -236,7 +235,7 @@ def create_camm_trak( def camm_sample_generator2(video_metadata: types.VideoMetadata): def _f( fp: T.BinaryIO, - moov_children: T.List[BoxDict], + moov_children: T.List[builder.BoxDict], ) -> T.Generator[io.IOBase, None, None]: movie_timescale = builder.find_movie_timescale(moov_children) # make sure the precision of timedeltas not lower than 0.001 (1ms) @@ -249,7 +248,7 @@ def _f( [video_metadata.points], movie_timescale, media_timescale ) if T.cast(T.Dict, elst["data"])["entries"]: - T.cast(T.List[BoxDict], camm_trak["data"]).append( + T.cast(T.List[builder.BoxDict], camm_trak["data"]).append( { "type": b"edts", "data": [elst], @@ -257,7 +256,7 @@ def _f( ) moov_children.append(camm_trak) - udta_data: T.List[BoxDict] = [] + udta_data: T.List[builder.BoxDict] = [] if video_metadata.make: udta_data.append( { diff --git a/mapillary_tools/geotag/camm_parser.py b/mapillary_tools/camm/camm_parser.py similarity index 98% rename from mapillary_tools/geotag/camm_parser.py rename to mapillary_tools/camm/camm_parser.py index f93b7ffd4..46b0fa48d 100644 --- a/mapillary_tools/geotag/camm_parser.py +++ b/mapillary_tools/camm/camm_parser.py @@ -9,8 +9,8 @@ import construct as C -from . import geo -from ..mp4 import simple_mp4_parser as sparser, mp4_sample_parser as sample_parser +from .. import geo +from ..mp4 import mp4_sample_parser as sample_parser, simple_mp4_parser as sparser LOG = logging.getLogger(__name__) diff --git a/mapillary_tools/geotag/geotag_videos_from_video.py b/mapillary_tools/geotag/geotag_videos_from_video.py index d1d31c0d8..fb489da86 100644 --- a/mapillary_tools/geotag/geotag_videos_from_video.py +++ b/mapillary_tools/geotag/geotag_videos_from_video.py @@ -7,14 +7,9 @@ from tqdm import tqdm from .. import exceptions, geo, types -from . import ( - blackvue_parser, - camm_parser, - gpmf_gps_filter, - gpmf_parser, - utils as video_utils, -) +from ..camm import camm_parser from ..mp4 import simple_mp4_parser as sparser +from . import blackvue_parser, gpmf_gps_filter, gpmf_parser, utils as video_utils from .geotag_from_generic import GeotagVideosFromGeneric LOG = logging.getLogger(__name__) diff --git a/mapillary_tools/geotag/gpmf_parser.py b/mapillary_tools/geotag/gpmf_parser.py index d86deed72..fb4d65cd5 100644 --- a/mapillary_tools/geotag/gpmf_parser.py +++ b/mapillary_tools/geotag/gpmf_parser.py @@ -7,7 +7,7 @@ import construct as C from .. import geo, imu -from ..mp4.mp4_sample_parser import TrackBoxParser, MovieBoxParser, Sample +from ..mp4.mp4_sample_parser import MovieBoxParser, Sample, TrackBoxParser """ Parsing GPS from GPMF data format stored in GoPros. See the GPMF spec: https://github.com/gopro/gpmf-parser diff --git a/mapillary_tools/geotag/io_utils.py b/mapillary_tools/mp4/io_utils.py similarity index 100% rename from mapillary_tools/geotag/io_utils.py rename to mapillary_tools/mp4/io_utils.py diff --git a/mapillary_tools/geotag/simple_mp4_builder.py b/mapillary_tools/mp4/simple_mp4_builder.py similarity index 98% rename from mapillary_tools/geotag/simple_mp4_builder.py rename to mapillary_tools/mp4/simple_mp4_builder.py index 6946f3102..632aecca0 100644 --- a/mapillary_tools/geotag/simple_mp4_builder.py +++ b/mapillary_tools/mp4/simple_mp4_builder.py @@ -2,14 +2,14 @@ import io import typing as T -from . import io_utils -from ..mp4 import ( +from . import ( construct_mp4_parser as cparser, + io_utils, mp4_sample_parser as sample_parser, simple_mp4_parser as sparser, ) -from ..mp4.construct_mp4_parser import BoxDict -from ..mp4.mp4_sample_parser import RawSample +from .construct_mp4_parser import BoxDict +from .mp4_sample_parser import RawSample """ Variable naming conventions: diff --git a/mapillary_tools/upload.py b/mapillary_tools/upload.py index 3e46a117b..f0af1a135 100644 --- a/mapillary_tools/upload.py +++ b/mapillary_tools/upload.py @@ -26,13 +26,9 @@ utils, VERSION, ) -from .geotag import ( - blackvue_parser, - camm_builder, - camm_parser, - simple_mp4_builder, - utils as video_utils, -) +from .camm import camm_builder, camm_parser +from .geotag import blackvue_parser, utils as video_utils +from .mp4 import simple_mp4_builder from .types import FileType JSONDict = T.Dict[str, T.Union[str, int, float, None]] diff --git a/mapillary_tools/video_data_extraction/extract_video_data.py b/mapillary_tools/video_data_extraction/extract_video_data.py index cd30b1d0d..22e12c7e5 100644 --- a/mapillary_tools/video_data_extraction/extract_video_data.py +++ b/mapillary_tools/video_data_extraction/extract_video_data.py @@ -7,18 +7,18 @@ import mapillary_tools.geotag.utils as video_utils -from mapillary_tools import exceptions, geo, utils -from mapillary_tools.geotag import gpmf_gps_filter -from mapillary_tools.types import ( +from .. import exceptions, geo, utils +from ..geotag import gpmf_gps_filter +from ..types import ( ErrorMetadata, FileType, MetadataOrError, VideoMetadata, VideoMetadataOrError, ) -from mapillary_tools.video_data_extraction import video_data_parser_factory -from mapillary_tools.video_data_extraction.cli_options import CliOptions -from mapillary_tools.video_data_extraction.extractors.base_parser import BaseParser +from . import video_data_parser_factory +from .cli_options import CliOptions +from .extractors.base_parser import BaseParser LOG = logging.getLogger(__name__) diff --git a/mapillary_tools/video_data_extraction/extractors/base_parser.py b/mapillary_tools/video_data_extraction/extractors/base_parser.py index 275310614..f50725b4f 100644 --- a/mapillary_tools/video_data_extraction/extractors/base_parser.py +++ b/mapillary_tools/video_data_extraction/extractors/base_parser.py @@ -5,11 +5,8 @@ import typing as T from pathlib import Path -from mapillary_tools import geo -from mapillary_tools.video_data_extraction.cli_options import ( - CliOptions, - CliParserOptions, -) +from ... import geo +from ..cli_options import CliOptions, CliParserOptions LOG = logging.getLogger(__name__) diff --git a/mapillary_tools/video_data_extraction/extractors/camm_parser.py b/mapillary_tools/video_data_extraction/extractors/camm_parser.py index fa40c7589..79cff2bf0 100644 --- a/mapillary_tools/video_data_extraction/extractors/camm_parser.py +++ b/mapillary_tools/video_data_extraction/extractors/camm_parser.py @@ -2,7 +2,7 @@ import typing as T from ... import geo -from ...geotag import camm_parser +from ...camm import camm_parser from ...mp4 import simple_mp4_parser as sparser from .base_parser import BaseParser diff --git a/mapillary_tools/video_data_extraction/extractors/exiftool_runtime_parser.py b/mapillary_tools/video_data_extraction/extractors/exiftool_runtime_parser.py index 3eaa4a65b..68c014518 100644 --- a/mapillary_tools/video_data_extraction/extractors/exiftool_runtime_parser.py +++ b/mapillary_tools/video_data_extraction/extractors/exiftool_runtime_parser.py @@ -3,15 +3,10 @@ import typing as T from pathlib import Path -from mapillary_tools import constants, exceptions, geo -from mapillary_tools.video_data_extraction.cli_options import ( - CliOptions, - CliParserOptions, -) -from mapillary_tools.video_data_extraction.extractors.base_parser import BaseParser -from mapillary_tools.video_data_extraction.extractors.exiftool_xml_parser import ( - ExiftoolXmlParser, -) +from ... import constants, exceptions, geo +from ..cli_options import CliOptions, CliParserOptions +from .base_parser import BaseParser +from .exiftool_xml_parser import ExiftoolXmlParser class ExiftoolRuntimeParser(BaseParser): diff --git a/mapillary_tools/video_data_extraction/extractors/exiftool_xml_parser.py b/mapillary_tools/video_data_extraction/extractors/exiftool_xml_parser.py index 6c8751b9b..2b17b53ed 100644 --- a/mapillary_tools/video_data_extraction/extractors/exiftool_xml_parser.py +++ b/mapillary_tools/video_data_extraction/extractors/exiftool_xml_parser.py @@ -3,15 +3,12 @@ from pathlib import Path -from mapillary_tools import geo -from mapillary_tools.exiftool_read import EXIFTOOL_NAMESPACES -from mapillary_tools.exiftool_read_video import ExifToolReadVideo -from mapillary_tools.geotag.geotag_videos_from_exiftool_video import _DESCRIPTION_TAG -from mapillary_tools.video_data_extraction.cli_options import ( - CliOptions, - CliParserOptions, -) -from mapillary_tools.video_data_extraction.extractors.base_parser import BaseParser +from ... import geo +from ...exiftool_read import EXIFTOOL_NAMESPACES +from ...exiftool_read_video import ExifToolReadVideo +from ...geotag.geotag_videos_from_exiftool_video import _DESCRIPTION_TAG +from ..cli_options import CliOptions, CliParserOptions +from .base_parser import BaseParser class ExiftoolXmlParser(BaseParser): diff --git a/mapillary_tools/video_data_extraction/extractors/generic_video_parser.py b/mapillary_tools/video_data_extraction/extractors/generic_video_parser.py index d48418b4d..270558aa0 100644 --- a/mapillary_tools/video_data_extraction/extractors/generic_video_parser.py +++ b/mapillary_tools/video_data_extraction/extractors/generic_video_parser.py @@ -1,17 +1,12 @@ import typing as T from pathlib import Path -from mapillary_tools import geo -from mapillary_tools.video_data_extraction.cli_options import ( - CliOptions, - CliParserOptions, -) -from mapillary_tools.video_data_extraction.extractors.base_parser import BaseParser -from mapillary_tools.video_data_extraction.extractors.blackvue_parser import ( - BlackVueParser, -) -from mapillary_tools.video_data_extraction.extractors.camm_parser import CammParser -from mapillary_tools.video_data_extraction.extractors.gopro_parser import GoProParser +from ... import geo +from ..cli_options import CliOptions, CliParserOptions +from .base_parser import BaseParser +from .blackvue_parser import BlackVueParser +from .camm_parser import CammParser +from .gopro_parser import GoProParser class GenericVideoParser(BaseParser): diff --git a/mapillary_tools/video_data_extraction/extractors/gpx_parser.py b/mapillary_tools/video_data_extraction/extractors/gpx_parser.py index 6a75e9c65..bfcdb2410 100644 --- a/mapillary_tools/video_data_extraction/extractors/gpx_parser.py +++ b/mapillary_tools/video_data_extraction/extractors/gpx_parser.py @@ -1,8 +1,8 @@ import typing as T -from mapillary_tools import geo -from mapillary_tools.geotag import geotag_images_from_gpx_file -from mapillary_tools.video_data_extraction.extractors.base_parser import BaseParser +from ... import geo +from ...geotag import geotag_images_from_gpx_file +from .base_parser import BaseParser class GpxParser(BaseParser): diff --git a/mapillary_tools/video_data_extraction/extractors/nmea_parser.py b/mapillary_tools/video_data_extraction/extractors/nmea_parser.py index 22805dea2..490b73ad3 100644 --- a/mapillary_tools/video_data_extraction/extractors/nmea_parser.py +++ b/mapillary_tools/video_data_extraction/extractors/nmea_parser.py @@ -1,8 +1,8 @@ import typing as T -from mapillary_tools import geo -from mapillary_tools.geotag import geotag_images_from_nmea_file -from mapillary_tools.video_data_extraction.extractors.base_parser import BaseParser +from ... import geo +from ...geotag import geotag_images_from_nmea_file +from .base_parser import BaseParser class NmeaParser(BaseParser): diff --git a/mapillary_tools/video_data_extraction/video_data_parser_factory.py b/mapillary_tools/video_data_extraction/video_data_parser_factory.py index df509ea3f..9eca1f219 100644 --- a/mapillary_tools/video_data_extraction/video_data_parser_factory.py +++ b/mapillary_tools/video_data_extraction/video_data_parser_factory.py @@ -1,26 +1,21 @@ import typing as T from pathlib import Path -from mapillary_tools.video_data_extraction.cli_options import CliOptions - -from mapillary_tools.video_data_extraction.extractors.base_parser import BaseParser - -from mapillary_tools.video_data_extraction.extractors.blackvue_parser import ( - BlackVueParser, -) -from mapillary_tools.video_data_extraction.extractors.camm_parser import CammParser from mapillary_tools.video_data_extraction.extractors.exiftool_runtime_parser import ( ExiftoolRuntimeParser, ) -from mapillary_tools.video_data_extraction.extractors.exiftool_xml_parser import ( - ExiftoolXmlParser, -) -from mapillary_tools.video_data_extraction.extractors.generic_video_parser import ( - GenericVideoParser, -) -from mapillary_tools.video_data_extraction.extractors.gopro_parser import GoProParser -from mapillary_tools.video_data_extraction.extractors.gpx_parser import GpxParser -from mapillary_tools.video_data_extraction.extractors.nmea_parser import NmeaParser + +from .cli_options import CliOptions + +from .extractors.base_parser import BaseParser + +from .extractors.blackvue_parser import BlackVueParser +from .extractors.camm_parser import CammParser +from .extractors.exiftool_xml_parser import ExiftoolXmlParser +from .extractors.generic_video_parser import GenericVideoParser +from .extractors.gopro_parser import GoProParser +from .extractors.gpx_parser import GpxParser +from .extractors.nmea_parser import NmeaParser known_parsers = { diff --git a/setup.py b/setup.py index 2d09b2950..c2c200cdc 100644 --- a/setup.py +++ b/setup.py @@ -44,6 +44,7 @@ def readme(): python_requires=">=3.8", packages=[ "mapillary_tools", + "mapillary_tools.camm", "mapillary_tools.commands", "mapillary_tools.geotag", "mapillary_tools.mp4", diff --git a/tests/cli/camm_parser.py b/tests/cli/camm_parser.py index 922214806..461c33d99 100644 --- a/tests/cli/camm_parser.py +++ b/tests/cli/camm_parser.py @@ -6,7 +6,8 @@ import gpxpy.gpx from mapillary_tools import utils -from mapillary_tools.geotag import camm_parser, utils as geotag_utils +from mapillary_tools.camm import camm_parser +from mapillary_tools.geotag import utils as geotag_utils def _convert(path: pathlib.Path): diff --git a/tests/cli/gpmf_parser.py b/tests/cli/gpmf_parser.py index 713388fb5..f5641d2ad 100644 --- a/tests/cli/gpmf_parser.py +++ b/tests/cli/gpmf_parser.py @@ -11,8 +11,8 @@ import mapillary_tools.geotag.gpmf_parser as gpmf_parser import mapillary_tools.geotag.gps_filter as gps_filter -from mapillary_tools.mp4 import mp4_sample_parser import mapillary_tools.utils as utils +from mapillary_tools.mp4 import mp4_sample_parser def _convert_points_to_gpx_track_segment( diff --git a/tests/cli/simple_mp4_builder.py b/tests/cli/simple_mp4_builder.py index 90435e71f..e239f9e4c 100644 --- a/tests/cli/simple_mp4_builder.py +++ b/tests/cli/simple_mp4_builder.py @@ -1,11 +1,10 @@ import argparse from pathlib import Path -from mapillary_tools.geotag import ( - camm_builder, - geotag_videos_from_video, - simple_mp4_builder as builder, -) +from mapillary_tools.camm import camm_builder + +from mapillary_tools.geotag import geotag_videos_from_video +from mapillary_tools.mp4 import simple_mp4_builder as builder def _parse_args(): diff --git a/tests/unit/test_camm_parser.py b/tests/unit/test_camm_parser.py index ed3237837..af2ff8451 100644 --- a/tests/unit/test_camm_parser.py +++ b/tests/unit/test_camm_parser.py @@ -4,12 +4,8 @@ from pathlib import Path from mapillary_tools import geo, types -from mapillary_tools.geotag import ( - camm_builder, - camm_parser, - simple_mp4_builder, -) -from mapillary_tools.mp4 import construct_mp4_parser as cparser +from mapillary_tools.camm import camm_builder, camm_parser +from mapillary_tools.mp4 import construct_mp4_parser as cparser, simple_mp4_builder def test_filter_points_by_edit_list(): diff --git a/tests/unit/test_io_utils.py b/tests/unit/test_io_utils.py index 1f93c28a6..c5ac86a09 100644 --- a/tests/unit/test_io_utils.py +++ b/tests/unit/test_io_utils.py @@ -1,7 +1,7 @@ import io import random -from mapillary_tools.geotag.io_utils import ChainedIO, SlicedIO +from mapillary_tools.mp4.io_utils import ChainedIO, SlicedIO def test_chained(): diff --git a/tests/unit/test_simple_mp4_builder.py b/tests/unit/test_simple_mp4_builder.py index 8bd67e7d5..5c274dd06 100644 --- a/tests/unit/test_simple_mp4_builder.py +++ b/tests/unit/test_simple_mp4_builder.py @@ -1,12 +1,10 @@ import io import typing as T -from mapillary_tools.geotag import ( - simple_mp4_builder as builder, -) from mapillary_tools.mp4 import ( construct_mp4_parser as cparser, mp4_sample_parser as sample_parser, + simple_mp4_builder as builder, simple_mp4_parser as sparser, )