Releases: All4Gis/QGISFMV
Releases · All4Gis/QGISFMV
Release list
v4.0
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
- @CalebSpencerTorch made their first contribution in #127
Full Changelog: 1.15...v4.0
1.9
- 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.7
1.6
- 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
- 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
- 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
- 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