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: