Newer
Older
paul.tresson_ird.fr
committed
import sys
from PyQt5.QtWidgets import QAction, QToolBar
from PyQt5.QtCore import pyqtSignal, QObject
from qgis.core import QgsApplication
from qgis.gui import QgisInterface
from .provider import IAMapProvider
from .icons import (
QIcon_EncoderTool,
QIcon_ReductionTool,
QIcon_ClusterTool,
QIcon_SimilarityTool,
QIcon_RandomforestTool,
)
class IAMap(QObject):
execute_iamap = pyqtSignal()
def __init__(self, iface: QgisInterface, cwd: str):
super().__init__()
self.iface = iface
self.cwd = cwd
def initProcessing(self):
self.provider = IAMapProvider()
QgsApplication.processingRegistry().addProvider(self.provider)
def initGui(self):
self.initProcessing()
self.toolbar: QToolBar = self.iface.addToolBar("IAMap Toolbar")
self.toolbar.setObjectName("IAMapToolbar")
self.toolbar.setToolTip("IAMap Toolbar")
QIcon_EncoderTool, "Deep Learning Image Encoder", self.iface.mainWindow()
QIcon_ReductionTool, "Reduce dimensions", self.iface.mainWindow()
QIcon_ClusterTool, "Cluster raster", self.iface.mainWindow()
QIcon_SimilarityTool, "Compute similarity", self.iface.mainWindow()
)
self.actionRF = QAction(
QIcon_RandomforestTool,
"Fit Machine Learning algorithm",
)
self.actionEncoder.setObjectName("mActionEncoder")
self.actionReducer.setObjectName("mActionReducer")
self.actionCluster.setObjectName("mActionCluster")
self.actionSimilarity.setObjectName("mactionSimilarity")
self.actionRF.setObjectName("mactionRF")
self.actionEncoder.setToolTip("Encode a raster with a deep learning backbone")
self.actionReducer.setToolTip("Reduce raster dimensions")
self.actionCluster.setToolTip("Cluster raster")
self.actionSimilarity.setToolTip("Compute similarity")
self.actionRF.setToolTip("Fit ML model")
self.actionEncoder.triggered.connect(self.encodeImage)
self.actionReducer.triggered.connect(self.reduceImage)
self.actionCluster.triggered.connect(self.clusterImage)
self.actionSimilarity.triggered.connect(self.similarityImage)
self.actionRF.triggered.connect(self.rfImage)
self.toolbar.addAction(self.actionEncoder)
self.toolbar.addAction(self.actionReducer)
self.toolbar.addAction(self.actionCluster)
self.toolbar.addAction(self.actionSimilarity)
self.toolbar.addAction(self.actionRF)
def unload(self):
# self.wdg_select.setVisible(False)
self.iface.removeToolBarIcon(self.actionEncoder)
self.iface.removeToolBarIcon(self.actionReducer)
self.iface.removeToolBarIcon(self.actionCluster)
self.iface.removeToolBarIcon(self.actionSimilarity)
self.iface.removeToolBarIcon(self.actionRF)
del self.actionEncoder
del self.actionReducer
del self.actionCluster
del self.actionSimilarity
del self.actionRF
del self.toolbar
QgsApplication.processingRegistry().removeProvider(self.provider)
def encodeImage(self):
paul.tresson_ird.fr
committed
## if os is windows, the python console is triggered.
## This temporarly solves downloading issues via huggingface
if sys.platform == "win32":
self.iface.actionShowPythonDialog().trigger()
result = processing.execAlgorithmDialog("iamap:encoder", {})
# Check if algorithm execution was successful
if result:
# Retrieve output parameters from the result dictionary
if "OUTPUT_RASTER" in result:
output_raster_path = result["OUTPUT_RASTER"]
output_layer_name = result["OUTPUT_LAYER_NAME"]
self.iface.addRasterLayer(str(output_raster_path), output_layer_name)
print("Output raster not found in algorithm result.")
else:
# Handle algorithm execution failure or cancellation
print("Algorithm execution was not successful.")
# processing.execAlgorithmDialog('', {})
# self.close_all_dialogs()
def reduceImage(self):
""" """
result = processing.execAlgorithmDialog("iamap:reduction", {})
# Check if algorithm execution was successful
if result:
# Retrieve output parameters from the result dictionary
if "OUTPUT_RASTER" in result:
output_raster_path = result["OUTPUT_RASTER"]
output_layer_name = result["OUTPUT_LAYER_NAME"]
self.iface.addRasterLayer(str(output_raster_path), output_layer_name)
print("Output raster not found in algorithm result.")
else:
# Handle algorithm execution failure or cancellation
print("Algorithm execution was not successful.")
# processing.execAlgorithmDialog('', {})
def clusterImage(self):
""" """
result = processing.execAlgorithmDialog("iamap:cluster", {})
# Check if algorithm execution was successful
if result:
# Retrieve output parameters from the result dictionary
if "OUTPUT_RASTER" in result:
output_raster_path = result["OUTPUT_RASTER"]
output_layer_name = result["OUTPUT_LAYER_NAME"]
self.iface.addRasterLayer(str(output_raster_path), output_layer_name)
print("Output raster not found in algorithm result.")
else:
# Handle algorithm execution failure or cancellation
print("Algorithm execution was not successful.")
# processing.execAlgorithmDialog('', {})
def similarityImage(self):
""" """
result = processing.execAlgorithmDialog("iamap:similarity", {})
# Check if algorithm execution was successful
if result:
# Retrieve output parameters from the result dictionary
if "OUTPUT_RASTER" in result:
output_raster_path = result["OUTPUT_RASTER"]
output_layer_name = result["OUTPUT_LAYER_NAME"]
used_shp = result["USED_SHP"]
self.iface.addRasterLayer(str(output_raster_path), output_layer_name)
self.iface.addVectorLayer(str(used_shp), "used points", "ogr")
print("Output raster not found in algorithm result.")
else:
# Handle algorithm execution failure or cancellation
print("Algorithm execution was not successful.")
""" """
result = processing.execAlgorithmDialog("iamap:ml", {})
# Check if algorithm execution was successful
if result:
# Retrieve output parameters from the result dictionary
if "OUTPUT_RASTER" in result:
output_raster_path = result["OUTPUT_RASTER"]
output_layer_name = result["OUTPUT_LAYER_NAME"]
used_shp = result["USED_SHP"]
self.iface.addRasterLayer(str(output_raster_path), output_layer_name)
self.iface.addVectorLayer(str(used_shp), "used points", "ogr")
print("Output raster not found in algorithm result.")
else:
# Handle algorithm execution failure or cancellation
print("Algorithm execution was not successful.")