open-source electrophysiology
rat-track-screenshot.png

Oat

Oat is a set of programs for processing video, extracting object position information, and streaming data to disk and/or the network in real-time.

Description

Oat is a set of programs for processing video, extracting object position information, and streaming data to disk and/or the network in real-time. Oat's design is influenced by the UNIX philosophy, suckless tools, and MEABench. Oat consists of a set of small, composable programs (called components). Components are equipped with standard interfaces that permit communication through shared memory to capture, process, and record video streams. This allows a user to chain operations together in arrangements suitable for particular context or tracking requirement. Because Oat components are just small programs with standard interfaces, existing scripting tools (bash, python, etc) can be used to create complex dataflow networks -- no GUI is required. This architecture enables scripted construction of custom data processing chains. Oat is primarily used for real-time animal position tracking in the context of experimental neuroscience, but can be used in any circumstance that requires real-time object tracking. Oat is also pretty fast.

Oat means:

  • Online animal tracker
  • Offline animal tracker
  • General purpose dataflow scripting language that is currently only useful for video processing

Features

  1. Fast
    • Zero-copy message passing for image streams
    • Minimal time in critical sections: parallel processing and efficient GPU usage
  2. Pretty powerful
    • Straightforward to extend
    • Components can be added to or removed from a processing network while it runs
    • Components can be started in any order
    • Files and physical cameras can all be used as data sources
    • Multiple synchronization strategies supported - push based, pull based, asynchronous
    • Makes use of the best libraries: RapidJSON, OpenCV, Boost IPC, ZeroMQ
  3. Minimal
    • No GUI + Small programs --> Less bugs and easier to maintain and extend
    • Well documented
  4. Designed for Linux