diff --git a/app/package.json b/app/package.json
index 5e2a508a97..0ba6ab5427 100644
--- a/app/package.json
+++ b/app/package.json
@@ -1,7 +1,7 @@
{
"name": "@fiftyone/fiftyone",
"productName": "FiftyOne",
- "version": "0.19.1",
+ "version": "0.19.2",
"license": "Apache-2.0",
"private": true,
"main": "index.js",
diff --git a/app/packages/app/package.json b/app/packages/app/package.json
index 9a2c46bfa2..cbb0e94b44 100644
--- a/app/packages/app/package.json
+++ b/app/packages/app/package.json
@@ -1,6 +1,6 @@
{
"name": "@fiftyone/app",
- "version": "0.19.1",
+ "version": "0.19.2",
"license": "Apache-2.0",
"private": true,
"scripts": {
diff --git a/app/packages/desktop/package.json b/app/packages/desktop/package.json
index 9181d8591b..efe6c89c98 100644
--- a/app/packages/desktop/package.json
+++ b/app/packages/desktop/package.json
@@ -1,6 +1,6 @@
{
"name": "FiftyOne",
- "version": "0.19.1",
+ "version": "0.19.2",
"description": "Explore, Analyze, Curate",
"author": "Voxel51, Inc.",
"main": "./dist/main.js",
diff --git a/docs/source/_includes/substitutions.rst b/docs/source/_includes/substitutions.rst
index df5d33073a..a4418ccee9 100644
--- a/docs/source/_includes/substitutions.rst
+++ b/docs/source/_includes/substitutions.rst
@@ -127,3 +127,6 @@
.. |InteractiveScatter| replace:: :class:`InteractiveScatter `
.. |InteractiveHeatmap| replace:: :class:`InteractiveHeatmap `
+
+.. |AnnotationBackend| replace:: :class:`AnnotationBackend `
+.. |AnnotationBackendConfig| replace:: :class:`AnnotationBackendConfig `
diff --git a/docs/source/release-notes.rst b/docs/source/release-notes.rst
index 1502b2d7ee..561226b2ca 100644
--- a/docs/source/release-notes.rst
+++ b/docs/source/release-notes.rst
@@ -3,6 +3,96 @@ FiftyOne Release Notes
.. default-role:: code
+.. _release-notes-v0.14.4:
+
+FiftyOne 0.14.4
+---------------
+*Released February 7, 2022*
+
+News
+
+- With support from the `ActivityNet team `_,
+ FiftyOne is now a recommended tool for downloading, visualizing, and
+ evaluating on the Activitynet dataset! Check out
+ :ref:`this guide ` for more details
+
+App
+
+- Fixed encoding of sample media URLs so image and video filepaths with special
+ characters are supported
+- Fixed an error that would occur when rendering empty |Keypoint| instances
+
+Core
+
+- Added an official
+ `Dockerfile `_
+- Changed the default implementation of
+ :meth:`to_frames() ` to
+ assume that the user has already sampled the frames offline and stored their
+ locations in a `filepath` field of each |Frame| in their video dataset. See
+ :ref:`this section ` for more details
+- Updated :meth:`DatasetView.save() ` to
+ save changes to (only) the samples in the view to the underlying dataset
+- Added a new :meth:`DatasetView.keep() `
+ method that deletes any samples that are not in the view from the underlying
+ dataset
+- Added
+ :meth:`InteractivePlot.save() `
+ and
+ :meth:`ViewPlot.save() ` methods that can
+ be used to save plots as static images
+- Added support for populating query distances on a dataset when using
+ :meth:`sort_by_similarity() `
+ to query by visual similarity
+- Added a
+ :func:`instances_to_polylines() `
+ utility that converts instance segmentations to |Polylines| format
+- Added support for frame labels to all conversion methods in the
+ :mod:`fiftyone.utils.labels` module
+- Updated the implementation of
+ :meth:`Detection.to_polyline() `
+ so that all attributes are included rather than just ETA-supported ones
+- Added support for including empty labels labels via an `include_missing`
+ keyword argument in
+ :func:`add_yolo_labels() `
+- Added a
+ :func:`download_youtube_videos() `
+ utility for efficiently and robustly downloading videos or specific segments
+ from YouTube
+- Added a `skip_failures` flag to
+ :func:`transform_images() ` and
+ :func:`transform_videos() `
+- Added `shuffle` and `seed` parameters to
+ :class:`FiftyOneImageLabelsDatasetImporter `
+ and
+ :class:`FiftyOneVideoLabelsDatasetImporter `
+- Added an `include_all_data` parameter to
+ :class:`YOLOv5DatasetImporter `
+- Resolved a bug that would previously cause an error when writing aggregations
+ on video datasets that involve applying expressions directly to `"frames"`
+
+Annotation
+
+- Added support for :ref:`importing ` and
+ :ref:`exporting ` sample-level tags in CVAT format
+- Fixed a bug that prevented existing label fields such as |Detections| that
+ can contain multiple annotation types (boxes or instances) from being
+ specified in calls to
+ :meth:`annotate() `
+- CVAT login credentials are no longer included in exception messages
+
+Zoo
+
+- Added :ref:`ActivityNet 100 ` to the dataset
+ zoo!
+- Added :ref:`ActivityNet 200 ` to the dataset
+ zoo!
+- Added :ref:`Kinetics 400 ` to the dataset zoo!
+- Added :ref:`Kinetics 600 ` to the dataset zoo!
+- Added :ref:`Kinetics 700 ` to the dataset zoo!
+- Added :ref:`Kinetics 700-2020 ` to the dataset
+ zoo!
+
.. _release-notes-v0.14.3:
FiftyOne 0.14.3
diff --git a/docs/source/user_guide/annotation.rst b/docs/source/user_guide/annotation.rst
index c8335be09a..44fee6b882 100644
--- a/docs/source/user_guide/annotation.rst
+++ b/docs/source/user_guide/annotation.rst
@@ -11,7 +11,8 @@ labels on your :ref:`datasets ` or specific
By default, all annotation is performend via a native
:ref:`CVAT integration ` that uses `cvat.org `_, but
-you can use a :ref:`self-hosted server ` or even use a
+you can use a :ref:`self-hosted CVAT server `, switch to the
+:ref:`Labelbox backend `, or even use a
:ref:`custom annotation backend `.
.. note::
@@ -202,12 +203,12 @@ Configuring your backend
Annotation backends may be configured in a variety of backend-specific ways,
which you can see by inspecting the parameters of a backend's associated
-:class:`AnnotationBackendConfig `
-class.
+|AnnotationBackendConfig| clas.
The relevant classes for the builtin annotation backends are:
- `"cvat"`: :class:`fiftyone.utils.cvat.CVATBackendConfig`
+- `"labelbox"`: :class:`fiftyone.utils.labelbox.LabelboxBackendConfig`
You can configure an annotation backend's parameters for a specific run by
simply passing supported config parameters as keyword arguments each time you call
@@ -700,9 +701,8 @@ default `label`.
Each annotation backend may support different `type` values, as declared by the
:meth:`supported_attr_types() `
-method of its
-:class:`AnnotationBackend ` class.
-For example, CVAT supports the following choices for `type`:
+method of its |AnnotationBackend| class. For example, CVAT supports the
+following choices for `type`:
- `text`: a free-form text box. In this case, `default` is optional and
`values` is unused
@@ -1006,18 +1006,17 @@ methods will use your custom backend.
Annotation backends are defined by writing subclasses of the following
three classes with the appropriate abstract methods implemented:
-- :class:`AnnotationBackend `:
- this class implements the logic required for your annotation backend to
- declare the types of labeling tasks that it supports, as well as the core
+- |AnnotationBackend|: this class implements the logic required for your
+ annotation backend to declare the types of labeling tasks that it supports,
+ as well as the core
:meth:`upload_annotations() `
and
:meth:`download_annotations() `
methods, which handle uploading and downloading data and labels to your
annotation tool
-- :class:`AnnotationBackendConfig `:
- this class defines the available parameters that users can pass as keyword
- arguments to
+- |AnnotationBackendConfig|: this class defines the available parameters that
+ users can pass as keyword arguments to
:meth:`annotate() ` to
customize the behavior of the annotation run
@@ -1043,7 +1042,7 @@ The recommended way to expose a custom backend is to add it to your
"default_backend": "",
"backends": {
"": {
- "config_cls": "your.custom.AnnotationBackendConfigSubclass",
+ "config_cls": "your.custom.AnnotationBackendConfig",
# custom parameters here
...
@@ -1055,8 +1054,7 @@ In the above, `` defines the name of your custom backend, which you
can henceforward pass as the `backend` parameter to
:meth:`annotate() `, and
the `config_cls` parameter specifies the fully-qualified name of the
-:class:`AnnotationBackend `
-subclass for your annotation backend.
+|AnnotationBackendConfig| subclass for your annotation backend.
With the `default_backend` parameter set to your custom backend as shown above,
calling
diff --git a/package/desktop/setup.py b/package/desktop/setup.py
index cc00244187..a1b1b83dd2 100644
--- a/package/desktop/setup.py
+++ b/package/desktop/setup.py
@@ -9,15 +9,14 @@
import glob
import os
import shutil
-from setuptools import setup, find_packages
-from setuptools.command.install import install
+from setuptools import setup
from wheel.bdist_wheel import bdist_wheel
import os
import shutil
-VERSION = "0.19.1"
+VERSION = "0.19.2"
def get_version():
diff --git a/setup.py b/setup.py
index 6573ab7b51..c154a37513 100644
--- a/setup.py
+++ b/setup.py
@@ -12,7 +12,7 @@
from setuptools import setup, find_packages
-VERSION = "0.14.3"
+VERSION = "0.14.4"
def get_version():
@@ -61,9 +61,9 @@ def get_version():
"xmltodict",
"universal-analytics-python3>=1.0.1,<2",
# internal packages
- "fiftyone-brain>=0.7.3,<0.8",
+ "fiftyone-brain>=0.8,<0.9",
"fiftyone-db>=0.3,<0.4",
- "voxel51-eta>=0.6.2,<0.7",
+ "voxel51-eta>=0.6.3,<0.7",
]
@@ -100,7 +100,7 @@ def get_install_requirements(install_requires, choose_install_requires):
return install_requires
-EXTRAS_REQUIREMENTS = {"desktop": ["fiftyone-desktop>=0.19.1,<0.20"]}
+EXTRAS_REQUIREMENTS = {"desktop": ["fiftyone-desktop>=0.19.2,<0.20"]}
with open("README.md", "r") as fh: