Skip to content

Releases: All4Gis/QGISFMV

v4.0

Choose a tag to compare

@github-actions github-actions released this 31 Jul 13:54

What's Changed

Platform / QGIS 4

  • QGIS 4 only (minimum version 4.0); QGIS 3 is no longer supported.
  • Plugin internal name is now QGISFMV (formerly QGIS_FMV).
  • Full Qt6 / PyQt6 migration (scoped enums, QVideoSink pipeline, modern imports).
  • KLV / MISB stack moved to pymisb (replaces in-tree klvdata parsers).
  • Player is a proper QDockWidget with an inner QMainWindow so the Draw
    toolbar stays movable / floatable like a normal QGIS toolbar.
  • Code layout cleanup: player/overlays, player/features, player/dialogs,
    utils/install, utils/settings, utils/vision, etc.

FMV Settings & installer

  • New FMV Settings dialog (toolbar gear) for FFmpeg, DEM, layer names,
    Mosaic tuning, AI Detection (YOLO/ONNX), magnifier, drawings,
    platform icon, and dependency status — no hand-editing of settings.ini required.
  • Plugin menu About dialog links to documentation site (all4gis.github.io/QGISFMV).
  • Guided dependency setup: install pymisb / requirements / FFmpeg from Settings
    or first-run prompts (Windows / macOS / Linux).
  • Python deps install into ~/.qgis-fmv-packages (--target, no admin / no write
    to QGIS.app); pip bootstrap via ensurepip or get-pip when needed.
  • On signed macOS QGIS, OpenCV outside the app is often blocked (Team ID) —
    playback and MISB still work; tracking / CV filters use numpy fallbacks.
  • Auto-repair of invalid FFmpeg path in settings.ini.

C2 / Geo-Intelligence

  • Sensor Coverage Cone overlay — FOV cone on the map from KLV (Tools menu).
  • Distance Rings — concentric range rings (500m, 1km, 2km, 5km) around the
    platform, updating in real time (Tools menu).
  • C2 overlays auto-update from KLV during playback and clean up on close/switch.
    Platform path uses the existing Trajectory layer.
  • HUD Overlay on video (Ctrl+H) — telemetry read-out during playback.
  • Mini Map (PiP) on video (Ctrl+Shift+M) — trajectory, footprint, platform, heading.
  • Geofence / altitude Alerts (FMV Tools → Enable Alerts).
  • Export trajectory to KML / GPX (Ctrl+Shift+K / Ctrl+Shift+G).
  • Timeline widget with seekable event markers along the video duration.
  • Multi-video sync helper for coordinated playback sessions.

Multiplexer

  • Built-in MISB STANAG 4609 multiplexer — create .ts files from DJI
    video + telemetry (.csv, .txt, .log) with embedded KLV metadata.
  • No separate klv/ folder needed — KLV is embedded in the output.
  • Supports all standard DJI telemetry formats via pymisb.

On-video tools

  • Military Symbols dialog — place NATO APP-6D inspired SVG symbols
    (Friendly / Hostile / Neutral / Special) on georeferenced video + map layer.
  • Platform icon picker (Options → Platform): military, DJI, UAV, helicopter,
    ship, tank and related presets; updates the map layer immediately.
  • Auto Snapshots (Ctrl+Shift+S) — periodic frame capture.
  • Mosaic controller improvements (feathering / performance controls).
  • Tool placement banners — flashing hint when activating draw/measure tools
    (Point, Line, Polygon, Measure Distance, Measure Area, Military Symbols).

Video filters (15 new)

  • CLAHE (Adaptive Histogram Equalization) — improves local contrast in shadows/fog.
  • Sharpen (Unsharp Mask) — makes buildings, vehicles and roads more visible.
  • Motion Detection (Frame Difference) — highlights moving objects, minimal cost.
  • Sobel Edge Detection — highlights structures, buildings, roads and lines.
  • False Color (Turbo LUT) — makes intensity differences easy to interpret.
  • ExG / VARI (Vegetation Index) — NDVI equivalent for RGB cameras without NIR.
  • Background Subtraction (MOG2) — automatically detects moving objects.
  • Dehaze (CLAHE Enhancement) — improves foggy or low-visibility images.
  • Road & Structure Enhancement — CLAHE + Sobel + Sharpen combined.
  • Hotspot Detection — highlights hot/bright pixels (thermal cameras).
  • Building Detection — smart CV highlight + optional custom YOLO ONNX.
  • Road Segmentation — asphalt/road score + lane hints + optional ONNX.
  • Vehicle Detection — VisDrone YOLO (aerial) with smart CV fallback.
  • Person Detection — VisDrone YOLO (aerial) with smart CV fallback.
  • Fire / Smoke / Flood Detection — smart CV signatures + optional custom ONNX.
  • All filters use OpenCV when available with full RGB/BGR color management;
    pure-numpy fallbacks when OpenCV is not installed.

