[general]
name=Aerial LiDAR Classifier
qgisMinimumVersion=3.34
qgisMaximumVersion=3.99
description=Deep-learning semantic segmentation of aerial LiDAR point clouds with a 3D SegFormer model (TreeAIBox / NRCan).
version=1.0.0
author=Abderrazzaq Kharroubi (GeoScITY Lab, University of Liege)
email=akharroubi2@gmail.com
license=GPL-3.0-or-later

about=Semantic segmentation of aerial LiDAR point clouds (LAS / LAZ / COPC)
    using the 3D SegFormer architecture, written to the standard ASPRS
    'classification' dimension.

    Primary classes (default ASPRS codes):
      - Ground            (ASPRS 2)
      - Vegetation        (ASPRS 5)
      - Building          (ASPRS 6)
      - Wires / Powerlines (ASPRS 14)
      - Poles             (ASPRS 15)

    Auxiliary classes (mapped to ASPRS 1 = Unclassified, the LAS spec
    has no dedicated code for them):
      - Vehicles
      - Fences

    Features:
      - Native dock-based UI: drag-and-drop LAS / LAZ / COPC, layer picker, batch processing
      - QGIS Processing algorithm for use in the Toolbox, Graphical Modeler and qgis_process CLI
      - Background QgsTask execution with full progress and cancellation
      - One-click dependency installer (downloads a portable Python +
        uv into an isolated venv; does NOT touch QGIS's own Python)
      - Automatic NVIDIA GPU detection (compute capability + driver
        version) with the right CUDA wheel (cu121 / cu124 / cu126 /
        cu128) selected per system; CPU fallback; Apple Silicon MPS
      - On-demand model download with SHA-256 verification (uses
        QgsBlockingNetworkRequest so the QGIS proxy is respected)
      - Spatial tiling and streaming I/O for files larger than RAM
      - Direct loading of classified outputs as QGIS point-cloud layers (PDAL)

    Requirements / external dependencies:
      - QGIS >= 3.34
      - PyTorch + torchvision (2.x), laspy, lazrs, timm, numpy_indexed,
        numpy (<2.0). These are NOT bundled - they are downloaded into
        a per-user isolated virtual environment on first run (no admin
        rights, no impact on QGIS's own Python). About 1-3 GB on disk
        depending on whether a CUDA build is installed.
      - Optional: an NVIDIA GPU with a driver new enough for the
        chosen CUDA toolkit (see plugin documentation for the table).
      - The bundled deep-learning model is downloaded on first use
        (~18 MB) from the official TreeAIBox release.

    Restrictions / licensing:
      - The plugin source code is licensed under GPL-3.0-or-later.
      - The downloaded model is licensed under CC BY-NC 4.0
        (Creative Commons Attribution-NonCommercial 4.0). Commercial
        users must obtain a separate licence from the model author.
      - No spatial / regional restriction.

    The model is the UrbanFiltering 3D SegFormer from the TreeAIBox project
    (Zhouxin Xi, tested by Charumitha Selvaraj - Natural Resources Canada, NRCan),
    Crown Copyright, Government of Canada, distributed under CC BY-NC 4.0:
    https://github.com/NRCan/TreeAIBox

tracker=https://github.com/akharroubi/AerialLidarClassifier/issues
repository=https://github.com/akharroubi/AerialLidarClassifier
homepage=https://github.com/akharroubi/AerialLidarClassifier

tags=lidar,point cloud,classification,semantic segmentation,deep learning,segformer,machine learning,pytorch,asprs,las,laz,copc,aerial,treeaibox

category=Analysis
icon=icon.png

experimental=True
deprecated=False
hasProcessingProvider=yes
server=False

changelog=
    1.0.0
        - Initial public release on the QGIS plugin repository
        - 3D SegFormer (UrbanFiltering, TreeAIBox / NRCan) integration
        - QGIS Processing algorithm + provider (Toolbox, Modeler, qgis_process CLI)
        - Isolated per-user venv dependency installer (PyTorch CPU /
          CUDA 12.1 / 12.4 / 12.6 / 12.8), compute-capability- and
          driver-version-aware wheel selection
        - Background QgsTask with progress and cancellation
        - LAS / LAZ / COPC input; LAS or LAZ output (matches input)
        - Spatial tiling and streaming I/O for files larger than RAM
        - Optional automatic loading of results as point-cloud layers
        - SHA-256 verification of downloaded model weights
        - Network calls go through QgsBlockingNetworkRequest (proxy /
          auth / certificates honoured per QGIS plugin guidelines)
