Skip to content

Releases: aharmer/RAPIID

RAPIID v4.2.0

Choose a tag to compare

@aharmer aharmer released this 16 Aug 21:16

Changelog

All notable changes to this project are documented here.

[4.2.0] — 2026-08-17

Added

  • QR code and 1D barcode reading. The barcode camera previously read
    DataMatrix only (libdmtx supports nothing else). Three checkboxes below the
    barcode camera window now select which types to read — DataMatrix,
    QR, and 1D barcode (EAN, UPC, Code 39, Code 128). DataMatrix is
    ticked by default, so existing behaviour is unchanged unless the extra types
    are enabled. A value decoded from any type is entered as the accession
    number. Types are attempted in the order above and only when ticked, so the
    default configuration costs no extra work per frame.

    QR and 1D reading use OpenCV's own detectors, so no new dependencies, DLLs or
    installer content are involved. Both options are disabled automatically if
    the OpenCV build in use does not provide them.

Fixed

  • 1D barcodes held close to the camera failed to decode. OpenCV's barcode
    detector stops working once the individual bars exceed roughly four pixels
    wide, so moving a barcode nearer the lens — the natural response to a failed
    scan — made it worse. Decoding now retries on progressively downscaled
    frames, which thins the bars and recovers those cases. Full size is tried
    first, so a normally-sized barcode still costs a single pass.

[4.1.0] — 2026-08-05

Added

  • Editable camera names. Each camera's name can now be edited in its header.
    Cameras default to "Label camera 1", "2" … as before; renaming one (e.g. to
    "Specimen") marks what it captures. The name flows into the image filename
    (<accession>_specimen.jpg), the EXIF description, and the caption and
    title CSV columns, so a specimen image is distinguishable from a label
    image. Default-named cameras keep the existing _label / _label_N
    filenames, so existing workflows are unchanged. Names are reduced to a
    filename-safe form, and duplicate names have the camera number appended so
    one capture cannot overwrite another. Custom names survive renumbering when
    another camera is removed, and are saved to the config file.

Fixed

  • Re-capturing an accession added duplicate CSV rows. Overwriting the images
    for an existing accession appended a second set of rows to the taxon CSV
    instead of replacing the originals. Rows are now matched on image_filename
    and updated in place, keeping one row per image. The CSV is rewritten through
    a temporary file and an atomic replace, so an interrupted write can no longer
    truncate it.

[4.0.1] — 2026-07-23

Patch release. Fixes a packaging fault that prevented v4.0 from starting on
machines without a conda installation, and makes FLIR camera setup diagnosable.

Added

  • Documented the FLIR Spinnaker SDK prerequisite in the installer section of
    the README. The SDK supplies the FLIR camera driver, which cannot be bundled
    into the installer, so a clean machine detects no FLIR camera even though the
    app is otherwise working. The note explains that the SDK version need not
    match the app — RAPIID ships its own Spinnaker runtime (2.7.0.128) and needs
    the SDK only for the driver — and makes clear it is not needed for
    webcam-only use.
  • Step-by-step Spinnaker SDK installer instructions: which installer to
    download (x64), the Application Development profile, the Visual Studio
    prompt, when to tick "I will use GigE cameras" (not for the USB 3.0
    Blackfly S), and that evaluation programs can be declined. Also notes that
    SpinView can be used to test the camera independently of RAPIID.

Fixed

  • FLIR detection failures were invisible. Diagnostics were written with
    print(), but the app is frozen with base="Win32GUI" and therefore has no
    console, so end users saw cameras silently missing with no explanation. The
    reason a FLIR camera was not found is now reported in the in-app log panel,
    along with a note that the Spinnaker SDK is only required for FLIR cameras.
    The camera-discovery error handler no longer refers users to a console that
    does not exist.

  • Frozen builds failed to start on machines without a conda install, with
    "The code execution cannot proceed because zlib.dll was not found".
    python38.dll links against zlib.dll dynamically in conda builds, but
    cx_Freeze placed zlib.dll under lib/, where the Windows loader does not
    look — it searches the executable's own directory. Development machines
    masked this because the conda environment is on PATH. setup.py now ships
    zlib.dll alongside the executable, and fails the build early if it cannot
    be located in the active environment.

