diff --git a/docs/docs/Release-Notes.md b/docs/docs/Release-Notes.md index 80c855e3c81e..c9ec271017d1 100644 --- a/docs/docs/Release-Notes.md +++ b/docs/docs/Release-Notes.md @@ -1,8 +1,327 @@ **NOTICE:** This software (or technical data) was produced for the U.S. Government under contract, and is subject to the Rights in Data-General Clause 52.227-14, Alt. IV (DEC 2007). Copyright 2023 The MITRE Corporation. All Rights Reserved. +# OpenMPF 8.0.x + +

8.0.0: December 2023

+ +

Documentation

+ +- Created a new [OpenID Connect Guide](OpenID-Connect-Guide/index.html). +- Updated the [Admin Guide](Admin-Guide/index.html) and [User Guide](User-Guide/index.html) to remove + `/workflow-manager` from the Workflow Manager base URL. The Admin Guide includes a section for the new Hawtio web + console. +- Updated the [REST API](REST-API/index.html) to use path parameters for pipelines, tasks, actions, and algorithms + endpoints. +- Updated the [Component Descriptor Reference](Component-Descriptor-Reference/index.html) with `algorithm.trackType`. +- Updated the [C++ Batch Component API](CPP-Batch-Component-API/index.html), [Python Batch Component + API](Python-Batch-Component-API/index.html), and [Java Batch Component API](Java-Batch-Component-API/index.html) to + remove the ability to get the detection type since track type is now specified in `descriptor.json`. +- Created a new [Trigger Guide](Trigger-Guide/index.html). +- Created a new [Roll Up Guide](Roll-Up-Guide/index.html). + +

OpenID-Connect (OIDC) Authentication

+ +- The Workflow Manager can now optionally use an OpenID Connect (OIDC) provider to handle authentication for users of + the web UI and clients of the REST API. The URI for the OIDC provider is specified using the `OIDC_ISSUER_URI` + environment variable. +- When enabled, OIDC is used to authenticate components when they register with the Workflow Manager. +- When `CALLBACK_USE_OIDC` is set to `true`, the Workflow Manager will send a token in job request callbacks. +- When `TIES_DB_USE_OIDC` is set to `true`, the Workflow Manager will send a token when posting to a TiesDb server. +- When OIDC is not enabled, the Workflow Manager uses basic authentication with usernames and passwords, as in previous + versions of OpenMPF. +- Refer to the [OpenID Connect Guide](OpenID-Connect-Guide/index.html) for more information on the various OIDC + environment variables and a Keycloak example. + +

Embedded ActiveMQ Broker and Hawtio

+ +- ActiveMQ is now part of the Workflow Manager Spring Boot web application and is no longer run as a separate Docker + service. This enables ActiveMQ to integrate with Spring Security so it can be protected by the Workflow Manager's OIDC + support. +- The Workflow Manager is the sender or recipient of all ActiveMQ messages, so embedding ActiveMQ in the Workflow + Manager prevents a network hop on all messages. +- The ActiveMQ management page has been replaced by [Hawtio](https://hawt.io/), which is more feature rich and can be + used to monitor the state of the ActiveMQ queues used for communication between the Workflow Manager and the + components. The Hawtio web console can be accessed by selecting "Hawtio" from the "Configuration" dropdown menu in the + top menu bar of the web UI. +- Importantly, the base URL for the Workflow Manager is now http://localhost:8080 instead of + http://localhost:8080/workflow-manager. `/workflow-manager` is no longer part of the path. This change was made to + enable Hawtio integration. + +

REST API Updates

+ +- The following changes have been made to the REST endpoints to address a limitation with Swagger (OpenAPI). These + changes enable the REST endpoints to properly show up in the Swagger page, which is accessed by selecting "REST API" + from the "Configuration" dropdown menu in the top menu bar of the web UI. + +| Old REST Endpoint | New REST Endpoint | +| - | - | +| [GET] /rest/pipelines?name={name} | [GET] /rest/pipelines/{name} | +| [GET] /rest/tasks?name={name} | [GET] /rest/tasks/{name} | +| [GET] /rest/actions?name={name} | [GET] /rest/actions/{name} | +| [GET] /rest/algorithms?name={name} | [GET] /rest/algorithms/{name} | +| [DELETE] /rest/pipelines?name={name} | [DELETE] /rest/pipelines/{name} | +| [DELETE] /rest/tasks?name={name} | [DELETE] /rest/tasks/{name} | +| [DELETE] /rest/actions?name={name} | [DELETE] /rest/actions/{name} | + +- In general, the name is now specified as part of the URL path instead of as a URL parameter. +- `/` and `;` characters are no longer allowed in these names. + +

