[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.1
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.1
        - Fix: corporate SSL inspection blocking the install. uv now
          uses the OS native TLS (--native-tls) so Windows-installed
          corporate CAs are trusted, and download.pytorch.org is in
          the allow-insecure-host list alongside pypi.org and
          files.pythonhosted.org. Same flag added to the pip code path
          via --trusted-host.
        - Fix: Linux first-install failed at ensurepip step because
          python-build-standalone Linux tarballs do not ship the
          bundled pip wheel. The venv is now created with --without-pip
          (we use uv for all package installs anyway).
        - Fix: CUDA wheel selection now cascades through cu128 -> cu126
          -> cu124 -> cu121 -> cu118 instead of giving up at the first
          driver-version miss. Recovers GPU acceleration for NVIDIA
          drivers older than 550.
        - Fix: cap torch version per cuda index (cu118/cu121 -> torch
          <2.6, cu124 -> torch <2.8) so uv no longer picks the latest
          +cpu wheel from the cuda index instead of the latest +cuXXX.
        - Add: install marker recording the plugin version that built
          the venv. On version mismatch the Setup dock reopens with a
          one-click Reinstall that wipes the stale venv automatically.
        - Add: classification-coloured 3D renderer auto-attached to
          loaded layers so the 3D Map View renders points in 3D out of
          the box.
    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)
