Labeling stats

Overview

Counts the labeling side of a Supervisely process and keeps the numbers on the node card. Connect the Process output of either manager node — a labeling queue and a batch of jobs are read the same way.

The totals only ever grow. Supervisely keeps the current status of an entity, so a rejected image loses that status the moment its author picks it up again, and this node remembers what it saw. Once both inputs are set, the node runs itself every minute.

Prerequisites

RequirementWhat you need
Process handleThe Process output of a Labeling queue manager or a Labeling jobs manager.
Supervisely credentialsAn existing supervisely secret allowed to read jobs in that team.

How it works

1

Reads the jobs of the connected process, whether they belong to a queue or stand on their own.

2

Adds what it sees to the running totals, so an image counts once however many times it passes.

3

Publishes how many people label and how many images they have submitted.

FAQ

Each person there holds a whole batch, not one image, so the card also shows Images in work: how many images the open jobs hold right now. That row is live and does go down. A queue hands out one image at a time, so it is not shown for it.

They answer “how much work has this process done”, not “what is in progress right now”. The stage datasets of the manager node show the live picture.

An image a labeler has submitted at least once, whatever the reviewer decided afterwards.

Into the Supervisely annotation tool, on a live labeling job with work waiting in it. With no live job it opens the list instead.

The manager has to run first. Until it has created its Supervisely queue or dataset, the Process handle has nothing to read and each run fails.

No. One node reads one Process handle. Add a second node for a second step.

Per-person breakdowns and time ranges. It also holds the ids it has seen in its own state, so a process with very many images makes that state large.

Inputs

Process
objectRequired

The Process output of a Labeling queue manager or a Labeling jobs manager. Both forms are read the same way. Key: PROCESS.

Supervisely credentials
secretRequired

Allowed credential types: supervisely. Key: SLY_SECRET.

Outputs

Stats
object

Compact labeling table shown on the node card. Hidden from the flow editor. Key: STATS.

Supervisely URL
string

Opens the Supervisely annotation tool on a live labeling job. Falls back to the list when there is no live job. Key: SLY_URL.

State
object

Internal running totals, kept so the numbers never go backwards. Hidden from the flow editor. Key: STATE.

JSON config

Machine-readable node interface for automation and advanced usage.

{
"name": "Labeling stats",
"description": "Running totals of the labeling side of a Supervisely process: how many people label and how many images they have submitted.",
"category": "Supervisely",
"namespace": "supervisely",
"templateKey": "supervisely/labeling_stats",
"version": "v1",
"inputs": [
{
"key": "PROCESS",
"label": "Process",
"type": "object",
"description": "The Process output of a Labeling queue manager or a Labeling jobs manager. Both forms are read the same way.",
"required": true,
"default": null,
"visibleWhen": null
},
{
"key": "SLY_SECRET",
"label": "Supervisely credentials",
"type": "secret",
"description": "",
"required": true,
"default": null,
"visibleWhen": null,
"options": {
"types": [
"supervisely"
]
}
}
],
"outputs": [
{
"key": "STATS",
"label": "Stats",
"type": "object",
"description": "Compact labeling table shown on the node card.",
"artifact": false,
"badge": false,
"badgeOpens": null,
"hidden": true
},
{
"key": "SLY_URL",
"label": "Supervisely URL",
"type": "string",
"description": "Opens the Supervisely annotation tool on a live labeling job. Falls back to the list when there is no live job.",
"artifact": false,
"badge": false,
"badgeOpens": null,
"hidden": false
},
{
"key": "STATE",
"label": "State",
"type": "object",
"description": "Internal running totals, kept so the numbers never go backwards.",
"artifact": false,
"badge": false,
"badgeOpens": null,
"hidden": true
}
],
"automation": {
"isolated": true,
"requires_configuration": true,
"schedule": "* * * * *",
"discard_history": "on_success"
},
"widgets": {
"widget": {
"id": "table",
"settings": {
"data": {
"type": "variable",
"value": "self.outputs.STATS"
}
}
},
"secondaryWidget": {
"id": "link",
"settings": {
"name": {
"type": "input",
"value": "Open labeling"
},
"link": {
"type": "variable",
"value": "self.outputs.SLY_URL"
}
}
}
}
}