mirror of
https://github.com/alicevision/Meshroom.git
synced 2025-04-28 17:57:16 +02:00
160 lines
5.6 KiB
Python
160 lines
5.6 KiB
Python
from distutils import util
|
|
from enum import Enum
|
|
import logging
|
|
import os
|
|
import sys
|
|
|
|
|
|
class VersionStatus(Enum):
|
|
release = 1
|
|
develop = 2
|
|
|
|
|
|
__version__ = "2024.1.0"
|
|
# Always increase the minor version when switching from release to develop.
|
|
__version_status__ = VersionStatus.develop
|
|
|
|
if __version_status__ is VersionStatus.develop:
|
|
__version__ += "-" + __version_status__.name
|
|
|
|
__version_label__ = __version__
|
|
# Modify version label if we are in a development phase.
|
|
if __version_status__ is VersionStatus.develop:
|
|
|
|
scriptPath = os.path.dirname(os.path.abspath(__file__))
|
|
headFilepath = os.path.join(scriptPath, "../.git/HEAD")
|
|
if os.path.exists(headFilepath):
|
|
# Add git branch name, if it is a git repository
|
|
with open(headFilepath, "r") as headFile:
|
|
data = headFile.readlines()
|
|
branchName = data[0].split('/')[-1].strip()
|
|
__version_label__ += " branch=" + branchName
|
|
else:
|
|
# Add a generic default label "develop"
|
|
__version_label__ += "-" + __version_status__.name
|
|
|
|
# Allow override from env variable
|
|
if "REZ_MESHROOM_VERSION" in os.environ:
|
|
__version_label__ += " package=" + os.environ.get("REZ_MESHROOM_VERSION")
|
|
elif "ION_MESHROOM_VERSION" in os.environ:
|
|
__version_label__ += " container=" + os.environ.get("ION_MESHROOM_VERSION")
|
|
|
|
|
|
# Internal imports after the definition of the version
|
|
from .common import init, Backend
|
|
|
|
# sys.frozen is initialized by cx_Freeze and identifies a release package
|
|
isFrozen = getattr(sys, "frozen", False)
|
|
|
|
useMultiChunks = util.strtobool(os.environ.get("MESHROOM_USE_MULTI_CHUNKS", "True"))
|
|
|
|
logStringToPython = {
|
|
'fatal': logging.FATAL,
|
|
'error': logging.ERROR,
|
|
'warning': logging.WARNING,
|
|
'info': logging.INFO,
|
|
'debug': logging.DEBUG,
|
|
'trace': logging.DEBUG,
|
|
}
|
|
logging.getLogger().setLevel(logStringToPython[os.environ.get('MESHROOM_VERBOSE', 'warning')])
|
|
|
|
|
|
def setupEnvironment(backend=Backend.STANDALONE):
|
|
"""
|
|
Setup environment for Meshroom to work in a prebuilt, standalone configuration.
|
|
|
|
Use 'MESHROOM_INSTALL_DIR' to simulate standalone configuration with a path to a Meshroom installation folder.
|
|
|
|
# Meshroom standalone structure
|
|
|
|
- Meshroom/
|
|
- aliceVision/
|
|
- bin/ # runtime bundled binaries (windows: exe + libs, unix: executables)
|
|
- lib/ # runtime bundled libraries (unix: libs)
|
|
- share/ # resource files
|
|
- aliceVision/
|
|
- COPYING.md # AliceVision COPYING file
|
|
- cameraSensors.db # sensor database
|
|
- vlfeat_K80L3.tree # voctree file
|
|
- lib/ # Python lib folder
|
|
- qtPlugins/
|
|
Meshroom # main executable
|
|
COPYING.md # Meshroom COPYING file
|
|
"""
|
|
|
|
init(backend)
|
|
|
|
def addToEnvPath(var, val, index=-1):
|
|
"""
|
|
Add paths to the given environment variable.
|
|
|
|
Args:
|
|
var (str): the name of the variable to add paths to
|
|
val (str or list of str): the path(s) to add
|
|
index (int): insertion index
|
|
"""
|
|
if not val:
|
|
return
|
|
|
|
paths = os.environ.get(var, "").split(os.pathsep)
|
|
|
|
if not isinstance(val, (list, tuple)):
|
|
val = [val]
|
|
|
|
if index == -1:
|
|
paths.extend(val)
|
|
elif index == 0:
|
|
paths = val + paths
|
|
else:
|
|
raise ValueError("addToEnvPath: index must be -1 or 0.")
|
|
os.environ[var] = os.pathsep.join(paths)
|
|
|
|
# setup root directory (override possible by setting "MESHROOM_INSTALL_DIR" environment variable)
|
|
rootDir = os.path.dirname(sys.executable) if isFrozen else os.environ.get("MESHROOM_INSTALL_DIR", None)
|
|
logging.debug(f"isFrozen={isFrozen}")
|
|
logging.debug(f"sys.executable={sys.executable}")
|
|
logging.debug(f"rootDir={rootDir}")
|
|
|
|
if rootDir:
|
|
os.environ["MESHROOM_INSTALL_DIR"] = rootDir
|
|
|
|
aliceVisionDir = os.path.join(rootDir, "aliceVision")
|
|
# default directories
|
|
aliceVisionBinDir = os.path.join(aliceVisionDir, "bin")
|
|
aliceVisionShareDir = os.path.join(aliceVisionDir, "share", "aliceVision")
|
|
qtPluginsDir = os.path.join(rootDir, "qtPlugins")
|
|
sensorDBPath = os.path.join(aliceVisionShareDir, "cameraSensors.db")
|
|
voctreePath = os.path.join(aliceVisionShareDir, "vlfeat_K80L3.SIFT.tree")
|
|
sphereDetectionModel = os.path.join(aliceVisionShareDir, "sphereDetection_Mask-RCNN.onnx")
|
|
semanticSegmentationModel = os.path.join(aliceVisionShareDir, "fcn_resnet50.onnx")
|
|
|
|
env = {
|
|
'PATH': aliceVisionBinDir,
|
|
'QT_PLUGIN_PATH': [qtPluginsDir],
|
|
'QML2_IMPORT_PATH': [os.path.join(qtPluginsDir, "qml")]
|
|
}
|
|
|
|
for key, value in env.items():
|
|
logging.debug(f"Add to {key}: {value}")
|
|
addToEnvPath(key, value, 0)
|
|
|
|
variables = {
|
|
"ALICEVISION_ROOT": aliceVisionDir,
|
|
"ALICEVISION_SENSOR_DB": sensorDBPath,
|
|
"ALICEVISION_VOCTREE": voctreePath,
|
|
"ALICEVISION_SPHERE_DETECTION_MODEL": sphereDetectionModel,
|
|
"ALICEVISION_SEMANTIC_SEGMENTATION_MODEL": semanticSegmentationModel
|
|
}
|
|
|
|
for key, value in variables.items():
|
|
if key not in os.environ and os.path.exists(value):
|
|
logging.debug(f"Set {key}: {value}")
|
|
os.environ[key] = value
|
|
else:
|
|
addToEnvPath("PATH", os.environ.get("ALICEVISION_BIN_PATH", ""))
|
|
|
|
|
|
os.environ["QML_XHR_ALLOW_FILE_READ"] = '1'
|
|
os.environ["QML_XHR_ALLOW_FILE_WRITE"] = '1'
|
|
os.environ["PYSEQ_STRICT_PAD"] = '1'
|
|
os.environ["QSG_RHI_BACKEND"] = "opengl"
|