AI Detection (FMV / UAV)

  • Filters menu lists AI detection filters inline (Building, Road, Vehicle, …).
  • FMV Settings → AI Detection tab: enable DNN, model profile (aerial / COCO /
    custom), ONNX path, confidence, NMS, per-filter class IDs, one-click VisDrone
    download + ONNX export (~6 MB YOLOv8n).
  • VisDrone YOLOv8n default for FMV/UAV (vehicle + person); COCO profile for
    ground-level video; models stored under ~/.qgis-fmv-models/.
  • Hybrid pipeline: YOLO first when enabled; automatic fallback to tuned CV when
    DNN returns no boxes (dnn_fallback_when_empty).
  • [FILTERS] aerial profile in settings.ini — overlay thresholds, detection
    percentiles, CLAHE pre-gain, EMA smoothing, per-class min area (vehicles, persons,
    buildings, roads).
  • PRO detection: multiscale score fusion, IoU NMS on CV boxes, per-box
    confidence labels (#id 78%), lightweight IoU tracking across frames.
  • On-screen banner: engine tag [YOLO]/[CV], detection count and coverage %.
  • Code split: QgsFmvFilterCore (primitives), QgsFmvDetectionFilters (AI/CV),
    QgsFmvFilterTuning (settings), QgsFmvOnnxDetector + QgsFmvModelSetup (models).
  • Tests: test_onnx_detector, test_video_filters (scores + filter core).

Toolbar & UI

  • Draw toolbar is now movable and floatable — drag to any edge or float.
  • Toolbar state (position, visibility) persists across sessions via QSettings.
  • Right-click context menu on video → "ToolBars" submenu to show/hide toolbars.
  • Right-click on menubar also shows "ToolBars" submenu.
  • Metadata dialog: removed minimum size constraints — dialog can be resized freely.

Geo utilities

  • QgsGeoUtils uses PyQGIS QgsDistanceArea for ellipsoidal WGS84 distance,
    bearing, and polygon area (higher accuracy than pure-Python).
  • Pure-Python destination() kept (no QGIS equivalent for great-circle destination).

Performance

  • Fixed creatingMosaic property recursion bug in QgsFmvPlayer (RecursionError).
  • Optimized _latest_layer_feature() to O(1).
  • Removed unnecessary QImage.copy() in convertQImageToMat() (~2-5ms/frame at 1080p).
  • KLV stream index cache (_klv_index_cache) — avoids re-probing the same file.
  • Subprocess timeouts (15-600s) on communicate() across utils / player / plot /
    multimedia — hung FFmpeg/ffprobe no longer blocks QGIS.
  • Simplified hasElevationModel(); cleaned getVideoManagerList() logging.
  • Eliminated per-frame startEditing/commitChanges cycle in layer updates
    (UpdateBeamsData, UpdateTrajectoryData, UpdateFrameAxisData, UpdateFrameCenterData,
    UpdatePlatformData) — now uses provider.direct edits.
  • Platform icon path cached in get_user_platform_icon() — avoids QSettings disk
    I/O on every frame.
  • QgsProject.instance() cached in mouseMoveEvent — avoids singleton lookup on
    every mouse movement.
  • Reverse geocoding QEventLoop now has 8s timeout — prevents UI freeze.
  • Decode thread properly quit/waited on player close — prevents potential segfault.

Code quality

  • Added log.debug() to 14 previously silent except blocks.
  • Wrapped ast.literal_eval in QgsManager.py with try/except fallback.
  • Removed 3 unused imports, 1 redundant QSettings variable.
  • Tightened 5 bare # noqa to # noqa: F401.
  • Added QGIS skip guards to test_military_symbols.py and test_local_meta_reader.py.
  • Fixed test_object_tracker.py path and import issues.
  • Added --import-mode=importlib to pytest.ini for reliable test collection.
  • Improved conftest.py stdlib code module shadowing fix (sysconfig + importlib.util).
  • Removed duplicate settings.ini at code/utils/settings.ini.
  • Simplified gdal/osr imports (removed redundant lazy-loading wrappers).
  • get_int() now double-guarded against non-numeric defaults.

Logging

  • Standard Python logging (replaces custom QgsFmvLog class API).
  • Auto-init on import; rotating log at ~/.qgis-fmv/logs/qgis_fmv.log (10MB x 5).
  • Console handler for WARNING+ (QGIS Log Messages panel).
  • log.debug() in previously silent except blocks (utils + player).

Network

  • reverseGeocodeLabel() uses urllib instead of blocking QEventLoop —
    no UI freeze while waiting for HTTP.

Docs / tooling

  • Renamed plugin screenshots folder to assets/; refreshed README / USAGE /
    CONTRIBUTING / CODING_STANDARDS and GitHub templates.
  • Improved shell / PowerShell install scripts and deploy/plugin_zip.py.
  • build.py: removed shell=True; use shutil.which().
  • GitHub Actions pip caching; Transifex CLI → Go client.
  • requirements-dev.txt cleanup (removed deprecated transifex-client).

New Contributors

Full Changelog: 1.15...v4.0

1.9

1.9

Choose a tag to compare

@All4Gis All4Gis released this 28 Mar 12:33
  • Style changes
  • Download Global DEM (gisandbeers link)
  • Add close button to manager window
  • Fix display if canvas uses otf-projection
  • Insert fmv layer group on top
  • Add news DJI videos (QGIS Mexico, Luis Gallardo)
  • Bump python requirements
  • Fix layer can be null if the Player has been closed.
  • Avoid potential bug if layer already has been closed.
  • Fixed streaming issue, forward stream to local address: 127.0.0.1
  • Update setparser.py #72
  • Fix #70 FFMPEG download failed bug
  • Fix klv when out of range
  • Add RPT experimental protocol
  • Update translations
  • Minor changes

1.8

1.8

Choose a tag to compare

@All4Gis All4Gis released this 10 Oct 11:25
  • Add *.bats and *.sh for compile,deploy code etc, for a better contribution
  • Working on linux (tested using Ubuntu 18.04.3 LTS)
  • Follow cursor video movement on canvas
  • Fix csv enconding
  • Group Video layers/rasters etc
  • Minor changes

1.7

1.7

Choose a tag to compare

@All4Gis All4Gis released this 26 Jul 18:29
  • Linux autoinstaller (starting)
  • Reproduce DJI Videos and extract telemetry in real time
  • Create Klv data from DJI Telemetry
  • MISB 0102.12 quick impelementation
  • Minor changes

1.6

1.6

Choose a tag to compare

@All4Gis All4Gis released this 04 Jun 20:08
  • Update Usage documentation
  • Update Python dependencies (requirements.txt , code and user question if want upgrade dependencies)
  • Object tracking on video and drawn on canvas (RubberBand)
  • Start Option menu for changes default values (Magnifier, Drawings colors ...)
  • Add Confidential Stamp on video
  • Add Military Grid Reference System (MGRS) support for video cursor coordinates
  • Fix magnifier QPainter size/scale
  • Measure Area Tool
  • Better performance for measurements
  • Better performance for drawings
  • Burn drawings in the image (geotiff,png and PDF report)
  • Change design pdf report
  • Fix create report task
  • Fluid drawing in the video
  • Control if the video exists or not in the manager list (disabled if not)
  • Save and restore manager video list
  • Add shortcuts
  • Update translations
  • Add new translations
  • Clean code
  • Minor changes

v1.5

Choose a tag to compare

@All4Gis All4Gis released this 04 Mar 16:56
  • Added EG0104 Parser for legacy Predator Metadataset
  • Auto install dependencies on windows
  • Change FmvConfig file (settings.ini)
  • Fix mosaic algorithm
  • Reimplimented algorithms
  • Add 3D Support (Experimental)
  • Convert Video is cancelable
  • Preserve Metadata when Record video
  • Save current Georeferenced Frame
  • Add new icons
  • Fixed unplayable Non-MISB Video. These video can now be played, there is just no draws in map
  • Fixed Metadata view that was empty when you load it
  • Center Map on Footprint / Target / Sensor
  • Display View Axis on Map
  • Add new sensor styles and platform icons
  • Fix Klv lib parsers in some videos
  • Fix calculate footprint
  • Buffer size crash #44

v1.4

Choose a tag to compare

@All4Gis All4Gis released this 21 Nov 17:21
  • Move all thread to QgsTask
  • New Remove Draw Menu last or all drawings
  • Refactor code for easy contributions
  • Ruler on video
  • Video manager shows now a progress bar while meta buffer loading
  • Video manager has "Start Location" row that show the city where video is filmed (reverse geocoding nominatim, config key: Reverse_geocoding_url)
  • Video manager status row shows "Loading", "Ready", "Playing" as video states
  • There is a "Exts" config key where video format are listed (the first is the default)
  • New icons
  • Minor Changes

v1.3

Choose a tag to compare

@All4Gis All4Gis released this 17 Sep 17:55
  • Fixed meta reader running after closing
  • Draw Point -> added numbers to points
  • Video Footprint (With elevation model)
  • new context menu for show/hide toolbars plugin
  • Add new filter "Horizontal Mirrored"
  • Set the keyboard shortcut for FMV by default and make it properly configurable
  • Remove Utils menu and create Utils Toolbar
  • Migrate Docs to github pages https://all4gis.github.io/QGISFMV/
  • render layers in parallel and use all cores
  • Add area and lat,long centroid coords on polygon attributes table
  • Better and more rich PDF report
  • Save reports in other thread
  • Fix record function
  • optimized code
  • Minor changes

v1.2

Choose a tag to compare

@All4Gis All4Gis released this 10 Aug 19:29
  • Remove FFMPEG unnecessary subfolder
  • Display altitude with OnMouseOver.
  • Drawn points and lines are "drapped" on DTM on map and video.
  • Drawn points and lines have altitude attribute.
  • Draw Lines on video
  • Draw Polygons on video

v1.1

Choose a tag to compare

@All4Gis All4Gis released this 02 Aug 16:23
  • Install requirements automatically.
  • About point to read the docs
  • remove documents folder
  • PR #2, #3, #4 ,#5, #10 and #6 thanks to ltbam.
  • Minor changes