[4.0] — 2026-07-23

Unified release. RAPIID and RAPIIDlite are now a single application under the
name RAPIID.

Changed

  • Renamed the application from RAPIIDlite to RAPIID. The two applications
    had merged into one, and the "lite" qualifier no longer described a real
    distinction. This release is the direct continuation of RAPIIDlite v3.2 —
    no functionality has been removed.
  • Renamed the repository from aharmer/RAPIIDlite to aharmer/RAPIID. The
    previous URL redirects to the new one.
  • Renamed source files, GUI modules, icons, and the workflow document to drop
    the lite qualifier (rapiid_lite.py → rapiid.py,
    rapiidlite_GUI.* → rapiid_GUI.*, RAPIIDlite_icon.* → RAPIID_icon.*).
  • Updated the installer: application name, install directory, Start Menu and
    desktop shortcuts, and output filename now use the RAPIID name. The Inno
    Setup AppId is unchanged, so existing installations upgrade in place
    rather than installing alongside the old version.
  • Updated the Windows AppUserModelID to ManaakiWhenua.RAPIID.4.
  • Images captured with this version are tagged RAPIID in their EXIF Make
    and Software fields, and in the capture_device CSV column. Images
    captured with earlier versions retain their original RAPIIDlite tags.
  • Replaced the pyuic5.exe launcher in the GUI rebuild helper with
    python -m PyQt5.uic.pyuic and relative paths. The .exe launcher embeds
    an absolute interpreter path at install time and breaks if the environment
    is renamed.

Fixed

  • Documented the qt-material version ceiling in environment.yml. Release
    2.14.2 dropped PyQt5 support, and newer versions fail silently: the material
    theme's icons and fonts never load, and the app logs
    "qt_material must be imported after PySide or PyQt!". The pin at 2.12 was
    already correct; the constraint is now stated so it is not upgraded past it.

Upgrading

Existing installations upgrade in place. Desktop and Start Menu shortcuts are
recreated under the new name; you may want to remove stale pinned taskbar
shortcuts, which point at the old executable name.


Earlier releases

Versions 3.2 and earlier were published under the name RAPIIDlite.

RAPIID v4.1.0

Choose a tag to compare

@aharmer aharmer released this 05 Aug 00:52

Changelog

All notable changes to this project are documented here.

[4.1.0] — 2026-08-05

Added

  • Editable camera names. Each camera's name can now be edited in its header.
    Cameras default to "Label camera 1", "2" … as before; renaming one (e.g. to
    "Specimen") marks what it captures. The name flows into the image filename
    (<accession>_specimen.jpg), the EXIF description, and the caption and
    title CSV columns, so a specimen image is distinguishable from a label
    image. Default-named cameras keep the existing _label / _label_N
    filenames, so existing workflows are unchanged. Names are reduced to a
    filename-safe form, and duplicate names have the camera number appended so
    one capture cannot overwrite another. Custom names survive renumbering when
    another camera is removed, and are saved to the config file.

Fixed

  • Re-capturing an accession added duplicate CSV rows. Overwriting the images
    for an existing accession appended a second set of rows to the taxon CSV
    instead of replacing the originals. Rows are now matched on image_filename
    and updated in place, keeping one row per image. The CSV is rewritten through
    a temporary file and an atomic replace, so an interrupted write can no longer
    truncate it.

[4.0.1] — 2026-07-23

Patch release. Fixes a packaging fault that prevented v4.0 from starting on
machines without a conda installation, and makes FLIR camera setup diagnosable.

Added

  • Documented the FLIR Spinnaker SDK prerequisite in the installer section of
    the README. The SDK supplies the FLIR camera driver, which cannot be bundled
    into the installer, so a clean machine detects no FLIR camera even though the
    app is otherwise working. The note explains that the SDK version need not
    match the app — RAPIID ships its own Spinnaker runtime (2.7.0.128) and needs
    the SDK only for the driver — and makes clear it is not needed for
    webcam-only use.
  • Step-by-step Spinnaker SDK installer instructions: which installer to
    download (x64), the Application Development profile, the Visual Studio
    prompt, when to tick "I will use GigE cameras" (not for the USB 3.0
    Blackfly S), and that evaluation programs can be declined. Also notes that
    SpinView can be used to test the camera independently of RAPIID.

