From 78d16df4a7c864a0d655d98de0728b0514a43985 Mon Sep 17 00:00:00 2001 From: Simone Gasparini Date: Wed, 31 Jul 2019 15:20:45 +0200 Subject: [PATCH 01/41] [bin] add views and intrinsic when loading custom pipeline --- bin/meshroom_photogrammetry | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bin/meshroom_photogrammetry b/bin/meshroom_photogrammetry index ffbd10ee..982e8379 100755 --- a/bin/meshroom_photogrammetry +++ b/bin/meshroom_photogrammetry @@ -89,6 +89,9 @@ if args.pipeline: # reset graph inputs cameraInit.viewpoints.resetValue() cameraInit.intrinsics.resetValue() + # add views and intrinsics (if any) read from args.input + cameraInit.viewpoints.extend(views) + cameraInit.intrinsics.extend(intrinsics) if not graph.canComputeLeaves: raise RuntimeError("Graph cannot be computed. Check for compatibility issues.") From ac5a509a11d36a638e07da0d6598c7ed9d147d40 Mon Sep 17 00:00:00 2001 From: Simone Gasparini Date: Wed, 31 Jul 2019 15:21:19 +0200 Subject: [PATCH 02/41] [bin] raise exception if input format is not supported --- bin/meshroom_photogrammetry | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bin/meshroom_photogrammetry b/bin/meshroom_photogrammetry index 982e8379..1d27d3a3 100755 --- a/bin/meshroom_photogrammetry +++ b/bin/meshroom_photogrammetry @@ -80,6 +80,8 @@ elif os.path.isfile(args.input) and os.path.splitext(args.input)[-1] in ('.json' # args.input is a sfmData file: setup pre-calibrated views and intrinsics from meshroom.nodes.aliceVision.CameraInit import readSfMData views, intrinsics = readSfMData(args.input) +else: + raise RuntimeError(args.input + ': format not supported') # initialize photogrammetry pipeline if args.pipeline: From aac10be31d4c7283d8c57155310d81a934d2ae35 Mon Sep 17 00:00:00 2001 From: Fabien Castan Date: Wed, 7 Aug 2019 10:24:45 +0200 Subject: [PATCH 03/41] [docker] update to cuda 8 --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 93fb664b..6a74dd1a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ -ARG CUDA_TAG=7.0 +ARG CUDA_TAG=8.0 ARG OS_TAG=7 -FROM alicevision:centos${OS_TAG}-cuda${CUDA_TAG} +FROM alicevision/alicevision:centos${OS_TAG}-cuda${CUDA_TAG} LABEL maintainer="AliceVision Team alicevision-team@googlegroups.com" # Execute with nvidia docker (https://github.com/nvidia/nvidia-docker/wiki/Installation-(version-2.0)) From 94c8c15b01bd470ccc0df747e1fc87367d53c8b9 Mon Sep 17 00:00:00 2001 From: Fabien Castan Date: Wed, 7 Aug 2019 10:25:11 +0200 Subject: [PATCH 04/41] [docker] update to Qt 5.13 --- Dockerfile | 3 ++- docker/qt-installer-noninteractive.qs | 16 ++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index 6a74dd1a..f615f428 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,7 +9,7 @@ LABEL maintainer="AliceVision Team alicevision-team@googlegroups.com" ENV MESHROOM_DEV=/opt/Meshroom \ MESHROOM_BUILD=/tmp/Meshroom_build \ MESHROOM_BUNDLE=/opt/Meshroom_bundle \ - QT_DIR=/opt/qt/5.11.1/gcc_64 \ + QT_DIR=/opt/qt/5.13.0/gcc_64 \ PATH="${PATH}:${MESHROOM_BUNDLE}" COPY . "${MESHROOM_DEV}" @@ -52,6 +52,7 @@ RUN source scl_source enable rh-python36 && cd "${MESHROOM_DEV}" && pip install # Install Qt (to build plugins) WORKDIR /tmp/qt +# Qt version in specified in docker/qt-installer-noninteractive.qs RUN curl -LO http://download.qt.io/official_releases/online_installers/qt-unified-linux-x64-online.run && \ chmod u+x qt-unified-linux-x64-online.run && \ ./qt-unified-linux-x64-online.run --verbose --platform minimal --script "${MESHROOM_DEV}/docker/qt-installer-noninteractive.qs" && \ diff --git a/docker/qt-installer-noninteractive.qs b/docker/qt-installer-noninteractive.qs index 18224cd1..32d65cb1 100644 --- a/docker/qt-installer-noninteractive.qs +++ b/docker/qt-installer-noninteractive.qs @@ -46,14 +46,14 @@ Controller.prototype.ComponentSelectionPageCallback = function() { widget.deselectAll(); // widget.selectComponent("qt"); - // widget.selectComponent("qt.qt5.5111"); - widget.selectComponent("qt.qt5.5111.gcc_64"); - // widget.selectComponent("qt.qt5.5111.qtscript"); - // widget.selectComponent("qt.qt5.5111.qtscript.gcc_64"); - // widget.selectComponent("qt.qt5.5111.qtwebengine"); - // widget.selectComponent("qt.qt5.5111.qtwebengine.gcc_64"); - // widget.selectComponent("qt.qt5.5111.qtwebglplugin"); - // widget.selectComponent("qt.qt5.5111.qtwebglplugin.gcc_64"); + // widget.selectComponent("qt.qt5.5130"); + widget.selectComponent("qt.qt5.5130.gcc_64"); + // widget.selectComponent("qt.qt5.5130.qtscript"); + // widget.selectComponent("qt.qt5.5130.qtscript.gcc_64"); + // widget.selectComponent("qt.qt5.5130.qtwebengine"); + // widget.selectComponent("qt.qt5.5130.qtwebengine.gcc_64"); + // widget.selectComponent("qt.qt5.5130.qtwebglplugin"); + // widget.selectComponent("qt.qt5.5130.qtwebglplugin.gcc_64"); // widget.selectComponent("qt.tools"); gui.clickButton(buttons.NextButton); From bbba301f852e05ef174bb7d5d4f87fb16f06293f Mon Sep 17 00:00:00 2001 From: Fabien Castan Date: Wed, 7 Aug 2019 10:25:48 +0200 Subject: [PATCH 05/41] [cmake] Add build of qtAliceVision --- CMakeLists.txt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index acae6127..09a813f2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,6 +10,7 @@ set(QT_DIR "$ENV{QT_DIR}" CACHE STRING "Qt root directory") option(MR_BUILD_QTOIIO "Enable building of QtOIIO plugin" ON) option(MR_BUILD_QMLALEMBIC "Enable building of qmlAlembic plugin" ON) +option(MR_BUILD_QTALICEVISION "Enable building of qtAliceVision plugin" ON) if(CMAKE_BUILD_TYPE MATCHES Release) message(STATUS "Force CMAKE_INSTALL_DO_STRIP in Release") @@ -74,3 +75,18 @@ ExternalProject_Add(${QMLALEMBIC_TARGET} ) endif() +if(MR_BUILD_QTALICEVISION) +set(QTALICEVISION_TARGET qtAliceVision) +ExternalProject_Add(${QTALICEVISION_TARGET} + GIT_REPOSITORY https://github.com/alicevision/qtAliceVision + GIT_TAG develop + PREFIX ${BUILD_DIR} + BUILD_IN_SOURCE 0 + BUILD_ALWAYS 0 + SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/qtAliceVision + BINARY_DIR ${BUILD_DIR}/qtAliceVision_build + INSTALL_DIR ${CMAKE_INSTALL_PREFIX} + CONFIGURE_COMMAND ${CMAKE_COMMAND} ${CMAKE_CORE_BUILD_FLAGS} ${ALEMBIC_CMAKE_FLAGS} ${QT_CMAKE_FLAGS} -DCMAKE_INSTALL_PREFIX:PATH= + ) +endif() + From 2663ab472939afa6431197ee606145d64b8beb45 Mon Sep 17 00:00:00 2001 From: Anouk Liberge Date: Wed, 7 Aug 2019 15:15:22 +0200 Subject: [PATCH 06/41] [nodes][aliceVision] hdr: change input to accept list of folders --- meshroom/nodes/aliceVision/LDRToHDR.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/meshroom/nodes/aliceVision/LDRToHDR.py b/meshroom/nodes/aliceVision/LDRToHDR.py index 59529865..6fff7633 100644 --- a/meshroom/nodes/aliceVision/LDRToHDR.py +++ b/meshroom/nodes/aliceVision/LDRToHDR.py @@ -7,13 +7,18 @@ class LDRToHDR(desc.CommandLineNode): commandLine = 'aliceVision_convertLDRToHDR {allParams}' inputs = [ - desc.File( - name='input', - label='Input', - description="List of LDR images or a folder containing them ", + desc.ListAttribute( + elementDesc=desc.File( + name='inputFolder', + label='Input File/Folder', + description="Folder containing LDR images", value='', uid=[0], ), + name="input", + label="Input Files or Folders", + description='Folders containing LDR images.', + ), desc.ChoiceParam( name='calibrationMethod', label='Calibration Method', From 158f02601978c40e24808a254c2a735b5a43bb6b Mon Sep 17 00:00:00 2001 From: Anouk Liberge Date: Wed, 7 Aug 2019 15:17:04 +0200 Subject: [PATCH 07/41] [nodes][aliceVision] hdr: add bool parameter for fisheye lenses --- meshroom/nodes/aliceVision/LDRToHDR.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/meshroom/nodes/aliceVision/LDRToHDR.py b/meshroom/nodes/aliceVision/LDRToHDR.py index 6fff7633..f1c0f07f 100644 --- a/meshroom/nodes/aliceVision/LDRToHDR.py +++ b/meshroom/nodes/aliceVision/LDRToHDR.py @@ -19,6 +19,13 @@ class LDRToHDR(desc.CommandLineNode): label="Input Files or Folders", description='Folders containing LDR images.', ), + desc.BoolParam( + name='fisheyeLens', + label='Fisheye Lens', + description="Check if fisheye lens", + value=True, + uid=[0], + ), desc.ChoiceParam( name='calibrationMethod', label='Calibration Method', From 6d377e1b7d07aa6dec7ccda20684ec8ce717d07c Mon Sep 17 00:00:00 2001 From: Anouk Liberge Date: Wed, 7 Aug 2019 15:19:43 +0200 Subject: [PATCH 08/41] [nodes][aliceVision] hdr: change descriptions and label parameters --- meshroom/nodes/aliceVision/LDRToHDR.py | 62 +++++++++++++++----------- 1 file changed, 35 insertions(+), 27 deletions(-) diff --git a/meshroom/nodes/aliceVision/LDRToHDR.py b/meshroom/nodes/aliceVision/LDRToHDR.py index f1c0f07f..2dc1e51f 100644 --- a/meshroom/nodes/aliceVision/LDRToHDR.py +++ b/meshroom/nodes/aliceVision/LDRToHDR.py @@ -12,9 +12,9 @@ class LDRToHDR(desc.CommandLineNode): name='inputFolder', label='Input File/Folder', description="Folder containing LDR images", - value='', - uid=[0], - ), + value='', + uid=[0], + ), name="input", label="Input Files or Folders", description='Folders containing LDR images.', @@ -33,62 +33,62 @@ class LDRToHDR(desc.CommandLineNode): " * linear \n" " * robertson \n" " * debevec \n" - " * beta: grossberg", + " * grossberg", values=['linear', 'robertson', 'debevec', 'grossberg'], value='linear', exclusive=True, uid=[0], - ), + ), desc.File( name='inputResponse', label='Input Response', description="external camera response file path to fuse all LDR images together.", value='', uid=[0], - ), + ), desc.StringParam( name='targetExposureImage', label='Target Exposure Image', - description="LDR image at the target exposure for the output HDR image to be centered.", + description="LDR image(s) name(s) at the target exposure for the output HDR image(s) to be centered.", value='', uid=[0], - ), + ), desc.ChoiceParam( name='calibrationWeight', label='Calibration Weight', - description="Weight function type (default, gaussian, triangle, plateau).", + description="Weight function used to calibrate camera response \n" + " * default \n" + " * gaussian \n" + " * triangle \n"" + " * plateau", value='default', values=['default', 'gaussian', 'triangle', 'plateau'], exclusive=True, uid=[0], - ), + ), desc.ChoiceParam( name='fusionWeight', label='Fusion Weight', - description="Weight function used to fuse all LDR images together (gaussian, triangle, plateau).", + description="Weight function used to fuse all LDR images together \n"" + " * gaussian \n" + " * triangle \n" + " * plateau", value='gaussian', values=['gaussian', 'triangle', 'plateau'], exclusive=True, uid=[0], - ), + ), desc.FloatParam( - name='oversaturatedCorrection', - label='Oversaturated Correction', - description="Oversaturated correction for pixels oversaturated in all images: \n" + name='expandDynamicRange', + label='Expand Dynamic Range', + description="Correction of clamped high values in dynamic range: \n" " - use 0 for no correction \n" " - use 0.5 for interior lighting \n" " - use 1 for outdoor lighting", value=1, range=(0, 1, 0.1), uid=[0], - ), - desc.File( - name='recoverPath', - label='Recover Path', - description="Path to write recovered LDR image at the target exposure by applying inverse response on HDR image.", - value='', - uid=[0], - ), + ), desc.ChoiceParam( name='verboseLevel', label='Verbose Level', @@ -97,7 +97,15 @@ class LDRToHDR(desc.CommandLineNode): values=['fatal', 'error', 'warning', 'info', 'debug', 'trace'], exclusive=True, uid=[], - ), + ), + desc.File( + name='recoverPath', + label='Output Recovered Files', + description="(debug) Folder for recovered LDR images at target exposures.", + advanced=True, + value='', + uid=[], + ), ] outputs = [ @@ -107,12 +115,12 @@ class LDRToHDR(desc.CommandLineNode): description="Output HDR image path.", value=desc.Node.internalFolder + 'hdr.exr', uid=[], - ), + ), desc.File( name='outputResponse', label='Output Response', description="Output response function path.", - value=desc.Node.internalFolder + 'response.ods', + value=desc.Node.internalFolder + 'response.csv', uid=[], - ), + ), ] From fe158917f102e0a0dea150c1e11e071a56a75045 Mon Sep 17 00:00:00 2001 From: Anouk Liberge Date: Wed, 7 Aug 2019 15:21:57 +0200 Subject: [PATCH 09/41] [nodes][aliceVision] hdr: change output parameter from path to folder --- meshroom/nodes/aliceVision/LDRToHDR.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/meshroom/nodes/aliceVision/LDRToHDR.py b/meshroom/nodes/aliceVision/LDRToHDR.py index 2dc1e51f..2ea303ed 100644 --- a/meshroom/nodes/aliceVision/LDRToHDR.py +++ b/meshroom/nodes/aliceVision/LDRToHDR.py @@ -111,9 +111,9 @@ class LDRToHDR(desc.CommandLineNode): outputs = [ desc.File( name='output', - label='Output', - description="Output HDR image path.", - value=desc.Node.internalFolder + 'hdr.exr', + label='Output Folder', + description="Output folder for HDR images", + value=desc.Node.internalFolder, uid=[], ), desc.File( From 6bb89397f309e141a218fddb39676321c4c31860 Mon Sep 17 00:00:00 2001 From: Anouk Liberge Date: Wed, 7 Aug 2019 15:27:41 +0200 Subject: [PATCH 10/41] [nodes][aliceVision] hdr: delete forgotten quotes --- meshroom/nodes/aliceVision/LDRToHDR.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meshroom/nodes/aliceVision/LDRToHDR.py b/meshroom/nodes/aliceVision/LDRToHDR.py index 2ea303ed..f859e30d 100644 --- a/meshroom/nodes/aliceVision/LDRToHDR.py +++ b/meshroom/nodes/aliceVision/LDRToHDR.py @@ -59,7 +59,7 @@ class LDRToHDR(desc.CommandLineNode): description="Weight function used to calibrate camera response \n" " * default \n" " * gaussian \n" - " * triangle \n"" + " * triangle \n" " * plateau", value='default', values=['default', 'gaussian', 'triangle', 'plateau'], @@ -69,7 +69,7 @@ class LDRToHDR(desc.CommandLineNode): desc.ChoiceParam( name='fusionWeight', label='Fusion Weight', - description="Weight function used to fuse all LDR images together \n"" + description="Weight function used to fuse all LDR images together \n" " * gaussian \n" " * triangle \n" " * plateau", From 5ef5efcb83929e3d37c96a917c965db958f6b642 Mon Sep 17 00:00:00 2001 From: Fabien Castan Date: Wed, 7 Aug 2019 19:20:43 +0200 Subject: [PATCH 11/41] [cmake] use CMAKE_PREFIX_PATH for Qt and AliceVision --- CMakeLists.txt | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 09a813f2..45404a0f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,7 +31,6 @@ set(ALEMBIC_CMAKE_FLAGS -DAlembic_DIR:PATH=${ALICEVISION_ROOT}/lib64/cmake/Alembic -DILMBASE_ROOT=${ALICEVISION_ROOT} ) -set(QT_CMAKE_FLAGS -DCMAKE_PREFIX_PATH=${QT_DIR}) include(ExternalProject) @@ -45,7 +44,7 @@ include(GNUInstallDirs) # message(STATUS "QT_CMAKE_FLAGS: ${QT_CMAKE_FLAGS}") if(MR_BUILD_QTOIIO) -set(QTOIIO_TARGET qtoiio) +set(QTOIIO_TARGET qtOIIO) ExternalProject_Add(${QTOIIO_TARGET} GIT_REPOSITORY https://github.com/alicevision/QtOIIO GIT_TAG develop @@ -55,13 +54,13 @@ ExternalProject_Add(${QTOIIO_TARGET} SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/qtoiio BINARY_DIR ${BUILD_DIR}/qtoiio_build INSTALL_DIR ${CMAKE_INSTALL_PREFIX} - CONFIGURE_COMMAND ${CMAKE_COMMAND} ${CMAKE_CORE_BUILD_FLAGS} ${OIIO_CMAKE_FLAGS} ${QT_CMAKE_FLAGS} -DCMAKE_INSTALL_PREFIX:PATH= + CONFIGURE_COMMAND ${CMAKE_COMMAND} ${CMAKE_CORE_BUILD_FLAGS} ${OIIO_CMAKE_FLAGS} -DCMAKE_PREFIX_PATH=${QT_DIR} -DCMAKE_INSTALL_PREFIX:PATH= ) endif() if(MR_BUILD_QMLALEMBIC) -set(QMLALEMBIC_TARGET qmlalembic) +set(QMLALEMBIC_TARGET qmlAlembic) ExternalProject_Add(${QMLALEMBIC_TARGET} GIT_REPOSITORY https://github.com/alicevision/qmlAlembic GIT_TAG develop @@ -71,7 +70,7 @@ ExternalProject_Add(${QMLALEMBIC_TARGET} SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/qmlalembic BINARY_DIR ${BUILD_DIR}/qmlalembic_build INSTALL_DIR ${CMAKE_INSTALL_PREFIX} - CONFIGURE_COMMAND ${CMAKE_COMMAND} ${CMAKE_CORE_BUILD_FLAGS} ${ALEMBIC_CMAKE_FLAGS} ${QT_CMAKE_FLAGS} -DCMAKE_INSTALL_PREFIX:PATH= + CONFIGURE_COMMAND ${CMAKE_COMMAND} ${CMAKE_CORE_BUILD_FLAGS} ${ALEMBIC_CMAKE_FLAGS} -DCMAKE_PREFIX_PATH=${QT_DIR} -DCMAKE_INSTALL_PREFIX:PATH= ) endif() @@ -86,7 +85,7 @@ ExternalProject_Add(${QTALICEVISION_TARGET} SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/qtAliceVision BINARY_DIR ${BUILD_DIR}/qtAliceVision_build INSTALL_DIR ${CMAKE_INSTALL_PREFIX} - CONFIGURE_COMMAND ${CMAKE_COMMAND} ${CMAKE_CORE_BUILD_FLAGS} ${ALEMBIC_CMAKE_FLAGS} ${QT_CMAKE_FLAGS} -DCMAKE_INSTALL_PREFIX:PATH= + CONFIGURE_COMMAND ${CMAKE_COMMAND} ${CMAKE_CORE_BUILD_FLAGS} ${ALEMBIC_CMAKE_FLAGS} -DCMAKE_PREFIX_PATH=${QT_DIR}:${ALICEVISION_ROOT} -DCMAKE_INSTALL_PREFIX:PATH= ) endif() From 30718fbccfe9130216b10381127dacae2d73ea1a Mon Sep 17 00:00:00 2001 From: Fabien Castan Date: Wed, 7 Aug 2019 19:22:54 +0200 Subject: [PATCH 12/41] [docker] need static libs from aliceVision "lib" folder to build qtAliceVision --- Dockerfile | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index f615f428..093f7883 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,7 +12,8 @@ ENV MESHROOM_DEV=/opt/Meshroom \ QT_DIR=/opt/qt/5.13.0/gcc_64 \ PATH="${PATH}:${MESHROOM_BUNDLE}" -COPY . "${MESHROOM_DEV}" +# Workaround for qmlAlembic/qtAliceVision builds: fuse lib/lib64 folders +RUN cp -rf "${AV_INSTALL}/lib/*" "${AV_INSTALL}/lib64" && rm -rf "${AV_INSTALL}/lib" && ln -s "${AV_INSTALL}/lib64" "${AV_INSTALL}/lib" # Install libs needed by Qt RUN yum install -y \ @@ -39,6 +40,8 @@ RUN yum install -y \ RUN yum install -y centos-release-scl RUN yum install -y rh-python36 +COPY . "${MESHROOM_DEV}" + # Install Meshroom requirements and freeze bundle RUN source scl_source enable rh-python36 && cd "${MESHROOM_DEV}" && pip install -r dev_requirements.txt -r requirements.txt && python setup.py install_exe -d "${MESHROOM_BUNDLE}" && \ find ${MESHROOM_BUNDLE} -name "*Qt5Web*" -delete && \ @@ -59,11 +62,12 @@ RUN curl -LO http://download.qt.io/official_releases/online_installers/qt-unifie rm ./qt-unified-linux-x64-online.run WORKDIR ${MESHROOM_BUILD} -# Temporary workaround for qmlAlembic build -RUN rm -rf "${AV_INSTALL}/lib" && ln -s "${AV_INSTALL}/lib64" "${AV_INSTALL}/lib" # Build Meshroom plugins RUN cmake "${MESHROOM_DEV}" -DALICEVISION_ROOT="${AV_INSTALL}" -DQT_DIR="${QT_DIR}" -DCMAKE_INSTALL_PREFIX="${MESHROOM_BUNDLE}/qtPlugins" +# RUN make -j8 qtOIIO +# RUN make -j8 qmlAlembic +# RUN make -j8 qtAliceVision RUN make -j8 && cd /tmp && rm -rf ${MESHROOM_BUILD} RUN mv "${AV_BUNDLE}" "${MESHROOM_BUNDLE}/aliceVision" From ddc5b2909467c248ddb0124fb51e7e4f0681d657 Mon Sep 17 00:00:00 2001 From: Fabien Castan Date: Wed, 7 Aug 2019 20:05:38 +0200 Subject: [PATCH 13/41] [bin] meshroom_photogrammetry: args.input is optional --- bin/meshroom_photogrammetry | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/bin/meshroom_photogrammetry b/bin/meshroom_photogrammetry index 1d27d3a3..e61132e2 100755 --- a/bin/meshroom_photogrammetry +++ b/bin/meshroom_photogrammetry @@ -73,15 +73,16 @@ views, intrinsics = [], [] # Build image files list from inputImages arguments images = [f for f in args.inputImages if multiview.isImageFile(f)] -if os.path.isdir(args.input): - # args.input is a folder: extend images list with images in that folder - images += multiview.findImageFiles(args.input) -elif os.path.isfile(args.input) and os.path.splitext(args.input)[-1] in ('.json', '.sfm'): - # args.input is a sfmData file: setup pre-calibrated views and intrinsics - from meshroom.nodes.aliceVision.CameraInit import readSfMData - views, intrinsics = readSfMData(args.input) -else: - raise RuntimeError(args.input + ': format not supported') +if args.input: + if os.path.isdir(args.input): + # args.input is a folder: extend images list with images in that folder + images += multiview.findImageFiles(args.input) + elif os.path.isfile(args.input) and os.path.splitext(args.input)[-1] in ('.json', '.sfm'): + # args.input is a sfmData file: setup pre-calibrated views and intrinsics + from meshroom.nodes.aliceVision.CameraInit import readSfMData + views, intrinsics = readSfMData(args.input) + else: + raise RuntimeError(args.input + ': format not supported.') # initialize photogrammetry pipeline if args.pipeline: From 177d47f95fafdebc2bb68314ccefae20561235ae Mon Sep 17 00:00:00 2001 From: Fabien Castan Date: Wed, 7 Aug 2019 20:06:48 +0200 Subject: [PATCH 14/41] [bin] meshroom_photogrammetry: rebuild intrinsics only if we have new input images --- bin/meshroom_photogrammetry | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/bin/meshroom_photogrammetry b/bin/meshroom_photogrammetry index e61132e2..dae5183b 100755 --- a/bin/meshroom_photogrammetry +++ b/bin/meshroom_photogrammetry @@ -107,9 +107,10 @@ else: graph = multiview.photogrammetry(inputViewpoints=views, inputIntrinsics=intrinsics, output=args.output) cameraInit = getOnlyNodeOfType(graph, 'CameraInit') -views, intrinsics = cameraInit.nodeDesc.buildIntrinsics(cameraInit, images) -cameraInit.viewpoints.value = views -cameraInit.intrinsics.value = intrinsics +if images: + views, intrinsics = cameraInit.nodeDesc.buildIntrinsics(cameraInit, images) + cameraInit.viewpoints.value = views + cameraInit.intrinsics.value = intrinsics if args.overrides: import io From e5f6247d6bcaff5955c1e0ba26de85cc346eb93b Mon Sep 17 00:00:00 2001 From: Fabien Castan Date: Thu, 8 Aug 2019 11:05:01 +0200 Subject: [PATCH 15/41] [docker] fix paths --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 093f7883..3de3bb27 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,7 +13,7 @@ ENV MESHROOM_DEV=/opt/Meshroom \ PATH="${PATH}:${MESHROOM_BUNDLE}" # Workaround for qmlAlembic/qtAliceVision builds: fuse lib/lib64 folders -RUN cp -rf "${AV_INSTALL}/lib/*" "${AV_INSTALL}/lib64" && rm -rf "${AV_INSTALL}/lib" && ln -s "${AV_INSTALL}/lib64" "${AV_INSTALL}/lib" +RUN cp -rf ${AV_INSTALL}/lib/* ${AV_INSTALL}/lib64 && rm -rf ${AV_INSTALL}/lib && ln -s ${AV_INSTALL}/lib64 ${AV_INSTALL}/lib # Install libs needed by Qt RUN yum install -y \ From 2881b712e60085052f99070f6a0d63d4b7921ec4 Mon Sep 17 00:00:00 2001 From: Anouk Liberge Date: Thu, 8 Aug 2019 11:23:34 +0200 Subject: [PATCH 16/41] [nodes][aliceVision] hdr: clarify descriptions --- meshroom/nodes/aliceVision/LDRToHDR.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/meshroom/nodes/aliceVision/LDRToHDR.py b/meshroom/nodes/aliceVision/LDRToHDR.py index f859e30d..ad36c17d 100644 --- a/meshroom/nodes/aliceVision/LDRToHDR.py +++ b/meshroom/nodes/aliceVision/LDRToHDR.py @@ -22,7 +22,9 @@ class LDRToHDR(desc.CommandLineNode): desc.BoolParam( name='fisheyeLens', label='Fisheye Lens', - description="Check if fisheye lens", + description="Enable if a fisheye lens has been used.\n " + "This will improve the estimation of the Camera's Response Function by considering only the pixels in the center of the image\n" + "and thus ignore undefined/noisy pixels outside the circle defined by the fisheye lens.", value=True, uid=[0], ), @@ -57,7 +59,7 @@ class LDRToHDR(desc.CommandLineNode): name='calibrationWeight', label='Calibration Weight', description="Weight function used to calibrate camera response \n" - " * default \n" + " * default (automatically selected according to the calibrationMethod) \n" " * gaussian \n" " * triangle \n" " * plateau", @@ -70,7 +72,7 @@ class LDRToHDR(desc.CommandLineNode): name='fusionWeight', label='Fusion Weight', description="Weight function used to fuse all LDR images together \n" - " * gaussian \n" + " * gaussian \n" " * triangle \n" " * plateau", value='gaussian', From 15192e2aad3dc4d9a34413901d763a91dfd093c3 Mon Sep 17 00:00:00 2001 From: Fabien Castan Date: Thu, 8 Aug 2019 13:07:39 +0200 Subject: [PATCH 17/41] [cmake] workaround for ExternalProject_Add list arguments --- CMakeLists.txt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 45404a0f..7d6996d3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,7 +54,7 @@ ExternalProject_Add(${QTOIIO_TARGET} SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/qtoiio BINARY_DIR ${BUILD_DIR}/qtoiio_build INSTALL_DIR ${CMAKE_INSTALL_PREFIX} - CONFIGURE_COMMAND ${CMAKE_COMMAND} ${CMAKE_CORE_BUILD_FLAGS} ${OIIO_CMAKE_FLAGS} -DCMAKE_PREFIX_PATH=${QT_DIR} -DCMAKE_INSTALL_PREFIX:PATH= + CONFIGURE_COMMAND ${CMAKE_COMMAND} ${CMAKE_CORE_BUILD_FLAGS} ${OIIO_CMAKE_FLAGS} -DCMAKE_PREFIX_PATH:PATH=${QT_DIR} -DCMAKE_INSTALL_PREFIX:PATH= ) endif() @@ -70,7 +70,7 @@ ExternalProject_Add(${QMLALEMBIC_TARGET} SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/qmlalembic BINARY_DIR ${BUILD_DIR}/qmlalembic_build INSTALL_DIR ${CMAKE_INSTALL_PREFIX} - CONFIGURE_COMMAND ${CMAKE_COMMAND} ${CMAKE_CORE_BUILD_FLAGS} ${ALEMBIC_CMAKE_FLAGS} -DCMAKE_PREFIX_PATH=${QT_DIR} -DCMAKE_INSTALL_PREFIX:PATH= + CONFIGURE_COMMAND ${CMAKE_COMMAND} ${CMAKE_CORE_BUILD_FLAGS} ${ALEMBIC_CMAKE_FLAGS} -DCMAKE_PREFIX_PATH:PATH=${QT_DIR} -DCMAKE_INSTALL_PREFIX:PATH= ) endif() @@ -85,7 +85,9 @@ ExternalProject_Add(${QTALICEVISION_TARGET} SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/qtAliceVision BINARY_DIR ${BUILD_DIR}/qtAliceVision_build INSTALL_DIR ${CMAKE_INSTALL_PREFIX} - CONFIGURE_COMMAND ${CMAKE_COMMAND} ${CMAKE_CORE_BUILD_FLAGS} ${ALEMBIC_CMAKE_FLAGS} -DCMAKE_PREFIX_PATH=${QT_DIR}:${ALICEVISION_ROOT} -DCMAKE_INSTALL_PREFIX:PATH= + LIST_SEPARATOR , # ExternalProject_Add preprocess the CONFIGURE_COMMAND and replaces the usual ";" list separator, so we use another one. + # See https://stackoverflow.com/questions/45414507/pass-a-list-of-prefix-paths-to-externalproject-add-in-cmake-args + CONFIGURE_COMMAND ${CMAKE_COMMAND} ${CMAKE_CORE_BUILD_FLAGS} ${ALEMBIC_CMAKE_FLAGS} -DCMAKE_PREFIX_PATH:PATH=${QT_DIR},${ALICEVISION_ROOT} -DCMAKE_INSTALL_PREFIX:PATH= ) endif() From 13f3715528065e6325aac4cb074f44f416058227 Mon Sep 17 00:00:00 2001 From: Fabien Castan Date: Thu, 8 Aug 2019 13:58:04 +0200 Subject: [PATCH 18/41] [cmake] another workaround --- CMakeLists.txt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7d6996d3..2625faa6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -85,9 +85,7 @@ ExternalProject_Add(${QTALICEVISION_TARGET} SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/qtAliceVision BINARY_DIR ${BUILD_DIR}/qtAliceVision_build INSTALL_DIR ${CMAKE_INSTALL_PREFIX} - LIST_SEPARATOR , # ExternalProject_Add preprocess the CONFIGURE_COMMAND and replaces the usual ";" list separator, so we use another one. - # See https://stackoverflow.com/questions/45414507/pass-a-list-of-prefix-paths-to-externalproject-add-in-cmake-args - CONFIGURE_COMMAND ${CMAKE_COMMAND} ${CMAKE_CORE_BUILD_FLAGS} ${ALEMBIC_CMAKE_FLAGS} -DCMAKE_PREFIX_PATH:PATH=${QT_DIR},${ALICEVISION_ROOT} -DCMAKE_INSTALL_PREFIX:PATH= + CONFIGURE_COMMAND ${CMAKE_COMMAND} ${CMAKE_CORE_BUILD_FLAGS} ${ALEMBIC_CMAKE_FLAGS} -DCMAKE_PREFIX_PATH:PATH=${QT_DIR}$${ALICEVISION_ROOT} -DCMAKE_INSTALL_PREFIX:PATH= ) endif() From a0c0fc6af4d85f7e9e5381fbf235ba76660df55f Mon Sep 17 00:00:00 2001 From: Simone Gasparini Date: Thu, 8 Aug 2019 16:26:56 +0200 Subject: [PATCH 19/41] [github] add issue templates --- .github/ISSUE_TEMPLATE/bug_report.md | 38 +++++++++++++++++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 20 ++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..fa26aa59 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,38 @@ +--- +name: Bug report +about: Create a report to help us improve +title: "[bug]" +labels: bug +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Log** +If applicable, copy paste the relevant log output (please embed the text in a markdown code tag "```" ) + +**Desktop (please complete the following and other pertinent information):** + - OS: [e.g. win 10, osx, ] + - Version [e.g. 2019.1] + - Python version [e.g. 2.6] + - Qt/PySide version [e.g. 5.12.4] + - Binary version (if applicable) [e.g. 2019.1] + - Commit reference (if applicable) [e.g. 08ddbe2] + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..52683c44 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: "[request]" +labels: feature request +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. From 9a53e328e1fc40a5cbe6199e239b404e27f6c546 Mon Sep 17 00:00:00 2001 From: Simone Gasparini Date: Thu, 8 Aug 2019 16:31:50 +0200 Subject: [PATCH 20/41] [github] add pr template --- .github/pull_request_template.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 .github/pull_request_template.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 00000000..de3799ad --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,29 @@ + +## Description + + + +## Features list + + + + +## Implementation remarks + + + From a0baa5b3f2e0361faf39bbc4749fb924a8e907b8 Mon Sep 17 00:00:00 2001 From: Simone Gasparini Date: Thu, 8 Aug 2019 16:36:47 +0200 Subject: [PATCH 21/41] Create CODE_OF_CONDUCT.md --- CODE_OF_CONDUCT.md | 73 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 CODE_OF_CONDUCT.md diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..06cbb2f8 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,73 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of experience, +nationality, personal appearance, race, religion, or sexual identity and +orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or +advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team privately at alicevision-team@googlegroups.com. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct/ + +[homepage]: https://www.contributor-covenant.org From 8ab46e29ff427262777f9198ab03055dfeff09bd Mon Sep 17 00:00:00 2001 From: Simone Gasparini Date: Thu, 8 Aug 2019 16:43:35 +0200 Subject: [PATCH 22/41] Create CONTRIBUTING.md --- CONTRIBUTING.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..543230a6 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,34 @@ +Contributing to Meshroom +=========================== + +Meshroom relies on a friendly and community-driven effort to create an open source photogrammetry solution. +In order to foster a friendly atmosphere where technical collaboration can flourish, +we recommend you to read the [code of conduct](CODE_OF_CONDUCT.md). + + +Contributing Workflow +--------------------- + +The contributing workflow relies on [Github Pull Requests](https://help.github.com/articles/using-pull-requests/). + +1. If it is an important change, we recommend you to discuss it on the mailing-list +before starting implementation. This ensure that the development is aligned with other +developpements already started and will be efficiently integrated. + +2. Create the corresponding issues. + +3. Create a branch and [draft a pull request](https://github.blog/2019-02-14-introducing-draft-pull-requests/) "My new feature" so everyone can follow the development. +Explain the implementation in the PR description with links to issues. + +4. Implement the new feature(s). Add unit test if needed. +One feature per PR is ideal for review, but linked features can be part of the same PR. + +5. When it is ready for review, [mark the pull request as ready for review](https://help.github.com/en/articles/changing-the-stage-of-a-pull-request). + +6. The reviewers will look over the code and ask for changes, explain problems they found, +congratulate the author, etc. using the github comments. + +7. After approval, one of the developers with commit approval to the official main repository +will merge your fixes into the "develop" branch. + +8. If not already the case, your name will be added to the [contributors list](CONTRIBUTORS.md). From ec1a4bee1456018c5e808ed1b8d2bcd4265876d9 Mon Sep 17 00:00:00 2001 From: Simone Gasparini Date: Thu, 8 Aug 2019 17:02:10 +0200 Subject: [PATCH 23/41] [doc] add cii badge --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index de4225d4..6fc97709 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # ![Meshroom - 3D Reconstruction Software](/docs/logo/banner-meshroom.png) +[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/2997/badge)](https://bestpractices.coreinfrastructure.org/projects/2997) + Meshroom is a free, open-source 3D Reconstruction Software based on the [AliceVision](https://github.com/alicevision/AliceVision) Photogrammetric Computer Vision framework. Learn more details about the pipeline on [AliceVision website](http://alicevision.github.io). From 606cfc39c2f0665308d9ce7101270e5007432be6 Mon Sep 17 00:00:00 2001 From: Yann Lanthony Date: Mon, 12 Aug 2019 14:27:20 +0200 Subject: [PATCH 24/41] [ui] Viewer3D: fix Alembic visibility issues Binding the "enabled" property of AlembicLoader's ObjectPicker to the parent MediaLoader's own "enabled" property caused invalid state where the loaded AlembicEntity was partially visible when toggling object visibility (since Qt 5.13). In order to disable camera picking when AlembicEntity is disable, scale the camSelector component to 0. --- meshroom/ui/qml/Viewer3D/AlembicLoader.qml | 11 ++++++++--- meshroom/ui/qml/Viewer3D/MediaLibrary.qml | 2 +- meshroom/ui/qml/Viewer3D/MediaLoader.qml | 3 +-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/meshroom/ui/qml/Viewer3D/AlembicLoader.qml b/meshroom/ui/qml/Viewer3D/AlembicLoader.qml index dba80961..2b2fd74c 100644 --- a/meshroom/ui/qml/Viewer3D/AlembicLoader.qml +++ b/meshroom/ui/qml/Viewer3D/AlembicLoader.qml @@ -11,6 +11,7 @@ import Qt3D.Extras 2.1 AlembicEntity { id: root + property bool cameraPickingEnabled: true // filter out non-reconstructed cameras skipHidden: true @@ -52,9 +53,13 @@ AlembicEntity { }, ObjectPicker { id: cameraPicker - enabled: root.enabled - onClicked: _reconstruction.selectedViewId = camSelector.viewId - } + onPressed: pick.accepted = cameraPickingEnabled + onReleased: _reconstruction.selectedViewId = camSelector.viewId + }, + // Qt 5.13: binding cameraPicker.enabled to cameraPickerEnabled + // causes rendering issues when entity gets disabled. + // Use a scale to 0 to disable picking. + Transform { scale: cameraPickingEnabled ? 1 : 0 } ] } } diff --git a/meshroom/ui/qml/Viewer3D/MediaLibrary.qml b/meshroom/ui/qml/Viewer3D/MediaLibrary.qml index dd3ec84e..56af1866 100644 --- a/meshroom/ui/qml/Viewer3D/MediaLibrary.qml +++ b/meshroom/ui/qml/Viewer3D/MediaLibrary.qml @@ -275,7 +275,7 @@ Entity { components: [ ObjectPicker { - enabled: parent.enabled && pickingEnabled + enabled: mediaLoader.enabled && pickingEnabled hoverEnabled: false onPressed: root.pressed(pick) } diff --git a/meshroom/ui/qml/Viewer3D/MediaLoader.qml b/meshroom/ui/qml/Viewer3D/MediaLoader.qml index 9cf51ddd..936197a0 100644 --- a/meshroom/ui/qml/Viewer3D/MediaLoader.qml +++ b/meshroom/ui/qml/Viewer3D/MediaLoader.qml @@ -80,14 +80,13 @@ import Utils 1.0 id: abcLoaderEntityComponent MediaLoaderEntity { id: abcLoaderEntity - enabled: root.enabled Component.onCompleted: { var obj = Viewer3DSettings.abcLoaderComp.createObject(abcLoaderEntity, { 'source': source, 'pointSize': Qt.binding(function() { return 0.01 * Viewer3DSettings.pointSize }), 'locatorScale': Qt.binding(function() { return Viewer3DSettings.cameraScale }), - 'enabled': Qt.binding(function() { return root.enabled }) + 'cameraPickingEnabled': Qt.binding(function() { return root.enabled }) }); obj.statusChanged.connect(function() { From 8a3d8fa0ad7e38102a4555a648b2609ac28a13f1 Mon Sep 17 00:00:00 2001 From: Yann Lanthony Date: Thu, 25 Jul 2019 21:01:44 +0200 Subject: [PATCH 25/41] [build] update PySide2 version in requirements.txt bump to 5.13.0 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 20a6a627..a0994cf0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ # runtime psutil enum34;python_version<"3.4" -PySide2==5.11.1 +PySide2==5.13.0 markdown==2.6.11 From 66064dedb6a352554644efac8af66d9ab8c4018b Mon Sep 17 00:00:00 2001 From: Fabien Castan Date: Thu, 8 Aug 2019 16:56:32 +0200 Subject: [PATCH 26/41] [docker] new version of Qt has no more lib duplicates --- Dockerfile | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3de3bb27..aac479ac 100644 --- a/Dockerfile +++ b/Dockerfile @@ -46,12 +46,9 @@ COPY . "${MESHROOM_DEV}" RUN source scl_source enable rh-python36 && cd "${MESHROOM_DEV}" && pip install -r dev_requirements.txt -r requirements.txt && python setup.py install_exe -d "${MESHROOM_BUNDLE}" && \ find ${MESHROOM_BUNDLE} -name "*Qt5Web*" -delete && \ find ${MESHROOM_BUNDLE} -name "*Qt5Designer*" -delete && \ - rm ${MESHROOM_BUNDLE}/lib/PySide2/libclang.so* && \ rm -rf ${MESHROOM_BUNDLE}/lib/PySide2/typesystems/ ${MESHROOM_BUNDLE}/lib/PySide2/examples/ ${MESHROOM_BUNDLE}/lib/PySide2/include/ ${MESHROOM_BUNDLE}/lib/PySide2/Qt/translations/ ${MESHROOM_BUNDLE}/lib/PySide2/Qt/resources/ && \ - rm ${MESHROOM_BUNDLE}/lib/PySide2/libQt5* && \ rm ${MESHROOM_BUNDLE}/lib/PySide2/QtWeb* && \ - rm ${MESHROOM_BUNDLE}/lib/PySide2/libicu* && \ - rm ${MESHROOM_BUNDLE}/lib/PySide2/pyside2-lupdate ${MESHROOM_BUNDLE}/lib/PySide2/pyside2-rcc ${MESHROOM_BUNDLE}/lib/PySide2/shiboken2 + rm ${MESHROOM_BUNDLE}/lib/PySide2/pyside2-lupdate ${MESHROOM_BUNDLE}/lib/PySide2/pyside2-rcc # Install Qt (to build plugins) WORKDIR /tmp/qt From 9c593e5e20f8dec01f95b241066d336c6fbbf192 Mon Sep 17 00:00:00 2001 From: Fabien Castan Date: Thu, 8 Aug 2019 14:38:07 +0200 Subject: [PATCH 27/41] [docker] use AliceVision version in container name --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index aac479ac..4d960ad6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ ARG CUDA_TAG=8.0 ARG OS_TAG=7 -FROM alicevision/alicevision:centos${OS_TAG}-cuda${CUDA_TAG} +FROM alicevision/alicevision:2.2.0-centos${OS_TAG}-cuda${CUDA_TAG} LABEL maintainer="AliceVision Team alicevision-team@googlegroups.com" # Execute with nvidia docker (https://github.com/nvidia/nvidia-docker/wiki/Installation-(version-2.0)) From 22e1fabebc77abd97887cc694756aac0fe2916b3 Mon Sep 17 00:00:00 2001 From: Fabien Castan Date: Thu, 8 Aug 2019 13:26:58 +0200 Subject: [PATCH 28/41] Add release notes for 2019.2 --- CHANGES.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 280838f9..c8773c2b 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -3,6 +3,40 @@ For algorithmic changes related to the photogrammetric pipeline, please refer to [AliceVision changelog](https://github.com/alicevision/AliceVision/blob/develop/CHANGES.md). + +## Release 2019.2.0 (2019.08.08) + +Based on [AliceVision 2.2.0](https://github.com/alicevision/AliceVision/tree/v2.2.0). + +Release Notes Summary: + + - Visualisation: New visualization module of the features extraction. [PR](https://github.com/alicevision/meshroom/pull/539), [New QtAliceVision](https://github.com/alicevision/QtAliceVision) + - Support for RAW image files. + - Texturing: Largely improve the Texturing quality. + - Texturing: Speed improvements. + - Texturing: Add support for UDIM. + - Meshing: Export the dense point cloud in Alembic. + - Meshing: New option to export the full raw dense point cloud (with all 3D points candidates before cut and filtering). + - Meshing: Adds an option to export color data per vertex and MeshFiltering correctly preserves colors. + +Full Release Notes: + + - Move to PySide2 / Qt 5.13 + - SfMDataIO: Change root nodes (XForms instead of untyped objects) of Alembic SfMData for better interoperability with other 3D graphics applications (in particular Blender and Houdini). + - Improve performance of log display and node status update. [PR](https://github.com/alicevision/meshroom/pull/466) [PR](https://github.com/alicevision/meshroom/pull/548) + - Viewer3D: Add support for vertex-colored meshes. [PR](https://github.com/alicevision/meshroom/pull/550) + - New pipeline input for meshroom_photogrammetry command line and minor fixes to the input arguments. [PR](https://github.com/alicevision/meshroom/pull/567) [PR](https://github.com/alicevision/meshroom/pull/577) + - New arguments to meshroom. [PR](https://github.com/alicevision/meshroom/pull/413) + - HDR: New HDR module for the fusion of multiple LDR images. + - PrepareDenseScene: Add experimental option to correct Exposure Values (EV) of input images to uniformize dataset exposures. + - FeatureExtraction: Include CCTag in the release binaries both on Linux and Windows. + - ConvertSfMFormat: Enable to use simple regular expressions in the image white list of the ConvertSfMFormat. This enables to filter out cameras based on their filename. + +For more details see all PR merged: https://github.com/alicevision/meshroom/milestone/9 +See [AliceVision 2.2.0 Release Notes](https://github.com/alicevision/AliceVision/blob/v2.2.0/CHANGES.md) +for more details about algorithmic changes. + + ## Release 2019.1.0 (2019.02.27) Based on [AliceVision 2.1.0](https://github.com/alicevision/AliceVision/tree/v2.1.0). From 87c74ed56f3655acaefc7c5e660b7697b0e8fea3 Mon Sep 17 00:00:00 2001 From: Fabien Castan Date: Thu, 8 Aug 2019 15:14:38 +0200 Subject: [PATCH 29/41] [doc] INSTALL: Add Qt information --- INSTALL.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/INSTALL.md b/INSTALL.md index 3fd04ada..4f4a357c 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -36,6 +36,11 @@ pip install -r requirements.txt -r dev_requirements.txt ``` > Note: `dev_requirements` is only related to testing and packaging. It is not mandatory to run Meshroom. +### Qt/PySide +* PySide >= 5.12.2 +Warning: On Windows, the plugin AssimpSceneParser is missing from pre-built binaries, so you need to add it manually (from an older version for instance). +See https://bugreports.qt.io/browse/QTBUG-74535 + ### Qt Plugins Additional Qt plugins can be built to extend Meshroom UI features. They can be found on separate repositories, though they might get better integration in the future. From 8d275609e84951ee4151f5d9953487e84f5c9731 Mon Sep 17 00:00:00 2001 From: Fabien Castan Date: Thu, 8 Aug 2019 15:17:15 +0200 Subject: [PATCH 30/41] [doc] INSTALL: add QtAliceVision --- INSTALL.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/INSTALL.md b/INSTALL.md index 4f4a357c..24756a48 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -60,3 +60,11 @@ This plugin also provides a QML Qt3D Entity to load depthmaps files stored in EX QT_PLUGIN_PATH=/path/to/QtOIIO/install QML2_IMPORT_PATH=/path/to/QtOIIO/install/qml ``` + +#### [QtAliceVision](https://github.com/alicevision/QtAliceVision) +Use AliceVision to load and visualize intermediate reconstruction files. +``` +QML2_IMPORT_PATH=/path/to/qtAliceVision/install/qml +``` + + From 1fce38a128281b181499ed61c5259c8220b00810 Mon Sep 17 00:00:00 2001 From: Yann Lanthony Date: Thu, 25 Jul 2019 21:02:36 +0200 Subject: [PATCH 31/41] [release] Update Meshroom version to 2019.2.0 --- meshroom/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshroom/__init__.py b/meshroom/__init__.py index 2a2fc4bb..7bda50a1 100644 --- a/meshroom/__init__.py +++ b/meshroom/__init__.py @@ -1,4 +1,4 @@ -__version__ = "2019.1.0" +__version__ = "2019.2.0" __version_name__ = __version__ import os From 3e483ea1393b89ba56d366888fcc01d686a54002 Mon Sep 17 00:00:00 2001 From: Fabien Castan Date: Wed, 14 Aug 2019 15:22:37 +0200 Subject: [PATCH 32/41] [release] Update multiview pipeline version to 2.2 --- meshroom/multiview.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshroom/multiview.py b/meshroom/multiview.py index a6f8be38..1474b222 100644 --- a/meshroom/multiview.py +++ b/meshroom/multiview.py @@ -1,5 +1,5 @@ # Multiview pipeline version -__version__ = "2.1" +__version__ = "2.2" import os From 59da35095a25d3b08589c84149e52a8a2f480f50 Mon Sep 17 00:00:00 2001 From: Fabien Castan Date: Fri, 16 Aug 2019 17:17:49 +0200 Subject: [PATCH 33/41] [doc] Minor fix to CONTRIBUTING --- CONTRIBUTING.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 543230a6..e3f4e00f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -30,5 +30,3 @@ congratulate the author, etc. using the github comments. 7. After approval, one of the developers with commit approval to the official main repository will merge your fixes into the "develop" branch. - -8. If not already the case, your name will be added to the [contributors list](CONTRIBUTORS.md). From 85aeec4bd8f894f3128aa8f153c6af13c5fa4b67 Mon Sep 17 00:00:00 2001 From: Simone Gasparini Date: Fri, 16 Aug 2019 21:06:09 +0200 Subject: [PATCH 34/41] Added automatic stale detection and closing for issues --- .github/stale.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 .github/stale.yml diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 00000000..03dc195e --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1,17 @@ +# Number of days of inactivity before an issue becomes stale +daysUntilStale: 60 +# Number of days of inactivity before a stale issue is closed +daysUntilClose: 7 +# Issues with these labels will never be considered stale +exemptLabels: false +# Label to use when marking an issue as stale +staleLabel: stale +# Comment to post when marking an issue as stale. Set to `false` to disable +markComment: > + This issue has been automatically marked as stale because it has not had + recent activity. It will be closed if no further activity occurs. Thank you + for your contributions. +# Comment to post when closing a stale issue. Set to `false` to disable +closeComment: > + This issue is closed due to inactivity. Feel free to re-open if new information + is available. From d20ce2ece4885f27921078e4d177d0d66a18245e Mon Sep 17 00:00:00 2001 From: Simone Gasparini Date: Fri, 16 Aug 2019 21:55:38 +0200 Subject: [PATCH 35/41] [github] set daysUntilStale to 120 --- .github/stale.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/stale.yml b/.github/stale.yml index 03dc195e..e33f1ed9 100644 --- a/.github/stale.yml +++ b/.github/stale.yml @@ -1,5 +1,5 @@ # Number of days of inactivity before an issue becomes stale -daysUntilStale: 60 +daysUntilStale: 120 # Number of days of inactivity before a stale issue is closed daysUntilClose: 7 # Issues with these labels will never be considered stale From 9d8e3648b2ab3b4740b75ccc54d06d33907e51ba Mon Sep 17 00:00:00 2001 From: Fabien Castan Date: Wed, 21 Aug 2019 21:36:11 +0200 Subject: [PATCH 36/41] [core] submitters: if there is only one submitter, use it! More explicit error messages when the submitter is not found. --- meshroom/core/graph.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/meshroom/core/graph.py b/meshroom/core/graph.py index 858820ef..0427b33f 100644 --- a/meshroom/core/graph.py +++ b/meshroom/core/graph.py @@ -1150,9 +1150,15 @@ def submitGraph(graph, submitter, toNodes=None): logging.info("Nodes to process: {}".format(edgesToProcess)) logging.info("Edges to process: {}".format(edgesToProcess)) - sub = meshroom.core.submitters.get(submitter, None) + sub = None + if submitter: + sub = meshroom.core.submitters.get(submitter, None) + elif len(meshroom.core.submitters) == 1: + # if only one submitter available use it + sub = meshroom.core.submitters.values()[0] if sub is None: - raise RuntimeError("Unknown Submitter : " + submitter) + raise RuntimeError("Unknown Submitter: '{submitter}'. Available submitters are: '{allSubmitters}'.".format( + submitter=submitter, allSubmitters=str(meshroom.core.submitters.keys()))) try: res = sub.submit(nodesToProcess, edgesToProcess, graph.filepath) From c07750b5386e6675b3d21ed1a8e15937e7304c24 Mon Sep 17 00:00:00 2001 From: Fabien Castan Date: Wed, 21 Aug 2019 21:41:45 +0200 Subject: [PATCH 37/41] [docker] minor simplification --- Dockerfile | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4d960ad6..144f8058 100644 --- a/Dockerfile +++ b/Dockerfile @@ -37,13 +37,14 @@ RUN yum install -y \ xcb-util-image # Install Python3 -RUN yum install -y centos-release-scl -RUN yum install -y rh-python36 +RUN yum install -y centos-release-scl && yum install -y rh-python36 COPY . "${MESHROOM_DEV}" +WORKDIR "${MESHROOM_DEV}" + # Install Meshroom requirements and freeze bundle -RUN source scl_source enable rh-python36 && cd "${MESHROOM_DEV}" && pip install -r dev_requirements.txt -r requirements.txt && python setup.py install_exe -d "${MESHROOM_BUNDLE}" && \ +RUN source scl_source enable rh-python36 && pip install -r dev_requirements.txt -r requirements.txt && python setup.py install_exe -d "${MESHROOM_BUNDLE}" && \ find ${MESHROOM_BUNDLE} -name "*Qt5Web*" -delete && \ find ${MESHROOM_BUNDLE} -name "*Qt5Designer*" -delete && \ rm -rf ${MESHROOM_BUNDLE}/lib/PySide2/typesystems/ ${MESHROOM_BUNDLE}/lib/PySide2/examples/ ${MESHROOM_BUNDLE}/lib/PySide2/include/ ${MESHROOM_BUNDLE}/lib/PySide2/Qt/translations/ ${MESHROOM_BUNDLE}/lib/PySide2/Qt/resources/ && \ From 8ba80fcb91f2ba76e71698c4efe3d50d5a68164d Mon Sep 17 00:00:00 2001 From: Fabien Castan Date: Wed, 21 Aug 2019 21:43:01 +0200 Subject: [PATCH 38/41] [docker] add dockerfile for python2 --- Dockerfile_py2 | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 Dockerfile_py2 diff --git a/Dockerfile_py2 b/Dockerfile_py2 new file mode 100644 index 00000000..2641ee0c --- /dev/null +++ b/Dockerfile_py2 @@ -0,0 +1,74 @@ +ARG CUDA_TAG=8.0 +ARG OS_TAG=7 +FROM alicevision/alicevision:2.2.0-centos${OS_TAG}-cuda${CUDA_TAG} +LABEL maintainer="AliceVision Team alicevision-team@googlegroups.com" + +# Execute with nvidia docker (https://github.com/nvidia/nvidia-docker/wiki/Installation-(version-2.0)) +# docker run -it --runtime=nvidia meshroom + +ENV MESHROOM_DEV=/opt/Meshroom \ + MESHROOM_BUILD=/tmp/Meshroom_build \ + MESHROOM_BUNDLE=/opt/Meshroom_bundle \ + QT_DIR=/opt/qt/5.13.0/gcc_64 \ + PATH="${PATH}:${MESHROOM_BUNDLE}" + +# Workaround for qmlAlembic/qtAliceVision builds: fuse lib/lib64 folders +RUN cp -rf ${AV_INSTALL}/lib/* ${AV_INSTALL}/lib64 && rm -rf ${AV_INSTALL}/lib && ln -s ${AV_INSTALL}/lib64 ${AV_INSTALL}/lib + +# Install libs needed by Qt +RUN yum install -y \ + flex \ + fontconfig \ + freetype \ + glib2 \ + libICE \ + libX11 \ + libxcb \ + libXext \ + libXi \ + libXrender \ + libSM \ + libXt-devel \ + libGLU-devel \ + mesa-libOSMesa-devel \ + mesa-libGL-devel \ + mesa-libGLU-devel \ + xcb-util-keysyms \ + xcb-util-image + +# Install Python2 +RUN yum install -y python-devel && curl https://bootstrap.pypa.io/get-pip.py -o /tmp/get-pip.py && python /tmp/get-pip.py + +COPY . "${MESHROOM_DEV}" + +WORKDIR "${MESHROOM_DEV}" + +# Install Meshroom requirements and freeze bundle +RUN pip install -r dev_requirements.txt -r requirements.txt && python setup.py install_exe -d "${MESHROOM_BUNDLE}" && \ + find ${MESHROOM_BUNDLE} -name "*Qt5Web*" -delete && \ + find ${MESHROOM_BUNDLE} -name "*Qt5Designer*" -delete && \ + rm -rf ${MESHROOM_BUNDLE}/lib/PySide2/typesystems/ ${MESHROOM_BUNDLE}/lib/PySide2/examples/ ${MESHROOM_BUNDLE}/lib/PySide2/include/ ${MESHROOM_BUNDLE}/lib/PySide2/Qt/translations/ ${MESHROOM_BUNDLE}/lib/PySide2/Qt/resources/ && \ + rm ${MESHROOM_BUNDLE}/lib/PySide2/QtWeb* && \ + rm ${MESHROOM_BUNDLE}/lib/PySide2/pyside2-lupdate ${MESHROOM_BUNDLE}/lib/PySide2/pyside2-rcc + +# Install Qt (to build plugins) +WORKDIR /tmp/qt +# Qt version in specified in docker/qt-installer-noninteractive.qs +RUN curl -LO http://download.qt.io/official_releases/online_installers/qt-unified-linux-x64-online.run && \ + chmod u+x qt-unified-linux-x64-online.run && \ + ./qt-unified-linux-x64-online.run --verbose --platform minimal --script "${MESHROOM_DEV}/docker/qt-installer-noninteractive.qs" && \ + rm ./qt-unified-linux-x64-online.run + +WORKDIR ${MESHROOM_BUILD} + +# Build Meshroom plugins +RUN cmake "${MESHROOM_DEV}" -DALICEVISION_ROOT="${AV_INSTALL}" -DQT_DIR="${QT_DIR}" -DCMAKE_INSTALL_PREFIX="${MESHROOM_BUNDLE}/qtPlugins" +# RUN make -j8 qtOIIO +# RUN make -j8 qmlAlembic +# RUN make -j8 qtAliceVision +RUN make -j8 && cd /tmp && rm -rf ${MESHROOM_BUILD} + +RUN mv "${AV_BUNDLE}" "${MESHROOM_BUNDLE}/aliceVision" +RUN rm -rf ${MESHROOM_BUNDLE}/aliceVision/share/doc ${MESHROOM_BUNDLE}/aliceVision/share/eigen3 ${MESHROOM_BUNDLE}/aliceVision/share/fonts ${MESHROOM_BUNDLE}/aliceVision/share/lemon ${MESHROOM_BUNDLE}/aliceVision/share/libraw ${MESHROOM_BUNDLE}/aliceVision/share/man/ aliceVision/share/pkgconfig + + From 18e16811f43bf57fcb78ce5cb328ec2f320bd3c5 Mon Sep 17 00:00:00 2001 From: Fabien Castan Date: Wed, 21 Aug 2019 21:46:35 +0200 Subject: [PATCH 39/41] [cxFreeze] bundle more context files --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 3a132728..4bbe3df2 100644 --- a/setup.py +++ b/setup.py @@ -41,7 +41,7 @@ class PlatformExecutable(Executable): build_exe_options = { # include dynamically loaded plugins "packages": ["meshroom.nodes", "meshroom.submitters"], - "include_files": ['COPYING.md'] + "include_files": ["CHANGES.md", "COPYING.md", "LICENSE-MPL2.md", "README.md"] } if platform.system() == PlatformExecutable.Linux: From e5c40a9b7f69a3634edc93485d8fd47b3725e894 Mon Sep 17 00:00:00 2001 From: Fabien Castan Date: Fri, 23 Aug 2019 14:42:53 +0200 Subject: [PATCH 40/41] [docker] go back to cuda-7.0 for compatibility --- Dockerfile | 2 +- Dockerfile_py2 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 144f8058..4de93473 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -ARG CUDA_TAG=8.0 +ARG CUDA_TAG=7.0 ARG OS_TAG=7 FROM alicevision/alicevision:2.2.0-centos${OS_TAG}-cuda${CUDA_TAG} LABEL maintainer="AliceVision Team alicevision-team@googlegroups.com" diff --git a/Dockerfile_py2 b/Dockerfile_py2 index 2641ee0c..be08aa93 100644 --- a/Dockerfile_py2 +++ b/Dockerfile_py2 @@ -1,4 +1,4 @@ -ARG CUDA_TAG=8.0 +ARG CUDA_TAG=7.0 ARG OS_TAG=7 FROM alicevision/alicevision:2.2.0-centos${OS_TAG}-cuda${CUDA_TAG} LABEL maintainer="AliceVision Team alicevision-team@googlegroups.com" From d59861f13ec425ca769baa8c7836f0a4ec628bdc Mon Sep 17 00:00:00 2001 From: Fabien Castan Date: Mon, 9 Sep 2019 16:49:35 +0200 Subject: [PATCH 41/41] [docker] minor fix for python-2 --- Dockerfile_py2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile_py2 b/Dockerfile_py2 index be08aa93..4e277848 100644 --- a/Dockerfile_py2 +++ b/Dockerfile_py2 @@ -37,7 +37,7 @@ RUN yum install -y \ xcb-util-image # Install Python2 -RUN yum install -y python-devel && curl https://bootstrap.pypa.io/get-pip.py -o /tmp/get-pip.py && python /tmp/get-pip.py +RUN yum install -y python-devel && curl https://bootstrap.pypa.io/get-pip.py -o /tmp/get-pip.py && python /tmp/get-pip.py && pip install --upgrade pip COPY . "${MESHROOM_DEV}"