Skip to main content

Fully automated tracking of single rows of whiskers in high-speed video.

Project description

Janelia Whisker Tracking

Fully automated tracking of single rows of whiskers in high-speed video.

The original source code repository is https://github.com/nclack/whisk/. The original website for this program is now accessible here. A copy of the instructions and the tutorial are available here.

This package has been modernized with updated build systems, Python packaging standards (PEP 517/518), and improved compatibility.

Installation

From PyPI (Recommended)

This package can be installed from PyPI with:

pip install whisk-janelia

For the latest features with FFmpeg support:

pip install whisk-janelia[ffmpeg]

It is recommended to use a virtual environment:

Using venv:

python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate
pip install whisk-janelia

Using uv (faster):

uv venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate
uv pip install whisk-janelia

From Source

To install from source, clone the repository and run the following commands:

git clone https://github.com/vncntprvst/whisk.git
cd whisk

# Create and activate virtual environment
uv venv  # or: python -m venv venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate

# Install in development mode
uv pip install -e .  # or: pip install -e .

Post-Installation

After installation, the whisk executables will be available as command-line tools:

  • trace - Main whisker tracing executable
  • classify - Whisker classification
  • measure - Whisker measurements
  • whisker_convert - Convert between whisker file formats
  • And more...

The Python package automatically handles binary permissions and PATH setup. You can verify the installation by running:

trace --help

The executables are also accessible through the whisk Python module for programmatic use.

Building from Source

For development or custom builds, you can build from source using modern Python packaging tools.

Prerequisites

  • CMake 3.15+
  • C/C++ compiler (gcc 12+ works, including gcc 14/16; MSVC also supported)
  • FFmpeg development libraries (the binaries are currently built against FFmpeg 8.x)
  • Python 3.8+

The Qt5 GUI and the MATLAB MEX bindings are optional and off by default: the GUI builds only with -DBUILD_GUI=ON (requires Qt5), and the MATLAB targets require a MATLAB installation. The instructions below build the core command-line tools and the whisk / whiskio / traj shared libraries.

Quick Build

# Clone and navigate to the repository
git clone https://github.com/vncntprvst/whisk.git
cd whisk

# Build using modern Python tools
uv build  # or: python -m build

# Install the built wheel
pip install dist/*.whl

Development Build

For development, you can build and install in editable mode:

# Create virtual environment
uv venv  # or: python -m venv venv
source .venv/bin/activate

# Install in development mode
uv pip install -e .  # or: pip install -e .

Manual CMake Build

The package uses a CMake-based build system for the underlying C/C++ libraries:

For Unix-like systems (Linux/macOS):

  1. Install build dependencies:
sudo apt update
sudo apt install cmake pkg-config bison gawk
sudo apt install g++ gdb make ninja-build rsync zip
  1. Install FFmpeg development libraries:
sudo apt install libavdevice-dev libavfilter-dev libavformat-dev libavcodec-dev libswresample-dev libswscale-dev libavutil-dev
  1. Build the project:
mkdir build
cd build
cmake ..
make

For WSL systems, see: Build and debug C++ with WSL 2

FFmpeg Troubleshooting

If CMake cannot find FFmpeg libraries, you may need to:

  1. Set the PKG_CONFIG_PATH: export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
  2. Update library path: export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
  3. Run sudo ldconfig to update the dynamic linker cache

Windows Build Instructions:

Windows builds use MSYS2/MinGW (a native MinGW build is produced — no WSL or container required).

  1. Install MSYS2.
  2. In the MSYS2 terminal, install the toolchain and FFmpeg:
pacman -S --needed base-devel mingw-w64-x86_64-toolchain
pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-cmake mingw-w64-x86_64-ninja mingw-w64-x86_64-ffmpeg
  1. Configure and build the core targets from the MinGW64 environment (skip the MATLAB MEX targets, which require MATLAB; the Qt GUI stays off):
cmake -G Ninja -B build -DCMAKE_BUILD_TYPE=Release
ninja -C build whisk traj whiskio trace measure classify classify_radial reclassify report whisker_convert measurements_convert
  1. Stage the binaries for the Python package: copy the built *.dll / *.exe from build/ into whisk/bin/, along with the FFmpeg and MinGW runtime DLLs they depend on (resolve them with ldd build/whisk.dll etc. and copy the /mingw64/bin/*.dll dependencies). These bundled DLLs must match the FFmpeg major version the binaries were built against (see whisk/whisk_utils.py, FFMPEG_DLL_RELEASE).

Note: under MinGW the public API is exported via __declspec(dllexport) on _WIN32 (see include/compat.h and src/generated/parameters/param.h), so whisk.dll exports the symbols WhiskiWrap binds through ctypes (e.g. Load_Params_File). GCC 14+ legacy-C warnings are demoted in CMakeLists.txt.

File formats

Whiskers

Whiskers can be stored in either a text or binary format. There is a command line utility, whisker_convert, provided to convert between different supported formats. batch.py can be used to speed up the process of converting many files.

The most detailed description of each format can be found in the corresponding whisker_io_*.c files implimenting the readers/writers for each format.

In general, each whisker segment in a file is comprised of a unique id and a number of data points describing the shape as output from the tracing program.

Measurements

The measurements file stores the features of traced curves used for classification, such as follicle position, angle and whisker length. Additionally, after classification, this file records the determined identity of each traced curve.

Graphical interface

See ui/README for instructions on how to use the graphical user interface.

  ui2.py --help

Community

Chat

Issue Tracker

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

whisk_janelia-1.2.2.tar.gz (20.6 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

whisk_janelia-1.2.2-py3-none-any.whl (20.9 MB view details)

Uploaded Python 3

File details

Details for the file whisk_janelia-1.2.2.tar.gz.

File metadata

  • Download URL: whisk_janelia-1.2.2.tar.gz
  • Upload date:
  • Size: 20.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for whisk_janelia-1.2.2.tar.gz
Algorithm Hash digest
SHA256 497a0cda17d7cf8251b723fc8737d3478ca73afe04a8db2e881e21720b1f4917
MD5 1f891225f10a214f324248e50e522c82
BLAKE2b-256 8c6791199c3f96efecbef2d9052e907d7e85dc7dd03996ec9f1f803d18a4e80c

See more details on using hashes here.

File details

Details for the file whisk_janelia-1.2.2-py3-none-any.whl.

File metadata

  • Download URL: whisk_janelia-1.2.2-py3-none-any.whl
  • Upload date:
  • Size: 20.9 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for whisk_janelia-1.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 9608de6cd7ff1b5dfb811019edf3f324f8e6cb9d33eaeb9e0723fa06d7e0d2b3
MD5 8d1ff7528046d2079023c957b42b6859
BLAKE2b-256 9d0a31759526c13454d99f0f27b2b4ddd8420f46aa32b5f1e669559c36809ce9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page