Fixed

  • FLIR detection failures were invisible. Diagnostics were written with
    print(), but the app is frozen with base="Win32GUI" and therefore has no
    console, so end users saw cameras silently missing with no explanation. The
    reason a FLIR camera was not found is now reported in the in-app log panel,
    along with a note that the Spinnaker SDK is only required for FLIR cameras.
    The camera-discovery error handler no longer refers users to a console that
    does not exist.

  • Frozen builds failed to start on machines without a conda install, with
    "The code execution cannot proceed because zlib.dll was not found".
    python38.dll links against zlib.dll dynamically in conda builds, but
    cx_Freeze placed zlib.dll under lib/, where the Windows loader does not
    look — it searches the executable's own directory. Development machines
    masked this because the conda environment is on PATH. setup.py now ships
    zlib.dll alongside the executable, and fails the build early if it cannot
    be located in the active environment.

[4.0] — 2026-07-23

Unified release. RAPIID and RAPIIDlite are now a single application under the
name RAPIID.

Changed

  • Renamed the application from RAPIIDlite to RAPIID. The two applications
    had merged into one, and the "lite" qualifier no longer described a real
    distinction. This release is the direct continuation of RAPIIDlite v3.2 —
    no functionality has been removed.
  • Renamed the repository from aharmer/RAPIIDlite to aharmer/RAPIID. The
    previous URL redirects to the new one.
  • Renamed source files, GUI modules, icons, and the workflow document to drop
    the lite qualifier (rapiid_lite.py → rapiid.py,
    rapiidlite_GUI.* → rapiid_GUI.*, RAPIIDlite_icon.* → RAPIID_icon.*).
  • Updated the installer: application name, install directory, Start Menu and
    desktop shortcuts, and output filename now use the RAPIID name. The Inno
    Setup AppId is unchanged, so existing installations upgrade in place
    rather than installing alongside the old version.
  • Updated the Windows AppUserModelID to ManaakiWhenua.RAPIID.4.
  • Images captured with this version are tagged RAPIID in their EXIF Make
    and Software fields, and in the capture_device CSV column. Images
    captured with earlier versions retain their original RAPIIDlite tags.
  • Replaced the pyuic5.exe launcher in the GUI rebuild helper with
    python -m PyQt5.uic.pyuic and relative paths. The .exe launcher embeds
    an absolute interpreter path at install time and breaks if the environment
    is renamed.

Fixed

  • Documented the qt-material version ceiling in environment.yml. Release
    2.14.2 dropped PyQt5 support, and newer versions fail silently: the material
    theme's icons and fonts never load, and the app logs
    "qt_material must be imported after PySide or PyQt!". The pin at 2.12 was
    already correct; the constraint is now stated so it is not upgraded past it.

Upgrading

Existing installations upgrade in place. Desktop and Start Menu shortcuts are
recreated under the new name; you may want to remove stale pinned taskbar
shortcuts, which point at the old executable name.


RAPIID v4.0.1

Choose a tag to compare

@aharmer aharmer released this 23 Jul 05:22

Changelog

All notable changes to this project are documented here.

[4.0.1] — 2026-07-23

Patch release. Fixes a packaging fault that prevented v4.0 from starting on
machines without a conda installation, and makes FLIR camera setup diagnosable.

Added

  • Documented the FLIR Spinnaker SDK prerequisite in the installer section of
    the README. The SDK supplies the FLIR camera driver, which cannot be bundled
    into the installer, so a clean machine detects no FLIR camera even though the
    app is otherwise working. The note explains that the SDK version need not
    match the app — RAPIID ships its own Spinnaker runtime (2.7.0.128) and needs
    the SDK only for the driver — and makes clear it is not needed for
    webcam-only use.
  • Step-by-step Spinnaker SDK installer instructions: which installer to
    download (x64), the Application Development profile, the Visual Studio
    prompt, when to tick "I will use GigE cameras" (not for the USB 3.0
    Blackfly S), and that evaluation programs can be declined. Also notes that
    SpinView can be used to test the camera independently of RAPIID.

