Skip to content

RAPIIDlite v3.2

Choose a tag to compare

@aharmer aharmer released this 07 Jul 23:50
· 19 commits to main since this release

RAPIIDlite — Changes & Bug Fixes

UI Layout

  • Controls above camera view — Start/stop button, camera dropdown, and exposure/gain/gamma controls were moved from below the live view to above it, for both label cameras and the barcode camera, so they're visible without scrolling.
  • Removed redundant labels — the "Label camera" / "Barcode camera" captions above each Start live view button were removed since the section header already states this.
  • Redundant "Select camera" labels removed, then re-added as invisible space-holders (QLabel(" ")) so the Start button and dropdown stay vertically aligned with the FLIR exposure/gain/gamma controls, which retain real labels.

New Features

  • Institution field — new text field added below "Creator" in the right panel. Feeds into EXIF Copyright tag and the CSV rights_owner column (falls back to "Manaaki Whenua Landcare Research" if left blank), and is saved/loaded via the YAML config file.
  • Camera conflict prevention — selecting the same physical camera in two different slots (or between a label slot and the barcode camera) could freeze the live feed, and for FLIR devices required deselecting/reselecting to recover. Fixed by:
    • Adding a "— Select camera —" placeholder option to every camera dropdown.
    • Greying out (italic, muted colour) any camera already claimed elsewhere.
    • Actively reverting the dropdown selection if a user manages to pick an already-claimed camera (since Qt item-flag disabling isn't reliably honoured under the qt_material theme).
    • Availability is re-synced after every camera selection change, slot add/remove, and live-view start/stop, across both label slots and the barcode camera.

Bug Fixes

  • Crash after "Discovering cameras" — root cause was infinite recursion in AspectRatioLabel.resizeEvent (setFixedHeight re-triggering resizeEvent), causing a silent C-stack overflow with no Python traceback. Fixed with a recursion guard flag.
  • QLayout double-layout crash — replacing the label camera grid layout via QWidget().setLayout(old) caused PyQt5 to destroy the layout while the widget still referenced it. Fixed by replacing the entire scroll area widget (QScrollArea.setWidget(...)) with a fresh container that owns the grid from creation.

Build & Deployment

  • cx_Freeze missing native DLL — pylibdmtx's bundled libdmtx-64.dll wasn't picked up automatically (it's loaded via ctypes, not a normal import) causing FileNotFoundError on end-user machines. setup.py now explicitly discovers and includes all .dll files from the pylibdmtx package directory.
  • Switched installer tooling from cx_Freeze's bdist_msi to Inno Setup, giving a proper install wizard with:
    • A dialog letting the user choose per-user vs. all-users installation (PrivilegesRequiredOverridesAllowed=dialog).
    • Correct 64-bit Program Files targeting ({autopf64}, ArchitecturesInstallIn64BitMode=x64) — the default {autopf} had been resolving to Program Files (x86).
    • Automatic uninstall of the previous version on upgrade, via a stable AppId GUID.
    • Desktop and Start Menu shortcuts, with the app icon properly embedded.

Documentation

  • Added a full README.md covering features, installation (MSI/installer-first, with source build instructions for developers), requirements, workflow, output file formats, FLIR camera settings, config file format, architecture notes, known limitations, and acknowledgements.
  • Updated README with an "Installation" section distinguishing the pre-built Windows installer (recommended) from building from source (for development).