Repository files navigation

Vidat logo

Vidat

An in-browser video annotation tool developed by ANU CVML.

Stable ReleaseLatest ReleaseCD StatusStar

ANU HostANU DemoAliyun HostAliyun DemoYoutube Tutorials

The aim of this project is to develop a high-quality video annotation tool for computer vision and machine learning applications with the following desiderata:

  1. Simple and efficient to use for a non-expert.
  2. Supports multiple annotation types including temporal segments, object bounding boxes, semantic and instance regions, tracklets, and human pose (skeleton).
  3. Runs in a browser without external libraries or need for server-side processing. But easy to plug-in a back-end for heavy "in-the-loop" processing (e.g., segments from bounding boxes or frame completion from partial labels).
  4. Integrates easily with crowd-sourced annotation services (e.g., Amazon Mechanical Turk).
  5. Compatible with all (most) modern browsers and operating systems including tablets.
  6. Secure. Data does not need to leave the local machine (since there is no server-side processing).
  7. Open-source.

Screenshots

Object

Object

Region

Region

Skeleton

Skeleton

Skeleton Type

Skeleton Type

Action

Action

Usage

Annotate local videos

Just open Host and open a local video, you are good to go!

Annotate remote videos

You need to deploy Vidat first, and then use URL parameters to load the video into Vidat. Please note that Vidat does not support online YouTube videos due to Cross-Origin Resource Sharing (CORS).

Integrate with Amazon Mechanical Turk (MTurk)

  1. Prepare tasks
    1. Deploy Vidat on a server which can access to the videos and annotation (config) files.
    2. Generate URLs for each task, e.g. https://example.com?annotation=task1.json&submitURL=http%3A%2F%2Fexample2.com%3Ftoken%3D123456.
  2. Dispatch tasks on MTurk
    1. Create a new MTurk task with survey template, replace the survey link with task link.
    2. Create a batch with generated URLs.
  3. Collect submissions
    1. Build up an independent API backend (see /tools/backend/ for a simple implementation) that handles submissions.

Submission API:

Request

POST <submitURL>
content-type: application/json
<annotation>

Respond

content-type: application/json
{
type: '' // color: "primary" (default) | "secondary" | "accent" | "dark" | "positive" | "negative" | "info" | "warning"
message: '' // notify the user (required)
clipboard: '' // copy to user's clipboard (optional)
}

Deployment

Note that this is only necessary if you want to do development or host your own version of the tool. If you just want to label videos then you can use one of the host servers linked to above (data will remain on your local machine; it will not be sent to the host server).

  1. Download our latest release. Note that the pre-release is automatically generated and should not be used in production.
  2. Unzip all files and put them behind a web server (Nginx, Apache, etc.). Note that open index.html in your explorer does not work.
  3. Open in your favourite browser.

URL Parameters

Click to expand

All the keys and values are not case-sensitive.

Note if you are using an external URL for annotation, video, config or submitURL, please make sure you are following Cross-Origin Resource Sharing (CORS). And they need to be URL encoded if there is any special characters.

annotation

Defaultnull

Example/annotation/exmaple.json, http://exmaple/static/annotation/exmaple.json

Path to the annotation file. Vidat will load the video, annotation and configurations from this file. This parameter has higher priority than video, config, defaultFPS and defaultFPK. Please refer to File Formats - Annotation for format details.

video

Defaultnull

Example/video/exmaple.mp4, http://exmaple/static/video/exmaple.json

Path to the video file. Please refer to decoder for more information.

config

Defaultnull

Example/config/exmaple.json, http://exmaple/static/config/exmaple.json

Path to the video file. Please refer to File Formats - Config for format details.

mode

Defaultnull

Exampleobject | region | skeleton

Specify current mode for Vidat.

zoom

Defaultfalse

Exampletrue | false

Whether toggle zoom on.

sensitivity

DefaulthasTouch ? 10 : 5

ExampleInteger >= 1

When detecting points / edges, the number of pixel(s) between you mouse and the annotation.

defaultFPS

Default10

Example1 <= Integer <= 60

The default frame per second used when extracting frames from the given video.

defaultFPK

Default50

ExampleInteger >= 1

The default frame per keyframe used when generating keyframes.

decoder

Defaultauto

Exampleauto | v1 | v2

The video decoder used for frame extracting.

v1 uses <canvas> as a video decoder, by pause - draw - play - wait for timeupdate strategy. It is the most reliable and compatible methods for most cases. But it is slow and computational inefficient.

v2 uses WebCodecs.VideoDecoder, it takes the advantages of native video decoder built inside the browser. It is way faster than v1 but lack of support from old browsers.

auto Vidat will determine which one to use for you.

See VideoLoader Wiki for details.

showObjects

Defaulttrue

Exampletrue | false

Whether to show object mode related components.

showRegions

Defaulttrue

Exampletrue | false

Whether to show region mode related components.

showSkeletons

Defaulttrue

Exampletrue | false

Whether to show skeleton mode related components.

showActions

Defaulttrue

Exampletrue | false

Whether to show action related components.

muted

Defaulttrue

Exampletrue | false

Whether to mute the video when playing.

grayscale

Defaultfalse

Exampletrue | false

Whether to grayscale the video.

showPopup

Defaulttrue

Exampletrue | false

Whether to show quick popup when finishing annotating an object/region/skeleton.

submitURL

Defaultnull

ExamplesubmitURL=http%3A%2F%2Fexample.com%3Ftoken%3D123456

URL used for submitting annotation.

Examples

http://example.com?showObjects=false&showRegions=false&showSkeletons=false

This will show action only.

http://example.com?mode=skeleton&showPopup=false

This will set the current mode to skeleton and disable popup window.

http://example.com/index.html?submitURL=http%3A%2F%2Fexample.com%3Ftoken%3D123456

There will be a button shown in the side menu which will POST the annotation file to http://example.com?token=123456.

File Formats

Config
{
"objectLabelData": [
{
"id": 0,
"name": "default",
"color": "<color>"
}
],
"actionLabelData": [
{
"id": 0,
"name": "default",
"color": "<color>",
"objects": [0]
}
],
"skeletonTypeData": [
{
"id": 0,
"name": "default",
"description": "",
"color": "<color>",
"pointList": [
{
"id": 0,
"name": "point 1",
"x": -10,
"y": 0
},
{
"id": 0,
"name": "point 2",
"x": 10,
"y": 0
}
],
"edgeList": [
{
"id": 0,
"from": 0,
"to": 1
}
]
}
]
}

See public/config/example.json for am example.

Annotation
{
"version": "2.0.0",
"annotation": {
"video": {
"src": "<path to video>",
"fps": "fps",
"frames": 0,
"duration": 0,
"height": 0,
"width": 0
},
"keyframeList": [0],
"objectAnnotationListMap": {
"0": [
{
"instance": 0,
"score": 0,
"labelId": 0,
"color": "<color>",
"x": 0,
"y": 0,
"width": 0,
"height": 0
}
]
},
"regionAnnotationListMap": {
"0": [
{
"instance": 0,
"score": 0,
"labelId": 0,
"color": "<color>",
"pointList": [
{
"x": 0,
"y": 0
},
{
"x": 0,
"y": 0
},
{
"x": 0,
"y": 0
}
]
}
]
},
"skeletonAnnotationListMap": {
"0": [
{
"instance": 0,
"score": 0,
"centerX": 0,
"centerY": 0,
"typeId": 0,
"color": "<color>",
"_ratio": 1,
"pointList": [
{
"id": -1,
"name": "center",
"x": 0,
"y": 0
},
{
"id": 0,
"name": "point 1",
"x": -10,
"y": 0
},
{
"id": 1,
"name": "point 2",
"x": 10,
"y": 0
}
]
}
]
},
"actionAnnotationList": [
{
"start": 0,
"end": 0,
"action": 0,
"object": 0,
"color": "<color>",
"description": ""
}
]
},
"config": "<config>"
}

See public/annotation/example.json for am example.

Development

See Wiki for details.

Design

See Design Wiki for details.

Citing

If you use Vidat for your research and wish to reference it, please use the following BibTex entry:

