YORU Your Optimal Recognition Utility

YORU Ecosystem

YORU is growing into a family of programs. YORU itself detects animal behaviours. Sister applications such as YORU Tracker build on YORU's detectors for work of their own, and trigger plugins act on what YORU detects while an experiment runs. This page shows how the parts fit together. New parts are added to it as they appear.

Map

You launch each application on its own. Underneath, they share one Python package, yoru. A sister application uses only the names in YORU's external API, and YORU never depends on a sister application, so YORU starts, runs and passes its tests without any of them installed.

Applications

YORU Tracker

Sister application Pre-release v0.1.0

Gives every animal YORU detects a persistent ID, draws its trajectory, and exports per-animal tracks.

python -m yoru_tracker

More to come

Sister application Planned

More sister applications are planned. Each will be built on the same external API, and will appear on this page.

The yoru package · external API One way only: nothing in yoru imports a sister application.
  • Detectors yoru.libs.plugins Load any model YORU can load.
  • Detection rows yoru.libs.detector_base One detection, and the columns of YORU's CSV files.
  • Oriented boxes yoru.libs.obb Corners, conversions, point-in-box.
  • Cameras yoru.libs.camera A camera opened the way Real-time Process opens it.
  • GUI primitives yoru.gui_base · yoru.gui_layout · yoru.libs.gui_error Theme, window session, error pop-ups.
  • Paths and logs yoru.libs.user_paths ~/.yoru/ and the shared log folder.

used by YORU Tracker

Files they hand to each other best.pt <video>.csv *_detect.csv *_tracks.csv *_tracks.json Logs of all of them: ~/.yoru/logs/

From video to result

The columns are the steps of an experiment, and the rows are the systems. When one row writes a file and another row reads it, the file is a hand-off between them. Point at a file name to see where it comes from and where it goes.

1Prepareframes and labels
2Traina detector
3Detectevery frame
4Trackidentities over time
5Useact on it or export it
YORUCore application
Frame Capture
LabellingLabelImg, bundled
Training writes best.pt
EvaluationAP and IoU
Video Analysis writes <video>.csv
Real-time Process writes *_detect.csv
Closed-loop triggersserial, Arduino, NI-DAQ, display
YORU-projectorTrigger plugin
Projected stimulusduring Real-time Process
YORU TrackerSister application
Your YORU modelloaded through YORU's detectors reads best.pt
Video, Realtime and Batch Tracking
Track YORU's recordings afterwards reads <video>.csvreads *_detect.csv
Track export writes *_tracks.csvwrites *_tracks.json
More to comeSister application
More sister applications are planned. Each will be built on the same external API, and will appear on this page.

best.pt stands for any trained model YORU can load (.pt, .pth or .onnx). <video>.csv is the result file of Video Analysis, and *_detect.csv is the file that Real-time Process records.

Three ways to be part of YORU

Each part of the family is one of three kinds. The kind decides where its code lives, how it runs, and how it talks to YORU.

YORU itself

The YORU application and the yoru package that every other part is built on.

Code lives in
The YORU repository
Runs
python -m yoru
Talks to YORU through
—
What belongs here
Detection, training, evaluation, video analysis and real-time closed-loop experiments, and the general building blocks — detectors, oriented boxes, cameras, GUI — that more than one application needs.
Today
YORU

Trigger plugin

A Python file that YORU's Real-time Process loads, to act on what YORU detects while an experiment runs.

Code lives in
YORU's trigger_plugins/ folder (and its own repository, if it is shared)
Runs
Inside YORU's Real-time Process
Talks to YORU through
The trigger plugin interface: trigger() and close()
What belongs here
Switching hardware or a stimulus when a behaviour is detected.
Today
YORU-projector
Write a trigger plugin →

Sister application

A separate program with its own repository, window and command, built on YORU's external API.

Code lives in
Its own repository, cloned next to YORU
Runs
Its own command, for example python -m yoru_tracker
Talks to YORU through
YORU's external API, and nothing else
What belongs here
A workflow of its own: identity, trajectories, state across many frames, or anything optional, expensive or model-heavy.
Today
YORU Tracker
Read YORU's external API →

Rules that hold the family together

One-way dependency

Sister applications depend on YORU. YORU never imports one, and its windows contain nothing that belongs to one.

Share building blocks, not screens

A sister application builds its own windows from YORU's GUI primitives. It does not subclass or copy YORU's screens.

The external API is a promise

Changing one of its names breaks every sister application. Such a change needs a new major version of YORU, or a deprecation period. YORU's tests pin every name.

One place for logs

Each program writes its own log file into YORU's log folder, so a problem report needs only one folder.

Where does a new feature go?

Ask these questions in order. The first yes decides.

  1. Is it about which animal is which: identities, trajectories, or state carried across many frames?

    yes YORU Tracker

  2. Does it act on a detection during an experiment, for example by switching hardware or showing a stimulus?

    yes A trigger plugin

  3. Does YORU need it to detect behaviours or run closed-loop experiments?

    yes YORU

  4. Is it a general building block (a detector, an oriented-box, camera or GUI utility) that more than one application needs?

    yes YORU's external API

  5. Is it optional, expensive or model-heavy, with a workflow of its own?

    yes A sister application

A feature never goes into YORU only because a sister application could use it there. YORU keeps general, stable building blocks. Tracking logic, identity logic and tracking screens stay in YORU Tracker.

Versions that work together

SystemKindLatestNeedsLinks
YORU Core application v1.1.2 (stable)
v2.0.0-beta.4 (beta)
—
YORU-projector Trigger plugin — —
YORU Tracker Sister application v0.1.0 (pre-release) YORU v2.0.0-beta.4 or later, below v3