Packaging and Deployment

+ +- Each component's `descriptor.json` now requires an `algorithm.trackType` field. This is used by the Workflow Manager + to determine the kind of tracks that may be generated by the component (e.g. `FACE`, `TEXT`, `CLASS`, etc.). This is + now used in place of the component API calls that were used to get the detection type. + +

Component API Updates

+ +- The following changes were made since the track type is now part of each component's `descriptor.json`: + - Removed `GetDetectionType()` from the CPP Component API. + - Removed `detection_type` from the Python Component API. + - Removed `getDetectionType()` from the Java Component API. + +

Changes to JSON Output Object

+ +- New JSON output objects use `action` instead of `source` in the track type group. Also, `source` is removed from each track. +- Consider this example of the old JSON output: + +```json +"output": { + "FACE": [ + { + "source": "+#MOG MOTION DETECTION (WITH AUTO-ORIENTATION) PREPROCESSOR ACTION#OCV FACE DETECTION (WITH AUTO-ORIENTATION) ACTION", + "algorithm": "FACECV", + "tracks": [ + { + "id": "4bcba9b95b92a5115b7da1097fcffa962480d0b4424a656772bef12161d775c1", + "startOffsetFrame": 0, + "stopOffsetFrame": 0, + "startOffsetTime": 0, + "stopOffsetTime": 0, + "type": "FACE", + "source": "+#MOG MOTION DETECTION (WITH AUTO-ORIENTATION) PREPROCESSOR ACTION#OCV FACE DETECTION (WITH AUTO-ORIENTATION) ACTION", + "confidence": 8.799637, + ... +``` + +> The corresponding new JSON output is: + +```json +"output": { + "FACE": [ + { + "action": "OCV FACE DETECTION (WITH AUTO-ORIENTATION) ACTION", + "algorithm": "FACECV", + "tracks": [ + { + "id": "4bcba9b95b92a5115b7da1097fcffa962480d0b4424a656772bef12161d775c1", + "startOffsetFrame": 0, + "stopOffsetFrame": 0, + "startOffsetTime": 0, + "stopOffsetTime": 0, + "type": "FACE", + "confidence": 8.799637, + ... +``` + +

Trigger Support

+ +- A `TRIGGER` property can now be added to any action in a pipeline. It will only be used if `FEED_FORWARD_TYPE` is + provided and set to something other than `NONE`. The `TRIGGER` property is used to conditionally control if the + Workflow Manager executes that action. Each feed-forward track that is not executed is passed to the next stage of the + pipeline. This results in skipping untriggered actions. +- The value of `TRIGGER` takes the form `=[;...]`. For example, if the value is + `CLASSIFICATION=car` then the Workflow Manager would only execute the associated action using feed-forward tracks from + the previous stage in the pipeline if those tracks have the `CLASSIFICATION` track property with a value of `car`. + This could be useful to skip a license plate detection action. To enable the action to trigger on more than just `car` + tracks you can provide a list of valid values. For example, `CLASSIFICATION=car;truck;bus`. +- The [Trigger Guide](Trigger-Guide/index.html) goes into more detail and provides an example of a pipeline with + multiple speech-to-text stages. `TRIGGER` is used to select which speech-to-text algorithm is executed based on the + detected language in the media. + +

Roll Up Support

+ +- The Workflow Manager can be configured to replace the values of track and detection properties + after receiving tracks and detections from a component. For example, the `CLASSIFICATION` property + may be set to "car", "bus", and "truck". Those can be rolled up into "vehicle". +- To use this feature, set the `ROLL_UP_FILE` property to the path of a JSON file that matches + the format of this example: +```json +[ + { + "propertyToProcess": "CLASSIFICATION", + "originalPropertyCopy": "ORIGINAL CLASSIFICATION", + "groups": [ + { + "rollUp": "vehicle", + "members": [ + "truck", + "car", + "bus" + ] + } + ] + } +] +``` +- Refer to the [Roll Up Guide](Roll-Up-Guide/index.html) for an explanation and more details. + +

Changed All "whitelist" References to "allow list"

+ +- In an effort to be more culturally sensitive, all references to "whitelist" have been removed or renamed to "allow + list". +- The `whitelist.` prefix has been removed from the entries in the `mediaType.properties` file. For example, + `whitelist.image/gif=VIDEO` is now `image/gif=VIDEO`. +- The OcvDnnDetection component `FEED_FORWARD_WHITELIST_FILE` property has been renamed to + `FEED_FORWARD_ALLOW_LIST_FILE`. +- The OcvYoloDetection component `CLASS_WHITELIST_FILE` property has been renamed to `CLASS_ALLOW_LIST_FILE`. + +

Argos Translation Component

+ +- This new component utilizes [Argos Translate](https://github.com/argosopentech/argos-translate) to translate input + text from a given source language to English. It can be used in a feed-forward pipeline to process tracks with + language and/or script identifiers from an upstream stage. +- Refer to the [README](https://github.com/openmpf/openmpf-components/tree/master/python/ArgosTranslation#readme) for + details. + +

Whisper Speech-to-Text and Translation Component

+ +- This new component utilizes [OpenAI Whisper](https://github.com/openai/whisper) to perform language detection, + speech-to-text transcription, or speech translation. +- If multiple languages are spoken in a single piece of media, language detection will detect only one of them. +- Note that Whisper is not designed to return a transcription in the source language when performing translation, so we + implemented the component to perform an additional transcribe call when configured to perform translation. +- Refer to the [README](https://github.com/openmpf/openmpf-components/tree/master/python/WhisperSpeechDetection#readme) + for details. + +

Contrastive Language–Image Pre-training (CLIP) Component

+ +- This new component utilizes [CLIP](https://github.com/openai/CLIP) to classify images using the 80 COCO classes, 1000 + ImageNet classes, or a list of user-provided classes. It can run on a CPU or GPU, and can make calls to an NVIDIA + Triton inference server. +- Classification is performed by taking the class names and filling in one or more text prompts. For example, "a photo + of {}", where "{}" can be "dog" or "cat". An embedding is generated using the text prompt(s) for each class and + compared against the image embedding to get a match score. Optionally, users can provide a list of their own text + prompts. +- OpenAI trained the CLIP model using a wide variety of images and their respective captions from the Internet. This may + make it suitable for a wide variety of classification tasks without further training (known as zero-shot + classification). For example, a user could make up a list of classes for arbitrary objects like "walrus", "paperclip", + "pizza", etc., and use the default text prompts. +- It is also possible to use CLIP to classify concepts like scenes and sentiment. For example, using a text prompt of "a + {} scene" where the classes are "safe", "violent", and "dangerous". +- Optionally, the CLIP component can return the image embedding as the track `FEATURE`. For example, this can be used + for search and retrieval tasks by comparing it to other embeddings enrolled in a database. +- Refer to the [README](https://github.com/openmpf/openmpf-components/tree/master/python/ClipDetection#readme) for + details. + +

Features

+ +- [[#1547](https://github.com/openmpf/openmpf/issues/1547)] Create Argos translation component +- [[#1574](https://github.com/openmpf/openmpf/issues/1574)] Update the WFM to support an optional `TRIGGER` property on any action +- [[#1598](https://github.com/openmpf/openmpf/issues/1598)] Create a Whisper component for speech-to-text and and translation +- [[#1644](https://github.com/openmpf/openmpf/issues/1644)] Create CLIP component for processing images +- [[#1704](https://github.com/openmpf/openmpf/issues/1704)] Update Workflow Manager to authenticate users and REST clients using OIDC +- [[#1730](https://github.com/openmpf/openmpf/issues/1730)] Update Workflow Manager to optionally use OIDC when sending callbacks and posting to TiesDb +- [[#1733](https://github.com/openmpf/openmpf/issues/1733)] Update Workflow Manager to use an embedded ActiveMQ broker +- [[#1793](https://github.com/openmpf/openmpf/issues/1739)] Add Roll Up support to Workflow Manager + +

Updates

+ +- [[#799](https://github.com/openmpf/openmpf/issues/799)] Avoid unnecessary serialization between Camel routes +- [[#949](https://github.com/openmpf/openmpf/issues/949)] Change `/pipelines?name=MYPIPELINE` REST endpoint to `/pipelines/MYPIPELINE` +- [[#1643](https://github.com/openmpf/openmpf/issues/1643)] Remove `LONG_SPEAKER_ID` and instead only use `SPEAKER_ID` +- [[#1645](https://github.com/openmpf/openmpf/issues/1645)] Refactor camel code +- [[#1705](https://github.com/openmpf/openmpf/issues/1705)] Change all references to "whitelist" to "allow list" and "blacklist" to "block list" +- [[#1759](https://github.com/openmpf/openmpf/issues/1759)] Disable markup animation by default + +

Bug Fixes

+ +- [[#1642](https://github.com/openmpf/openmpf/issues/1642)] `InProgressBatchJobsService.setProcessedAction` is now called when a previous task produces no tracks +- [[#1755](https://github.com/openmpf/openmpf/issues/1755)] The Workflow Manager logs page does not properly handle multi-byte characters + # OpenMPF 7.2.x +

7.2.6: January 2024

+ +

Documentation

+ +- Created a new [Health Check Guide](Health-Check-Guide/index.html). + +

Health Check Support

+ +- The C++ and Python component executors can be configured to run health checks on components prior to running jobs. + Health checks are configured using environment variables: + - `HEALTH_CHECK`: When set to "ENABLED", the component executor will run health checks. + - `HEALTH_CHECK_TIMEOUT`: When set to a positive integer, specifies the minimum number of seconds between health + checks. When absent or set to 0, a health check will run before every job. + - `HEALTH_CHECK_RETRY_MAX_ATTEMPTS`: When set to a positive integer, specifies the number of consecutive health + check failures that will cause the component service to exit. When absent or set to 0, the component service will + never exit because of a failed health check. +- Also, an INI file must be provided at `$MPF_HOME/plugins//health/health-check.ini`. For example: +```ini +media=$MPF_HOME/plugins/OcvFaceDetection/health/meds_faces_image.png +min_num_tracks=2 +media_type=IMAGE + +[job_properties] +JOB PROP1=VALUE1 +JOB PROP2=VALUE2 + +[media_properties] +MEDIA PROP=MEDIA VALUE +``` +- Refer to the [Health Check Guide](Health-Check-Guide/index.html) for an explanation and more details. + +

Features

+ +- [[#1731](https://github.com/openmpf/openmpf/issues/1731)] Implement health checks for C++ and Python components + +

Updates

+ +- [[#1727](https://github.com/openmpf/openmpf/issues/1727)] Update ffmpeg to 6.1 + +

7.2.5: November 2023

+ +

Updates

+ +- [[#1715](https://github.com/openmpf/openmpf/issues/1715)] Upgrade ActiveMQ to 5.17.6 + +

Bug Fixes

+ +- [[#1711](https://github.com/openmpf/openmpf/issues/1711)] When selecting detections with the highest confidence, + Workflow Manager should consistently handle detections with equal confidence + +

7.2.4: September 2023

+ +

Bug Fixes

+ +- [[#1707](https://github.com/openmpf/openmpf/issues/1707)] Fix bug where TiesDB check status reports + `NO_TIES_DB_URL_IN_JOB` instead of `MEDIA_MIME_TYPES_ABSENT` + +

7.2.3: June 2023

+ +

Bug Fixes

+ +- [[#1697](https://github.com/openmpf/openmpf/issues/1697)] Prevent OcvYoloDetection component from deadlocking on + strange frame sizes when using Triton + +

7.2.2: June 2023

+ +

Updates

+ +- [[#1693](https://github.com/openmpf/openmpf/issues/1693)] Add property to enable/disable SAS in AzureSpeech + +

Bug Fixes

+ +- [[#1695](https://github.com/openmpf/openmpf/issues/1695)] Fix memory leak in KeywordTagging component + +

7.2.1: June 2023

+ +

Bug Fixes

+ +- [[#1678](https://github.com/openmpf/openmpf/issues/1678)] Fix bug where ffmpeg hangs when processing some kinds of + unsupported/corrupted media +

7.2.0: May 2023

Documentation

diff --git a/docs/docs/html/REST-API.html b/docs/docs/html/REST-API.html index 8f83df34b553..9a3985d145f1 100644 --- a/docs/docs/html/REST-API.html +++ b/docs/docs/html/REST-API.html @@ -170,7 +170,7 @@

OpenMPF Workflow Manager REST API

-

Version 7.2

+

Version 8.0


NOTICE

diff --git a/docs/site/Release-Notes/index.html b/docs/site/Release-Notes/index.html index 5f5d53034903..b1ff781d54c5 100644 --- a/docs/site/Release-Notes/index.html +++ b/docs/site/Release-Notes/index.html @@ -61,6 +61,9 @@ Release Notes