Fixed

  • FLIR detection failures were invisible. Diagnostics were written with
    print(), but the app is frozen with base="Win32GUI" and therefore has no
    console, so end users saw cameras silently missing with no explanation. The
    reason a FLIR camera was not found is now reported in the in-app log panel,
    along with a note that the Spinnaker SDK is only required for FLIR cameras.
    The camera-discovery error handler no longer refers users to a console that
    does not exist.

  • Frozen builds failed to start on machines without a conda install, with
    "The code execution cannot proceed because zlib.dll was not found".
    python38.dll links against zlib.dll dynamically in conda builds, but
    cx_Freeze placed zlib.dll under lib/, where the Windows loader does not
    look — it searches the executable's own directory. Development machines
    masked this because the conda environment is on PATH. setup.py now ships
    zlib.dll alongside the executable, and fails the build early if it cannot
    be located in the active environment.

RAPIID v4.0

Choose a tag to compare

@aharmer aharmer released this 22 Jul 21:29

Changelog

All notable changes to this project are documented here.

[4.0] — 2026-07-23

Unified release. RAPIID and RAPIIDlite are now a single application under the
name RAPIID.

Changed

  • Renamed the application from RAPIIDlite to RAPIID. The two applications
    had merged into one, and the "lite" qualifier no longer described a real
    distinction. This release is the direct continuation of RAPIIDlite v3.2 —
    no functionality has been removed.
  • Renamed the repository from aharmer/RAPIIDlite to aharmer/RAPIID. The
    previous URL redirects to the new one.
  • Renamed source files, GUI modules, icons, and the workflow document to drop
    the lite qualifier (rapiid_lite.py → rapiid.py,
    rapiidlite_GUI.* → rapiid_GUI.*, RAPIIDlite_icon.* → RAPIID_icon.*).
  • Updated the installer: application name, install directory, Start Menu and
    desktop shortcuts, and output filename now use the RAPIID name. The Inno
    Setup AppId is unchanged, so existing installations upgrade in place
    rather than installing alongside the old version.
  • Updated the Windows AppUserModelID to ManaakiWhenua.RAPIID.4.
  • Images captured with this version are tagged RAPIID in their EXIF Make
    and Software fields, and in the capture_device CSV column. Images
    captured with earlier versions retain their original RAPIIDlite tags.
  • Replaced the pyuic5.exe launcher in the GUI rebuild helper with
    python -m PyQt5.uic.pyuic and relative paths. The .exe launcher embeds
    an absolute interpreter path at install time and breaks if the environment
    is renamed.

Fixed

  • Documented the qt-material version ceiling in environment.yml. Release
    2.14.2 dropped PyQt5 support, and newer versions fail silently: the material
    theme's icons and fonts never load, and the app logs
    "qt_material must be imported after PySide or PyQt!". The pin at 2.12 was
    already correct; the constraint is now stated so it is not upgraded past it.

Upgrading

Existing installations upgrade in place. Desktop and Start Menu shortcuts are
recreated under the new name; you may want to remove stale pinned taskbar
shortcuts, which point at the old executable name.


Earlier releases

Versions 3.2 and earlier were published under the name RAPIIDlite. Their
history is available from the git tags in this repository:

  • [3.2] — 2026-07-08
  • [3.1] — 2026-06-21
  • [3.0] — 2026-03-23

RAPIIDlite v3.2

Choose a tag to compare

@aharmer aharmer released this 07 Jul 23:50

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).

RAPIIDlite

Choose a tag to compare

@aharmer aharmer released this 23 Mar 00:13

Complete rebuild, now supporting multiple camera view and types.

RAPIIDlite

Choose a tag to compare

@aharmer aharmer released this 27 Mar 00:51

Bug fix:
Prevent selection of camera that is already selected in another slot. This caused live views to freeze and cameras to be restarted.