@misc{zhang2020vidat,
author = {Jiahao Zhang and Stephen Gould and Itzik Ben-Shabat},
title = {Vidat---{ANU} {CVML} Video Annotation Tool},
howpublished = {\url{https://github.com/anucvml/vidat}},
year = {2020}
}

Star History

Star History Chart

About

Video Annotation Tool

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all \u003cpre\u003e\u003ccode\u003e blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks"); } } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); } })(); (function(){ try { var __m = "github.com"; var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Vidat logo

Vidat

An in-browser video annotation tool developed by ANU CVML.

Stable ReleaseLatest ReleaseCD StatusStar

ANU HostANU DemoAliyun HostAliyun DemoYoutube Tutorials

The aim of this project is to develop a high-quality video annotation tool for computer vision and machine learning applications with the following desiderata:

  1. Simple and efficient to use for a non-expert.
  2. Supports multiple annotation types including temporal segments, object bounding boxes, semantic and instance regions, tracklets, and human pose (skeleton).
  3. Runs in a browser without external libraries or need for server-side processing. But easy to plug-in a back-end for heavy "in-the-loop" processing (e.g., segments from bounding boxes or frame completion from partial labels).
  4. Integrates easily with crowd-sourced annotation services (e.g., Amazon Mechanical Turk).
  5. Compatible with all (most) modern browsers and operating systems including tablets.
  6. Secure. Data does not need to leave the local machine (since there is no server-side processing).
  7. Open-source.

Screenshots

Object

Object

Region

Region

Skeleton

Skeleton

Skeleton Type

Skeleton Type

Action

Action

Usage

Annotate local videos

Just open Host and open a local video, you are good to go!

Annotate remote videos

You need to deploy Vidat first, and then use URL parameters to load the video into Vidat. Please note that Vidat does not support online YouTube videos due to Cross-Origin Resource Sharing (CORS).

Integrate with Amazon Mechanical Turk (MTurk)

  1. Prepare tasks
    1. Deploy Vidat on a server which can access to the videos and annotation (config) files.
    2. Generate URLs for each task, e.g. https://example.com?annotation=task1.json&submitURL=http%3A%2F%2Fexample2.com%3Ftoken%3D123456.
  2. Dispatch tasks on MTurk
    1. Create a new MTurk task with survey template, replace the survey link with task link.
    2. Create a batch with generated URLs.
  3. Collect submissions
    1. Build up an independent API backend (see /tools/backend/ for a simple implementation) that handles submissions.

Submission API:

Request

POST <submitURL>
content-type: application/json
<annotation>

Respond

content-type: application/json
{
type: '' // color: "primary" (default) | "secondary" | "accent" | "dark" | "positive" | "negative" | "info" | "warning"
message: '' // notify the user (required)
clipboard: '' // copy to user's clipboard (optional)
}

Deployment

Note that this is only necessary if you want to do development or host your own version of the tool. If you just want to label videos then you can use one of the host servers linked to above (data will remain on your local machine; it will not be sent to the host server).

  1. Download our latest release. Note that the pre-release is automatically generated and should not be used in production.
  2. Unzip all files and put them behind a web server (Nginx, Apache, etc.). Note that open index.html in your explorer does not work.
  3. Open in your favourite browser.

URL Parameters

Click to expand

All the keys and values are not case-sensitive.

Note if you are using an external URL for annotation, video, config or submitURL, please make sure you are following Cross-Origin Resource Sharing (CORS). And they need to be URL encoded if there is any special characters.

annotation

Defaultnull

Example/annotation/exmaple.json, http://exmaple/static/annotation/exmaple.json

Path to the annotation file. Vidat will load the video, annotation and configurations from this file. This parameter has higher priority than video, config, defaultFPS and defaultFPK. Please refer to File Formats - Annotation for format details.

video

Defaultnull

Example/video/exmaple.mp4, http://exmaple/static/video/exmaple.json

Path to the video file. Please refer to decoder for more information.

config

Defaultnull

Example/config/exmaple.json, http://exmaple/static/config/exmaple.json

Path to the video file. Please refer to File Formats - Config for format details.

mode

Defaultnull

Exampleobject | region | skeleton

Specify current mode for Vidat.

zoom

Defaultfalse

Exampletrue | false

Whether toggle zoom on.

sensitivity

DefaulthasTouch ? 10 : 5

ExampleInteger >= 1

When detecting points / edges, the number of pixel(s) between you mouse and the annotation.

defaultFPS

Default10

Example1 <= Integer <= 60

The default frame per second used when extracting frames from the given video.

defaultFPK

Default50

ExampleInteger >= 1

The default frame per keyframe used when generating keyframes.

decoder

Defaultauto

Exampleauto | v1 | v2

The video decoder used for frame extracting.

v1 uses <canvas> as a video decoder, by pause - draw - play - wait for timeupdate strategy. It is the most reliable and compatible methods for most cases. But it is slow and computational inefficient.

v2 uses WebCodecs.VideoDecoder, it takes the advantages of native video decoder built inside the browser. It is way faster than v1 but lack of support from old browsers.

auto Vidat will determine which one to use for you.

See VideoLoader Wiki for details.

showObjects

Defaulttrue

Exampletrue | false

Whether to show object mode related components.

showRegions

Defaulttrue

Exampletrue | false

Whether to show region mode related components.

showSkeletons

Defaulttrue

Exampletrue | false

Whether to show skeleton mode related components.

showActions

Defaulttrue

Exampletrue | false

Whether to show action related components.

muted

Defaulttrue

Exampletrue | false

Whether to mute the video when playing.

grayscale

Defaultfalse

Exampletrue | false

Whether to grayscale the video.

showPopup

Defaulttrue

Exampletrue | false

Whether to show quick popup when finishing annotating an object/region/skeleton.

submitURL

Defaultnull

ExamplesubmitURL=http%3A%2F%2Fexample.com%3Ftoken%3D123456

URL used for submitting annotation.

Examples

http://example.com?showObjects=false&showRegions=false&showSkeletons=false

This will show action only.

http://example.com?mode=skeleton&showPopup=false

This will set the current mode to skeleton and disable popup window.

http://example.com/index.html?submitURL=http%3A%2F%2Fexample.com%3Ftoken%3D123456

There will be a button shown in the side menu which will POST the annotation file to http://example.com?token=123456.

File Formats

Config
{
"objectLabelData": [
{
"id": 0,
"name": "default",
"color": "<color>"
}
],
"actionLabelData": [
{
"id": 0,
"name": "default",
"color": "<color>",
"objects": [0]
}
],
"skeletonTypeData": [
{
"id": 0,
"name": "default",
"description": "",
"color": "<color>",
"pointList": [
{
"id": 0,
"name": "point 1",
"x": -10,
"y": 0
},
{
"id": 0,
"name": "point 2",
"x": 10,
"y": 0
}
],
"edgeList": [
{
"id": 0,
"from": 0,
"to": 1
}
]
}
]
}

See public/config/example.json for am example.

Annotation
{
"version": "2.0.0",
"annotation": {
"video": {
"src": "<path to video>",
"fps": "fps",
"frames": 0,
"duration": 0,
"height": 0,
"width": 0
},
"keyframeList": [0],
"objectAnnotationListMap": {
"0": [
{
"instance": 0,
"score": 0,
"labelId": 0,
"color": "<color>",
"x": 0,
"y": 0,
"width": 0,
"height": 0
}
]
},
"regionAnnotationListMap": {
"0": [
{
"instance": 0,
"score": 0,
"labelId": 0,
"color": "<color>",
"pointList": [
{
"x": 0,
"y": 0
},
{
"x": 0,
"y": 0
},
{
"x": 0,
"y": 0
}
]
}
]
},
"skeletonAnnotationListMap": {
"0": [
{
"instance": 0,
"score": 0,
"centerX": 0,
"centerY": 0,
"typeId": 0,
"color": "<color>",
"_ratio": 1,
"pointList": [
{
"id": -1,
"name": "center",
"x": 0,
"y": 0
},
{
"id": 0,
"name": "point 1",
"x": -10,
"y": 0
},
{
"id": 1,
"name": "point 2",
"x": 10,
"y": 0
}
]
}
]
},
"actionAnnotationList": [
{
"start": 0,
"end": 0,
"action": 0,
"object": 0,
"color": "<color>",
"description": ""
}
]
},
"config": "<config>"
}

See public/annotation/example.json for am example.

Development

See Wiki for details.

Design

See Design Wiki for details.

Citing

If you use Vidat for your research and wish to reference it, please use the following BibTex entry:

@misc{zhang2020vidat,
author = {Jiahao Zhang and Stephen Gould and Itzik Ben-Shabat},
title = {Vidat---{ANU} {CVML} Video Annotation Tool},
howpublished = {\url{https://github.com/anucvml/vidat}},
year = {2020}
}

Star History

Star History Chart

About

Video Annotation Tool

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Vidat logo

Vidat

An in-browser video annotation tool developed by ANU CVML.

Stable ReleaseLatest ReleaseCD StatusStar

ANU HostANU DemoAliyun HostAliyun DemoYoutube Tutorials

The aim of this project is to develop a high-quality video annotation tool for computer vision and machine learning applications with the following desiderata:

  1. Simple and efficient to use for a non-expert.
  2. Supports multiple annotation types including temporal segments, object bounding boxes, semantic and instance regions, tracklets, and human pose (skeleton).
  3. Runs in a browser without external libraries or need for server-side processing. But easy to plug-in a back-end for heavy "in-the-loop" processing (e.g., segments from bounding boxes or frame completion from partial labels).
  4. Integrates easily with crowd-sourced annotation services (e.g., Amazon Mechanical Turk).
  5. Compatible with all (most) modern browsers and operating systems including tablets.
  6. Secure. Data does not need to leave the local machine (since there is no server-side processing).
  7. Open-source.

Screenshots

Object

Object

Region

Region

Skeleton

Skeleton

Skeleton Type

Skeleton Type

Action

Action

Usage

Annotate local videos

Just open Host and open a local video, you are good to go!

Annotate remote videos

You need to deploy Vidat first, and then use URL parameters to load the video into Vidat. Please note that Vidat does not support online YouTube videos due to Cross-Origin Resource Sharing (CORS).

Integrate with Amazon Mechanical Turk (MTurk)

  1. Prepare tasks
    1. Deploy Vidat on a server which can access to the videos and annotation (config) files.
    2. Generate URLs for each task, e.g. https://example.com?annotation=task1.json&submitURL=http%3A%2F%2Fexample2.com%3Ftoken%3D123456.
  2. Dispatch tasks on MTurk
    1. Create a new MTurk task with survey template, replace the survey link with task link.
    2. Create a batch with generated URLs.
  3. Collect submissions
    1. Build up an independent API backend (see /tools/backend/ for a simple implementation) that handles submissions.

Submission API:

Request

POST <submitURL>
content-type: application/json
<annotation>

Respond

content-type: application/json
{
type: '' // color: "primary" (default) | "secondary" | "accent" | "dark" | "positive" | "negative" | "info" | "warning"
message: '' // notify the user (required)
clipboard: '' // copy to user's clipboard (optional)
}

Deployment

Note that this is only necessary if you want to do development or host your own version of the tool. If you just want to label videos then you can use one of the host servers linked to above (data will remain on your local machine; it will not be sent to the host server).

  1. Download our latest release. Note that the pre-release is automatically generated and should not be used in production.
  2. Unzip all files and put them behind a web server (Nginx, Apache, etc.). Note that open index.html in your explorer does not work.
  3. Open in your favourite browser.

URL Parameters

Click to expand

All the keys and values are not case-sensitive.

Note if you are using an external URL for annotation, video, config or submitURL, please make sure you are following Cross-Origin Resource Sharing (CORS). And they need to be URL encoded if there is any special characters.

annotation

Defaultnull

Example/annotation/exmaple.json, http://exmaple/static/annotation/exmaple.json

Path to the annotation file. Vidat will load the video, annotation and configurations from this file. This parameter has higher priority than video, config, defaultFPS and defaultFPK. Please refer to File Formats - Annotation for format details.

video

Defaultnull

Example/video/exmaple.mp4, http://exmaple/static/video/exmaple.json

Path to the video file. Please refer to decoder for more information.

config

Defaultnull

Example/config/exmaple.json, http://exmaple/static/config/exmaple.json

Path to the video file. Please refer to File Formats - Config for format details.

mode

Defaultnull

Exampleobject | region | skeleton

Specify current mode for Vidat.

zoom

Defaultfalse

Exampletrue | false

Whether toggle zoom on.

sensitivity

DefaulthasTouch ? 10 : 5

ExampleInteger >= 1

When detecting points / edges, the number of pixel(s) between you mouse and the annotation.

defaultFPS

Default10

Example1 <= Integer <= 60

The default frame per second used when extracting frames from the given video.

defaultFPK

Default50

ExampleInteger >= 1

The default frame per keyframe used when generating keyframes.

decoder

Defaultauto

Exampleauto | v1 | v2

The video decoder used for frame extracting.

v1 uses <canvas> as a video decoder, by pause - draw - play - wait for timeupdate strategy. It is the most reliable and compatible methods for most cases. But it is slow and computational inefficient.

v2 uses WebCodecs.VideoDecoder, it takes the advantages of native video decoder built inside the browser. It is way faster than v1 but lack of support from old browsers.

auto Vidat will determine which one to use for you.

See VideoLoader Wiki for details.

showObjects

Defaulttrue

Exampletrue | false

Whether to show object mode related components.

showRegions

Defaulttrue

Exampletrue | false

Whether to show region mode related components.

showSkeletons

Defaulttrue

Exampletrue | false

Whether to show skeleton mode related components.

showActions

Defaulttrue

Exampletrue | false

Whether to show action related components.

muted

Defaulttrue

Exampletrue | false

Whether to mute the video when playing.

grayscale

Defaultfalse

Exampletrue | false

Whether to grayscale the video.

showPopup

Defaulttrue

Exampletrue | false

Whether to show quick popup when finishing annotating an object/region/skeleton.

submitURL

Defaultnull

ExamplesubmitURL=http%3A%2F%2Fexample.com%3Ftoken%3D123456

URL used for submitting annotation.

Examples

http://example.com?showObjects=false&showRegions=false&showSkeletons=false

This will show action only.

http://example.com?mode=skeleton&showPopup=false

This will set the current mode to skeleton and disable popup window.

http://example.com/index.html?submitURL=http%3A%2F%2Fexample.com%3Ftoken%3D123456

There will be a button shown in the side menu which will POST the annotation file to http://example.com?token=123456.

File Formats

Config
{
"objectLabelData": [
{
"id": 0,
"name": "default",
"color": "<color>"
}
],
"actionLabelData": [
{
"id": 0,
"name": "default",
"color": "<color>",
"objects": [0]
}
],
"skeletonTypeData": [
{
"id": 0,
"name": "default",
"description": "",
"color": "<color>",
"pointList": [
{
"id": 0,
"name": "point 1",
"x": -10,
"y": 0
},
{
"id": 0,
"name": "point 2",
"x": 10,
"y": 0
}
],
"edgeList": [
{
"id": 0,
"from": 0,
"to": 1
}
]
}
]
}

See public/config/example.json for am example.

Annotation
{
"version": "2.0.0",
"annotation": {
"video": {
"src": "<path to video>",
"fps": "fps",
"frames": 0,
"duration": 0,
"height": 0,
"width": 0
},
"keyframeList": [0],
"objectAnnotationListMap": {
"0": [
{
"instance": 0,
"score": 0,
"labelId": 0,
"color": "<color>",
"x": 0,
"y": 0,
"width": 0,
"height": 0
}
]
},
"regionAnnotationListMap": {
"0": [
{
"instance": 0,
"score": 0,
"labelId": 0,
"color": "<color>",
"pointList": [
{
"x": 0,
"y": 0
},
{
"x": 0,
"y": 0
},
{
"x": 0,
"y": 0
}
]
}
]
},
"skeletonAnnotationListMap": {
"0": [
{
"instance": 0,
"score": 0,
"centerX": 0,
"centerY": 0,
"typeId": 0,
"color": "<color>",
"_ratio": 1,
"pointList": [
{
"id": -1,
"name": "center",
"x": 0,
"y": 0
},
{
"id": 0,
"name": "point 1",
"x": -10,
"y": 0
},
{
"id": 1,
"name": "point 2",
"x": 10,
"y": 0
}
]
}
]
},
"actionAnnotationList": [
{
"start": 0,
"end": 0,
"action": 0,
"object": 0,
"color": "<color>",
"description": ""
}
]
},
"config": "<config>"
}

See public/annotation/example.json for am example.

Development

See Wiki for details.

Design

See Design Wiki for details.

Citing

If you use Vidat for your research and wish to reference it, please use the following BibTex entry:

@misc{zhang2020vidat,
author = {Jiahao Zhang and Stephen Gould and Itzik Ben-Shabat},
title = {Vidat---{ANU} {CVML} Video Annotation Tool},
howpublished = {\url{https://github.com/anucvml/vidat}},
year = {2020}
}

Star History

Star History Chart

About

Video Annotation Tool

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length \u003e 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Vidat logo

Vidat

An in-browser video annotation tool developed by ANU CVML.

Stable ReleaseLatest ReleaseCD StatusStar

ANU HostANU DemoAliyun HostAliyun DemoYoutube Tutorials

The aim of this project is to develop a high-quality video annotation tool for computer vision and machine learning applications with the following desiderata:

  1. Simple and efficient to use for a non-expert.
  2. Supports multiple annotation types including temporal segments, object bounding boxes, semantic and instance regions, tracklets, and human pose (skeleton).
  3. Runs in a browser without external libraries or need for server-side processing. But easy to plug-in a back-end for heavy "in-the-loop" processing (e.g., segments from bounding boxes or frame completion from partial labels).
  4. Integrates easily with crowd-sourced annotation services (e.g., Amazon Mechanical Turk).
  5. Compatible with all (most) modern browsers and operating systems including tablets.
  6. Secure. Data does not need to leave the local machine (since there is no server-side processing).
  7. Open-source.

Screenshots

Object

Object

Region

Region

Skeleton

Skeleton

Skeleton Type

Skeleton Type

Action

Action

Usage

Annotate local videos

Just open Host and open a local video, you are good to go!

Annotate remote videos

You need to deploy Vidat first, and then use URL parameters to load the video into Vidat. Please note that Vidat does not support online YouTube videos due to Cross-Origin Resource Sharing (CORS).

Integrate with Amazon Mechanical Turk (MTurk)

  1. Prepare tasks
    1. Deploy Vidat on a server which can access to the videos and annotation (config) files.
    2. Generate URLs for each task, e.g. https://example.com?annotation=task1.json&submitURL=http%3A%2F%2Fexample2.com%3Ftoken%3D123456.
  2. Dispatch tasks on MTurk
    1. Create a new MTurk task with survey template, replace the survey link with task link.
    2. Create a batch with generated URLs.
  3. Collect submissions
    1. Build up an independent API backend (see /tools/backend/ for a simple implementation) that handles submissions.

Submission API:

Request

POST <submitURL>
content-type: application/json
<annotation>

Respond

content-type: application/json
{
type: '' // color: "primary" (default) | "secondary" | "accent" | "dark" | "positive" | "negative" | "info" | "warning"
message: '' // notify the user (required)
clipboard: '' // copy to user's clipboard (optional)
}

Deployment

Note that this is only necessary if you want to do development or host your own version of the tool. If you just want to label videos then you can use one of the host servers linked to above (data will remain on your local machine; it will not be sent to the host server).

  1. Download our latest release. Note that the pre-release is automatically generated and should not be used in production.
  2. Unzip all files and put them behind a web server (Nginx, Apache, etc.). Note that open index.html in your explorer does not work.
  3. Open in your favourite browser.

URL Parameters

Click to expand

All the keys and values are not case-sensitive.

Note if you are using an external URL for annotation, video, config or submitURL, please make sure you are following Cross-Origin Resource Sharing (CORS). And they need to be URL encoded if there is any special characters.

annotation

Defaultnull

Example/annotation/exmaple.json, http://exmaple/static/annotation/exmaple.json

Path to the annotation file. Vidat will load the video, annotation and configurations from this file. This parameter has higher priority than video, config, defaultFPS and defaultFPK. Please refer to File Formats - Annotation for format details.

video

Defaultnull

Example/video/exmaple.mp4, http://exmaple/static/video/exmaple.json

Path to the video file. Please refer to decoder for more information.

config

Defaultnull

Example/config/exmaple.json, http://exmaple/static/config/exmaple.json

Path to the video file. Please refer to File Formats - Config for format details.

mode

Defaultnull

Exampleobject | region | skeleton

Specify current mode for Vidat.

zoom

Defaultfalse

Exampletrue | false

Whether toggle zoom on.

sensitivity

DefaulthasTouch ? 10 : 5

ExampleInteger >= 1

When detecting points / edges, the number of pixel(s) between you mouse and the annotation.

defaultFPS

Default10

Example1 <= Integer <= 60

The default frame per second used when extracting frames from the given video.

defaultFPK

Default50

ExampleInteger >= 1

The default frame per keyframe used when generating keyframes.

decoder

Defaultauto

Exampleauto | v1 | v2

The video decoder used for frame extracting.

v1 uses <canvas> as a video decoder, by pause - draw - play - wait for timeupdate strategy. It is the most reliable and compatible methods for most cases. But it is slow and computational inefficient.

v2 uses WebCodecs.VideoDecoder, it takes the advantages of native video decoder built inside the browser. It is way faster than v1 but lack of support from old browsers.

auto Vidat will determine which one to use for you.

See VideoLoader Wiki for details.

showObjects

Defaulttrue

Exampletrue | false

Whether to show object mode related components.

showRegions

Defaulttrue

Exampletrue | false

Whether to show region mode related components.

showSkeletons

Defaulttrue

Exampletrue | false

Whether to show skeleton mode related components.

showActions

Defaulttrue

Exampletrue | false

Whether to show action related components.

muted

Defaulttrue

Exampletrue | false

Whether to mute the video when playing.

grayscale

Defaultfalse

Exampletrue | false

Whether to grayscale the video.

showPopup

Defaulttrue

Exampletrue | false

Whether to show quick popup when finishing annotating an object/region/skeleton.

submitURL

Defaultnull

ExamplesubmitURL=http%3A%2F%2Fexample.com%3Ftoken%3D123456

URL used for submitting annotation.

Examples

http://example.com?showObjects=false&showRegions=false&showSkeletons=false

This will show action only.

http://example.com?mode=skeleton&showPopup=false

This will set the current mode to skeleton and disable popup window.

http://example.com/index.html?submitURL=http%3A%2F%2Fexample.com%3Ftoken%3D123456

There will be a button shown in the side menu which will POST the annotation file to http://example.com?token=123456.

File Formats

Config
{
"objectLabelData": [
{
"id": 0,
"name": "default",
"color": "<color>"
}
],
"actionLabelData": [
{
"id": 0,
"name": "default",
"color": "<color>",
"objects": [0]
}
],
"skeletonTypeData": [
{
"id": 0,
"name": "default",
"description": "",
"color": "<color>",
"pointList": [
{
"id": 0,
"name": "point 1",
"x": -10,
"y": 0
},
{
"id": 0,
"name": "point 2",
"x": 10,
"y": 0
}
],
"edgeList": [
{
"id": 0,
"from": 0,
"to": 1
}
]
}
]
}

See public/config/example.json for am example.

Annotation
{
"version": "2.0.0",
"annotation": {
"video": {
"src": "<path to video>",
"fps": "fps",
"frames": 0,
"duration": 0,
"height": 0,
"width": 0
},
"keyframeList": [0],
"objectAnnotationListMap": {
"0": [
{
"instance": 0,
"score": 0,
"labelId": 0,
"color": "<color>",
"x": 0,
"y": 0,
"width": 0,
"height": 0
}
]
},
"regionAnnotationListMap": {
"0": [
{
"instance": 0,
"score": 0,
"labelId": 0,
"color": "<color>",
"pointList": [
{
"x": 0,
"y": 0
},
{
"x": 0,
"y": 0
},
{
"x": 0,
"y": 0
}
]
}
]
},
"skeletonAnnotationListMap": {
"0": [
{
"instance": 0,
"score": 0,
"centerX": 0,
"centerY": 0,
"typeId": 0,
"color": "<color>",
"_ratio": 1,
"pointList": [
{
"id": -1,
"name": "center",
"x": 0,
"y": 0
},
{
"id": 0,
"name": "point 1",
"x": -10,
"y": 0
},
{
"id": 1,
"name": "point 2",
"x": 10,
"y": 0
}
]
}
]
},
"actionAnnotationList": [
{
"start": 0,
"end": 0,
"action": 0,
"object": 0,
"color": "<color>",
"description": ""
}
]
},
"config": "<config>"
}

See public/annotation/example.json for am example.

Development

See Wiki for details.

Design

See Design Wiki for details.

Citing

If you use Vidat for your research and wish to reference it, please use the following BibTex entry:

@misc{zhang2020vidat,
author = {Jiahao Zhang and Stephen Gould and Itzik Ben-Shabat},
title = {Vidat---{ANU} {CVML} Video Annotation Tool},
howpublished = {\url{https://github.com/anucvml/vidat}},
year = {2020}
}

Star History

Star History Chart

About

Video Annotation Tool

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Vidat logo

Vidat

An in-browser video annotation tool developed by ANU CVML.

Stable ReleaseLatest ReleaseCD StatusStar

ANU HostANU DemoAliyun HostAliyun DemoYoutube Tutorials

The aim of this project is to develop a high-quality video annotation tool for computer vision and machine learning applications with the following desiderata:

  1. Simple and efficient to use for a non-expert.
  2. Supports multiple annotation types including temporal segments, object bounding boxes, semantic and instance regions, tracklets, and human pose (skeleton).
  3. Runs in a browser without external libraries or need for server-side processing. But easy to plug-in a back-end for heavy "in-the-loop" processing (e.g., segments from bounding boxes or frame completion from partial labels).
  4. Integrates easily with crowd-sourced annotation services (e.g., Amazon Mechanical Turk).
  5. Compatible with all (most) modern browsers and operating systems including tablets.
  6. Secure. Data does not need to leave the local machine (since there is no server-side processing).
  7. Open-source.

Screenshots

Object

Object

Region

Region

Skeleton

Skeleton

Skeleton Type

Skeleton Type

Action

Action

Usage

Annotate local videos

Just open Host and open a local video, you are good to go!

Annotate remote videos

You need to deploy Vidat first, and then use URL parameters to load the video into Vidat. Please note that Vidat does not support online YouTube videos due to Cross-Origin Resource Sharing (CORS).

Integrate with Amazon Mechanical Turk (MTurk)

  1. Prepare tasks
    1. Deploy Vidat on a server which can access to the videos and annotation (config) files.
    2. Generate URLs for each task, e.g. https://example.com?annotation=task1.json&submitURL=http%3A%2F%2Fexample2.com%3Ftoken%3D123456.
  2. Dispatch tasks on MTurk
    1. Create a new MTurk task with survey template, replace the survey link with task link.
    2. Create a batch with generated URLs.
  3. Collect submissions
    1. Build up an independent API backend (see /tools/backend/ for a simple implementation) that handles submissions.

Submission API:

Request

POST <submitURL>
content-type: application/json
<annotation>

Respond

content-type: application/json
{
type: '' // color: "primary" (default) | "secondary" | "accent" | "dark" | "positive" | "negative" | "info" | "warning"
message: '' // notify the user (required)
clipboard: '' // copy to user's clipboard (optional)
}

Deployment

Note that this is only necessary if you want to do development or host your own version of the tool. If you just want to label videos then you can use one of the host servers linked to above (data will remain on your local machine; it will not be sent to the host server).

  1. Download our latest release. Note that the pre-release is automatically generated and should not be used in production.
  2. Unzip all files and put them behind a web server (Nginx, Apache, etc.). Note that open index.html in your explorer does not work.
  3. Open in your favourite browser.

URL Parameters

Click to expand

All the keys and values are not case-sensitive.

Note if you are using an external URL for annotation, video, config or submitURL, please make sure you are following Cross-Origin Resource Sharing (CORS). And they need to be URL encoded if there is any special characters.

annotation

Defaultnull

Example/annotation/exmaple.json, http://exmaple/static/annotation/exmaple.json

Path to the annotation file. Vidat will load the video, annotation and configurations from this file. This parameter has higher priority than video, config, defaultFPS and defaultFPK. Please refer to File Formats - Annotation for format details.

video

Defaultnull

Example/video/exmaple.mp4, http://exmaple/static/video/exmaple.json

Path to the video file. Please refer to decoder for more information.

config

Defaultnull

Example/config/exmaple.json, http://exmaple/static/config/exmaple.json

Path to the video file. Please refer to File Formats - Config for format details.

mode

Defaultnull

Exampleobject | region | skeleton

Specify current mode for Vidat.

zoom

Defaultfalse

Exampletrue | false

Whether toggle zoom on.

sensitivity

DefaulthasTouch ? 10 : 5

ExampleInteger >= 1

When detecting points / edges, the number of pixel(s) between you mouse and the annotation.

defaultFPS

Default10

Example1 <= Integer <= 60

The default frame per second used when extracting frames from the given video.

defaultFPK

Default50

ExampleInteger >= 1

The default frame per keyframe used when generating keyframes.

decoder

Defaultauto

Exampleauto | v1 | v2

The video decoder used for frame extracting.

v1 uses <canvas> as a video decoder, by pause - draw - play - wait for timeupdate strategy. It is the most reliable and compatible methods for most cases. But it is slow and computational inefficient.

v2 uses WebCodecs.VideoDecoder, it takes the advantages of native video decoder built inside the browser. It is way faster than v1 but lack of support from old browsers.

auto Vidat will determine which one to use for you.

See VideoLoader Wiki for details.

showObjects

Defaulttrue

Exampletrue | false

Whether to show object mode related components.

showRegions

Defaulttrue

Exampletrue | false

Whether to show region mode related components.

showSkeletons

Defaulttrue

Exampletrue | false

Whether to show skeleton mode related components.

showActions

Defaulttrue

Exampletrue | false

Whether to show action related components.

muted

Defaulttrue

Exampletrue | false

Whether to mute the video when playing.

grayscale

Defaultfalse

Exampletrue | false

Whether to grayscale the video.

showPopup

Defaulttrue

Exampletrue | false

Whether to show quick popup when finishing annotating an object/region/skeleton.

submitURL

Defaultnull

ExamplesubmitURL=http%3A%2F%2Fexample.com%3Ftoken%3D123456

URL used for submitting annotation.

Examples

http://example.com?showObjects=false&showRegions=false&showSkeletons=false

This will show action only.

http://example.com?mode=skeleton&showPopup=false

This will set the current mode to skeleton and disable popup window.

http://example.com/index.html?submitURL=http%3A%2F%2Fexample.com%3Ftoken%3D123456

There will be a button shown in the side menu which will POST the annotation file to http://example.com?token=123456.

File Formats

Config
{
"objectLabelData": [
{
"id": 0,
"name": "default",
"color": "<color>"
}
],
"actionLabelData": [
{
"id": 0,
"name": "default",
"color": "<color>",
"objects": [0]
}
],
"skeletonTypeData": [
{
"id": 0,
"name": "default",
"description": "",
"color": "<color>",
"pointList": [
{
"id": 0,
"name": "point 1",
"x": -10,
"y": 0
},
{
"id": 0,
"name": "point 2",
"x": 10,
"y": 0
}
],
"edgeList": [
{
"id": 0,
"from": 0,
"to": 1
}
]
}
]
}

See public/config/example.json for am example.

Annotation
{
"version": "2.0.0",
"annotation": {
"video": {
"src": "<path to video>",
"fps": "fps",
"frames": 0,
"duration": 0,
"height": 0,
"width": 0
},
"keyframeList": [0],
"objectAnnotationListMap": {
"0": [
{
"instance": 0,
"score": 0,
"labelId": 0,
"color": "<color>",
"x": 0,
"y": 0,
"width": 0,
"height": 0
}
]
},
"regionAnnotationListMap": {
"0": [
{
"instance": 0,
"score": 0,
"labelId": 0,
"color": "<color>",
"pointList": [
{
"x": 0,
"y": 0
},
{
"x": 0,
"y": 0
},
{
"x": 0,
"y": 0
}
]
}
]
},
"skeletonAnnotationListMap": {
"0": [
{
"instance": 0,
"score": 0,
"centerX": 0,
"centerY": 0,
"typeId": 0,
"color": "<color>",
"_ratio": 1,
"pointList": [
{
"id": -1,
"name": "center",
"x": 0,
"y": 0
},
{
"id": 0,
"name": "point 1",
"x": -10,
"y": 0
},
{
"id": 1,
"name": "point 2",
"x": 10,
"y": 0
}
]
}
]
},
"actionAnnotationList": [
{
"start": 0,
"end": 0,
"action": 0,
"object": 0,
"color": "<color>",
"description": ""
}
]
},
"config": "<config>"
}

See public/annotation/example.json for am example.

Development

See Wiki for details.

Design

See Design Wiki for details.

Citing

If you use Vidat for your research and wish to reference it, please use the following BibTex entry:

@misc{zhang2020vidat,
author = {Jiahao Zhang and Stephen Gould and Itzik Ben-Shabat},
title = {Vidat---{ANU} {CVML} Video Annotation Tool},
howpublished = {\url{https://github.com/anucvml/vidat}},
year = {2020}
}

Star History

Star History Chart

About

Video Annotation Tool

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Vidat logo

Vidat

An in-browser video annotation tool developed by ANU CVML.

Stable ReleaseLatest ReleaseCD StatusStar

ANU HostANU DemoAliyun HostAliyun DemoYoutube Tutorials

The aim of this project is to develop a high-quality video annotation tool for computer vision and machine learning applications with the following desiderata:

  1. Simple and efficient to use for a non-expert.
  2. Supports multiple annotation types including temporal segments, object bounding boxes, semantic and instance regions, tracklets, and human pose (skeleton).
  3. Runs in a browser without external libraries or need for server-side processing. But easy to plug-in a back-end for heavy "in-the-loop" processing (e.g., segments from bounding boxes or frame completion from partial labels).
  4. Integrates easily with crowd-sourced annotation services (e.g., Amazon Mechanical Turk).
  5. Compatible with all (most) modern browsers and operating systems including tablets.
  6. Secure. Data does not need to leave the local machine (since there is no server-side processing).
  7. Open-source.

Screenshots

Object

Object

Region

Region

Skeleton

Skeleton

Skeleton Type

Skeleton Type

Action

Action

Usage

Annotate local videos

Just open Host and open a local video, you are good to go!

Annotate remote videos

You need to deploy Vidat first, and then use URL parameters to load the video into Vidat. Please note that Vidat does not support online YouTube videos due to Cross-Origin Resource Sharing (CORS).

Integrate with Amazon Mechanical Turk (MTurk)

  1. Prepare tasks
    1. Deploy Vidat on a server which can access to the videos and annotation (config) files.
    2. Generate URLs for each task, e.g. https://example.com?annotation=task1.json&submitURL=http%3A%2F%2Fexample2.com%3Ftoken%3D123456.
  2. Dispatch tasks on MTurk
    1. Create a new MTurk task with survey template, replace the survey link with task link.
    2. Create a batch with generated URLs.
  3. Collect submissions
    1. Build up an independent API backend (see /tools/backend/ for a simple implementation) that handles submissions.

Submission API:

Request

POST <submitURL>
content-type: application/json
<annotation>

Respond

content-type: application/json
{
type: '' // color: "primary" (default) | "secondary" | "accent" | "dark" | "positive" | "negative" | "info" | "warning"
message: '' // notify the user (required)
clipboard: '' // copy to user's clipboard (optional)
}

Deployment

Note that this is only necessary if you want to do development or host your own version of the tool. If you just want to label videos then you can use one of the host servers linked to above (data will remain on your local machine; it will not be sent to the host server).

  1. Download our latest release. Note that the pre-release is automatically generated and should not be used in production.
  2. Unzip all files and put them behind a web server (Nginx, Apache, etc.). Note that open index.html in your explorer does not work.
  3. Open in your favourite browser.

URL Parameters

Click to expand

All the keys and values are not case-sensitive.

Note if you are using an external URL for annotation, video, config or submitURL, please make sure you are following Cross-Origin Resource Sharing (CORS). And they need to be URL encoded if there is any special characters.

annotation

Defaultnull

Example/annotation/exmaple.json, http://exmaple/static/annotation/exmaple.json

Path to the annotation file. Vidat will load the video, annotation and configurations from this file. This parameter has higher priority than video, config, defaultFPS and defaultFPK. Please refer to File Formats - Annotation for format details.

video

Defaultnull

Example/video/exmaple.mp4, http://exmaple/static/video/exmaple.json

Path to the video file. Please refer to decoder for more information.

config

Defaultnull

Example/config/exmaple.json, http://exmaple/static/config/exmaple.json

Path to the video file. Please refer to File Formats - Config for format details.

mode

Defaultnull

Exampleobject | region | skeleton

Specify current mode for Vidat.

zoom

Defaultfalse

Exampletrue | false

Whether toggle zoom on.

sensitivity

DefaulthasTouch ? 10 : 5

ExampleInteger >= 1

When detecting points / edges, the number of pixel(s) between you mouse and the annotation.

defaultFPS

Default10

Example1 <= Integer <= 60

The default frame per second used when extracting frames from the given video.

defaultFPK

Default50

ExampleInteger >= 1

The default frame per keyframe used when generating keyframes.

decoder

Defaultauto

Exampleauto | v1 | v2

The video decoder used for frame extracting.

v1 uses <canvas> as a video decoder, by pause - draw - play - wait for timeupdate strategy. It is the most reliable and compatible methods for most cases. But it is slow and computational inefficient.

v2 uses WebCodecs.VideoDecoder, it takes the advantages of native video decoder built inside the browser. It is way faster than v1 but lack of support from old browsers.

auto Vidat will determine which one to use for you.

See VideoLoader Wiki for details.

showObjects

Defaulttrue

Exampletrue | false

Whether to show object mode related components.

showRegions

Defaulttrue

Exampletrue | false

Whether to show region mode related components.

showSkeletons

Defaulttrue

Exampletrue | false

Whether to show skeleton mode related components.

showActions

Defaulttrue

Exampletrue | false

Whether to show action related components.

muted

Defaulttrue

Exampletrue | false

Whether to mute the video when playing.

grayscale

Defaultfalse

Exampletrue | false

Whether to grayscale the video.

showPopup

Defaulttrue

Exampletrue | false

Whether to show quick popup when finishing annotating an object/region/skeleton.

submitURL

Defaultnull

ExamplesubmitURL=http%3A%2F%2Fexample.com%3Ftoken%3D123456

URL used for submitting annotation.

Examples

http://example.com?showObjects=false&showRegions=false&showSkeletons=false

This will show action only.

http://example.com?mode=skeleton&showPopup=false

This will set the current mode to skeleton and disable popup window.

http://example.com/index.html?submitURL=http%3A%2F%2Fexample.com%3Ftoken%3D123456

There will be a button shown in the side menu which will POST the annotation file to http://example.com?token=123456.

File Formats

Config
{
"objectLabelData": [
{
"id": 0,
"name": "default",
"color": "<color>"
}
],
"actionLabelData": [
{
"id": 0,
"name": "default",
"color": "<color>",
"objects": [0]
}
],
"skeletonTypeData": [
{
"id": 0,
"name": "default",
"description": "",
"color": "<color>",
"pointList": [
{
"id": 0,
"name": "point 1",
"x": -10,
"y": 0
},
{
"id": 0,
"name": "point 2",
"x": 10,
"y": 0
}
],
"edgeList": [
{
"id": 0,
"from": 0,
"to": 1
}
]
}
]
}

See public/config/example.json for am example.

Annotation
{
"version": "2.0.0",
"annotation": {
"video": {
"src": "<path to video>",
"fps": "fps",
"frames": 0,
"duration": 0,
"height": 0,
"width": 0
},
"keyframeList": [0],
"objectAnnotationListMap": {
"0": [
{
"instance": 0,
"score": 0,
"labelId": 0,
"color": "<color>",
"x": 0,
"y": 0,
"width": 0,
"height": 0
}
]
},
"regionAnnotationListMap": {
"0": [
{
"instance": 0,
"score": 0,
"labelId": 0,
"color": "<color>",
"pointList": [
{
"x": 0,
"y": 0
},
{
"x": 0,
"y": 0
},
{
"x": 0,
"y": 0
}
]
}
]
},
"skeletonAnnotationListMap": {
"0": [
{
"instance": 0,
"score": 0,
"centerX": 0,
"centerY": 0,
"typeId": 0,
"color": "<color>",
"_ratio": 1,
"pointList": [
{
"id": -1,
"name": "center",
"x": 0,
"y": 0
},
{
"id": 0,
"name": "point 1",
"x": -10,
"y": 0
},
{
"id": 1,
"name": "point 2",
"x": 10,
"y": 0
}
]
}
]
},
"actionAnnotationList": [
{
"start": 0,
"end": 0,
"action": 0,
"object": 0,
"color": "<color>",
"description": ""
}
]
},
"config": "<config>"
}

See public/annotation/example.json for am example.

Development

See Wiki for details.

Design

See Design Wiki for details.

Citing

If you use Vidat for your research and wish to reference it, please use the following BibTex entry:

@misc{zhang2020vidat,
author = {Jiahao Zhang and Stephen Gould and Itzik Ben-Shabat},
title = {Vidat---{ANU} {CVML} Video Annotation Tool},
howpublished = {\url{https://github.com/anucvml/vidat}},
year = {2020}
}

Star History

Star History Chart

About

Video Annotation Tool

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Vidat logo

Vidat

An in-browser video annotation tool developed by ANU CVML.

Stable ReleaseLatest ReleaseCD StatusStar

ANU HostANU DemoAliyun HostAliyun DemoYoutube Tutorials

The aim of this project is to develop a high-quality video annotation tool for computer vision and machine learning applications with the following desiderata:

  1. Simple and efficient to use for a non-expert.
  2. Supports multiple annotation types including temporal segments, object bounding boxes, semantic and instance regions, tracklets, and human pose (skeleton).
  3. Runs in a browser without external libraries or need for server-side processing. But easy to plug-in a back-end for heavy "in-the-loop" processing (e.g., segments from bounding boxes or frame completion from partial labels).
  4. Integrates easily with crowd-sourced annotation services (e.g., Amazon Mechanical Turk).
  5. Compatible with all (most) modern browsers and operating systems including tablets.
  6. Secure. Data does not need to leave the local machine (since there is no server-side processing).
  7. Open-source.

Screenshots

Object

Object

Region

Region

Skeleton

Skeleton

Skeleton Type

Skeleton Type

Action

Action

Usage

Annotate local videos

Just open Host and open a local video, you are good to go!

Annotate remote videos

You need to deploy Vidat first, and then use URL parameters to load the video into Vidat. Please note that Vidat does not support online YouTube videos due to Cross-Origin Resource Sharing (CORS).

Integrate with Amazon Mechanical Turk (MTurk)

  1. Prepare tasks
    1. Deploy Vidat on a server which can access to the videos and annotation (config) files.
    2. Generate URLs for each task, e.g. https://example.com?annotation=task1.json&submitURL=http%3A%2F%2Fexample2.com%3Ftoken%3D123456.
  2. Dispatch tasks on MTurk
    1. Create a new MTurk task with survey template, replace the survey link with task link.
    2. Create a batch with generated URLs.
  3. Collect submissions
    1. Build up an independent API backend (see /tools/backend/ for a simple implementation) that handles submissions.

Submission API:

Request

POST <submitURL>
content-type: application/json
<annotation>

Respond

content-type: application/json
{
type: '' // color: "primary" (default) | "secondary" | "accent" | "dark" | "positive" | "negative" | "info" | "warning"
message: '' // notify the user (required)
clipboard: '' // copy to user's clipboard (optional)
}

Deployment

Note that this is only necessary if you want to do development or host your own version of the tool. If you just want to label videos then you can use one of the host servers linked to above (data will remain on your local machine; it will not be sent to the host server).

  1. Download our latest release. Note that the pre-release is automatically generated and should not be used in production.
  2. Unzip all files and put them behind a web server (Nginx, Apache, etc.). Note that open index.html in your explorer does not work.
  3. Open in your favourite browser.

URL Parameters

Click to expand

All the keys and values are not case-sensitive.

Note if you are using an external URL for annotation, video, config or submitURL, please make sure you are following Cross-Origin Resource Sharing (CORS). And they need to be URL encoded if there is any special characters.

annotation

Defaultnull

Example/annotation/exmaple.json, http://exmaple/static/annotation/exmaple.json

Path to the annotation file. Vidat will load the video, annotation and configurations from this file. This parameter has higher priority than video, config, defaultFPS and defaultFPK. Please refer to File Formats - Annotation for format details.

video

Defaultnull

Example/video/exmaple.mp4, http://exmaple/static/video/exmaple.json

Path to the video file. Please refer to decoder for more information.

config

Defaultnull

Example/config/exmaple.json, http://exmaple/static/config/exmaple.json

Path to the video file. Please refer to File Formats - Config for format details.

mode

Defaultnull

Exampleobject | region | skeleton

Specify current mode for Vidat.

zoom

Defaultfalse

Exampletrue | false

Whether toggle zoom on.

sensitivity

DefaulthasTouch ? 10 : 5

ExampleInteger >= 1

When detecting points / edges, the number of pixel(s) between you mouse and the annotation.

defaultFPS

Default10

Example1 <= Integer <= 60

The default frame per second used when extracting frames from the given video.

defaultFPK

Default50

ExampleInteger >= 1

The default frame per keyframe used when generating keyframes.

decoder

Defaultauto

Exampleauto | v1 | v2

The video decoder used for frame extracting.

v1 uses <canvas> as a video decoder, by pause - draw - play - wait for timeupdate strategy. It is the most reliable and compatible methods for most cases. But it is slow and computational inefficient.

v2 uses WebCodecs.VideoDecoder, it takes the advantages of native video decoder built inside the browser. It is way faster than v1 but lack of support from old browsers.

auto Vidat will determine which one to use for you.

See VideoLoader Wiki for details.

showObjects

Defaulttrue

Exampletrue | false

Whether to show object mode related components.

showRegions

Defaulttrue

Exampletrue | false

Whether to show region mode related components.

showSkeletons

Defaulttrue

Exampletrue | false

Whether to show skeleton mode related components.

showActions

Defaulttrue

Exampletrue | false

Whether to show action related components.

muted

Defaulttrue

Exampletrue | false

Whether to mute the video when playing.

grayscale

Defaultfalse

Exampletrue | false

Whether to grayscale the video.

showPopup

Defaulttrue

Exampletrue | false

Whether to show quick popup when finishing annotating an object/region/skeleton.

submitURL

Defaultnull

ExamplesubmitURL=http%3A%2F%2Fexample.com%3Ftoken%3D123456

URL used for submitting annotation.

Examples

http://example.com?showObjects=false&showRegions=false&showSkeletons=false

This will show action only.

http://example.com?mode=skeleton&showPopup=false

This will set the current mode to skeleton and disable popup window.

http://example.com/index.html?submitURL=http%3A%2F%2Fexample.com%3Ftoken%3D123456

There will be a button shown in the side menu which will POST the annotation file to http://example.com?token=123456.

File Formats

Config
{
"objectLabelData": [
{
"id": 0,
"name": "default",
"color": "<color>"
}
],
"actionLabelData": [
{
"id": 0,
"name": "default",
"color": "<color>",
"objects": [0]
}
],
"skeletonTypeData": [
{
"id": 0,
"name": "default",
"description": "",
"color": "<color>",
"pointList": [
{
"id": 0,
"name": "point 1",
"x": -10,
"y": 0
},
{
"id": 0,
"name": "point 2",
"x": 10,
"y": 0
}
],
"edgeList": [
{
"id": 0,
"from": 0,
"to": 1
}
]
}
]
}

See public/config/example.json for am example.

Annotation
{
"version": "2.0.0",
"annotation": {
"video": {
"src": "<path to video>",
"fps": "fps",
"frames": 0,
"duration": 0,
"height": 0,
"width": 0
},
"keyframeList": [0],
"objectAnnotationListMap": {
"0": [
{
"instance": 0,
"score": 0,
"labelId": 0,
"color": "<color>",
"x": 0,
"y": 0,
"width": 0,
"height": 0
}
]
},
"regionAnnotationListMap": {
"0": [
{
"instance": 0,
"score": 0,
"labelId": 0,
"color": "<color>",
"pointList": [
{
"x": 0,
"y": 0
},
{
"x": 0,
"y": 0
},
{
"x": 0,
"y": 0
}
]
}
]
},
"skeletonAnnotationListMap": {
"0": [
{
"instance": 0,
"score": 0,
"centerX": 0,
"centerY": 0,
"typeId": 0,
"color": "<color>",
"_ratio": 1,
"pointList": [
{
"id": -1,
"name": "center",
"x": 0,
"y": 0
},
{
"id": 0,
"name": "point 1",
"x": -10,
"y": 0
},
{
"id": 1,
"name": "point 2",
"x": 10,
"y": 0
}
]
}
]
},
"actionAnnotationList": [
{
"start": 0,
"end": 0,
"action": 0,
"object": 0,
"color": "<color>",
"description": ""
}
]
},
"config": "<config>"
}

See public/annotation/example.json for am example.

Development

See Wiki for details.

Design

See Design Wiki for details.

Citing

If you use Vidat for your research and wish to reference it, please use the following BibTex entry:

@misc{zhang2020vidat,
author = {Jiahao Zhang and Stephen Gould and Itzik Ben-Shabat},
title = {Vidat---{ANU} {CVML} Video Annotation Tool},
howpublished = {\url{https://github.com/anucvml/vidat}},
year = {2020}
}

Star History

Star History Chart

About

Video Annotation Tool

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Vidat logo

Vidat

An in-browser video annotation tool developed by ANU CVML.

Stable ReleaseLatest ReleaseCD StatusStar

ANU HostANU DemoAliyun HostAliyun DemoYoutube Tutorials

The aim of this project is to develop a high-quality video annotation tool for computer vision and machine learning applications with the following desiderata:

  1. Simple and efficient to use for a non-expert.
  2. Supports multiple annotation types including temporal segments, object bounding boxes, semantic and instance regions, tracklets, and human pose (skeleton).
  3. Runs in a browser without external libraries or need for server-side processing. But easy to plug-in a back-end for heavy "in-the-loop" processing (e.g., segments from bounding boxes or frame completion from partial labels).
  4. Integrates easily with crowd-sourced annotation services (e.g., Amazon Mechanical Turk).
  5. Compatible with all (most) modern browsers and operating systems including tablets.
  6. Secure. Data does not need to leave the local machine (since there is no server-side processing).
  7. Open-source.

Screenshots

Object

Object

Region

Region

Skeleton

Skeleton

Skeleton Type

Skeleton Type

Action

Action

Usage

Annotate local videos

Just open Host and open a local video, you are good to go!

Annotate remote videos

You need to deploy Vidat first, and then use URL parameters to load the video into Vidat. Please note that Vidat does not support online YouTube videos due to Cross-Origin Resource Sharing (CORS).

Integrate with Amazon Mechanical Turk (MTurk)

  1. Prepare tasks
    1. Deploy Vidat on a server which can access to the videos and annotation (config) files.
    2. Generate URLs for each task, e.g. https://example.com?annotation=task1.json&submitURL=http%3A%2F%2Fexample2.com%3Ftoken%3D123456.
  2. Dispatch tasks on MTurk
    1. Create a new MTurk task with survey template, replace the survey link with task link.
    2. Create a batch with generated URLs.
  3. Collect submissions
    1. Build up an independent API backend (see /tools/backend/ for a simple implementation) that handles submissions.

Submission API:

Request

POST <submitURL>
content-type: application/json
<annotation>

Respond

content-type: application/json
{
type: '' // color: "primary" (default) | "secondary" | "accent" | "dark" | "positive" | "negative" | "info" | "warning"
message: '' // notify the user (required)
clipboard: '' // copy to user's clipboard (optional)
}

Deployment

Note that this is only necessary if you want to do development or host your own version of the tool. If you just want to label videos then you can use one of the host servers linked to above (data will remain on your local machine; it will not be sent to the host server).

  1. Download our latest release. Note that the pre-release is automatically generated and should not be used in production.
  2. Unzip all files and put them behind a web server (Nginx, Apache, etc.). Note that open index.html in your explorer does not work.
  3. Open in your favourite browser.

URL Parameters

Click to expand

All the keys and values are not case-sensitive.

Note if you are using an external URL for annotation, video, config or submitURL, please make sure you are following Cross-Origin Resource Sharing (CORS). And they need to be URL encoded if there is any special characters.

annotation

Defaultnull

Example/annotation/exmaple.json, http://exmaple/static/annotation/exmaple.json

Path to the annotation file. Vidat will load the video, annotation and configurations from this file. This parameter has higher priority than video, config, defaultFPS and defaultFPK. Please refer to File Formats - Annotation for format details.

video

Defaultnull

Example/video/exmaple.mp4, http://exmaple/static/video/exmaple.json

Path to the video file. Please refer to decoder for more information.

config

Defaultnull

Example/config/exmaple.json, http://exmaple/static/config/exmaple.json

Path to the video file. Please refer to File Formats - Config for format details.

mode

Defaultnull

Exampleobject | region | skeleton

Specify current mode for Vidat.

zoom

Defaultfalse

Exampletrue | false

Whether toggle zoom on.

sensitivity

DefaulthasTouch ? 10 : 5

ExampleInteger >= 1

When detecting points / edges, the number of pixel(s) between you mouse and the annotation.

defaultFPS

Default10

Example1 <= Integer <= 60

The default frame per second used when extracting frames from the given video.

defaultFPK

Default50

ExampleInteger >= 1

The default frame per keyframe used when generating keyframes.

decoder

Defaultauto

Exampleauto | v1 | v2

The video decoder used for frame extracting.

v1 uses <canvas> as a video decoder, by pause - draw - play - wait for timeupdate strategy. It is the most reliable and compatible methods for most cases. But it is slow and computational inefficient.

v2 uses WebCodecs.VideoDecoder, it takes the advantages of native video decoder built inside the browser. It is way faster than v1 but lack of support from old browsers.

auto Vidat will determine which one to use for you.

See VideoLoader Wiki for details.

showObjects

Defaulttrue

Exampletrue | false

Whether to show object mode related components.

showRegions

Defaulttrue

Exampletrue | false

Whether to show region mode related components.

showSkeletons

Defaulttrue

Exampletrue | false

Whether to show skeleton mode related components.

showActions

Defaulttrue

Exampletrue | false

Whether to show action related components.

muted

Defaulttrue

Exampletrue | false

Whether to mute the video when playing.

grayscale

Defaultfalse

Exampletrue | false

Whether to grayscale the video.

showPopup

Defaulttrue

Exampletrue | false

Whether to show quick popup when finishing annotating an object/region/skeleton.

submitURL

Defaultnull

ExamplesubmitURL=http%3A%2F%2Fexample.com%3Ftoken%3D123456

URL used for submitting annotation.

Examples

http://example.com?showObjects=false&showRegions=false&showSkeletons=false

This will show action only.

http://example.com?mode=skeleton&showPopup=false

This will set the current mode to skeleton and disable popup window.

http://example.com/index.html?submitURL=http%3A%2F%2Fexample.com%3Ftoken%3D123456

There will be a button shown in the side menu which will POST the annotation file to http://example.com?token=123456.

File Formats

Config
{
"objectLabelData": [
{
"id": 0,
"name": "default",
"color": "<color>"
}
],
"actionLabelData": [
{
"id": 0,
"name": "default",
"color": "<color>",
"objects": [0]
}
],
"skeletonTypeData": [
{
"id": 0,
"name": "default",
"description": "",
"color": "<color>",
"pointList": [
{
"id": 0,
"name": "point 1",
"x": -10,
"y": 0
},
{
"id": 0,
"name": "point 2",
"x": 10,
"y": 0
}
],
"edgeList": [
{
"id": 0,
"from": 0,
"to": 1
}
]
}
]
}

See public/config/example.json for am example.

Annotation
{
"version": "2.0.0",
"annotation": {
"video": {
"src": "<path to video>",
"fps": "fps",
"frames": 0,
"duration": 0,
"height": 0,
"width": 0
},
"keyframeList": [0],
"objectAnnotationListMap": {
"0": [
{
"instance": 0,
"score": 0,
"labelId": 0,
"color": "<color>",
"x": 0,
"y": 0,
"width": 0,
"height": 0
}
]
},
"regionAnnotationListMap": {
"0": [
{
"instance": 0,
"score": 0,
"labelId": 0,
"color": "<color>",
"pointList": [
{
"x": 0,
"y": 0
},
{
"x": 0,
"y": 0
},
{
"x": 0,
"y": 0
}
]
}
]
},
"skeletonAnnotationListMap": {
"0": [
{
"instance": 0,
"score": 0,
"centerX": 0,
"centerY": 0,
"typeId": 0,
"color": "<color>",
"_ratio": 1,
"pointList": [
{
"id": -1,
"name": "center",
"x": 0,
"y": 0
},
{
"id": 0,
"name": "point 1",
"x": -10,
"y": 0
},
{
"id": 1,
"name": "point 2",
"x": 10,
"y": 0
}
]
}
]
},
"actionAnnotationList": [
{
"start": 0,
"end": 0,
"action": 0,
"object": 0,
"color": "<color>",
"description": ""
}
]
},
"config": "<config>"
}

See public/annotation/example.json for am example.

Development

See Wiki for details.

Design

See Design Wiki for details.

Citing

If you use Vidat for your research and wish to reference it, please use the following BibTex entry:

@misc{zhang2020vidat,
author = {Jiahao Zhang and Stephen Gould and Itzik Ben-Shabat},
title = {Vidat---{ANU} {CVML} Video Annotation Tool},
howpublished = {\url{https://github.com/anucvml/vidat}},
year = {2020}
}

Star History

Star History Chart

About

Video Annotation Tool

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages