Sign inSign up

openmpf/openmpf_workflow_manager

By openmpf

Updated 7 months ago

The OpenMPF Workflow Manager

Image
Machine learning & AI
4

9.1K

openmpf/openmpf_workflow_manager repository overview

OpenMPF Workflow Manager

More information about OpenMPF in general can be found at https://openmpf.github.io/. More information about using OpenMPF with Docker can be found at https://github.com/openmpf/openmpf-docker/blob/master/README.md.

Quick Start

Note that some components, such as EAST Text Detection, and OpenCV YOLO Detection with the full YOLO (non-tiny) model, require more memory than what a default Docker installation provides. Refer to the Install and Configure Docker section of the openmpf-docker README for more information on these settings. Exit codes -9 and 247 indicate memory errors.

If customizations are not needed follow the "Run as OCI App" instructions, otherwise follow the "Run with Customizations" instructions.

Run as OCI App

Open a terminal window and run docker compose -f oci://openmpf/openmpf_compose:latest up. When the text stops scrolling, open a browser and go to http://localhost:8080. By default, the administrator credentials are username "admin", and password "mpfadm".

Run with Customizations

Copy the example docker-compose.yml content below into a text file with the same name. Open a terminal window, change to that directory, and run docker compose up. When the text stops scrolling, open a browser and go to http://localhost:8080. By default, the administrator credentials are username "admin", and password "mpfadm".

Example docker-compose.yml File

version: '3.7'

x-detection-component-base:
  &detection-component-base
  depends_on:
    - workflow-manager
  volumes:
    - shared_data:/opt/mpf/share
  deploy:
    mode: replicated
    replicas: 1

services:
  db:
    image: postgres:17-alpine
    environment:
      POSTGRES_DB: mpf
      POSTGRES_USER: mpf
      POSTGRES_PASSWORD: password
    volumes:
      - db_data:/var/lib/postgresql/data
    deploy:
      placement:
        constraints:
          - node.role == manager

  redis:
    image: redis:alpine

  workflow-manager:
    image: openmpf/openmpf_workflow_manager:latest
    depends_on:
      - db
      - redis
    ports:
      - "8080:8080"
    volumes:
      - shared_data:/opt/mpf/share
    deploy:
      placement:
        constraints:
          - node.role == manager

  markup:
    image: openmpf/openmpf_markup:latest
    volumes:
      - shared_data:/opt/mpf/share
    deploy:
      mode: global
      
  argos-translation:
    <<: *detection-component-base
    image: openmpf/openmpf_argos_translation:latest
    
  clip-detection:
    <<: *detection-component-base
    image: openmpf/openmpf_clip_detection:latest

#  clip-detection-server:
#    image: openmpf/openmpf_clip_detection_server:latest
#    deploy:
#      mode: global
#      # Expose GPU to the server. At least one GPU is required.
#      resources:
#        reservations:
#          devices:
#            - driver: nvidia
#              device_ids: ['0']
#              capabilities: [gpu]
#    ulimits:
#      memlock: -1  # don't limit locked-in memory (prevent paging)
#      stack: 67108864  # 8 GiB
#    # ports:
#      # - "8001:8001"  # server gRPC port (expose to enable handling requests from outside the stack)
#      # - "8000:8000"  # (optional) HTTP management port
#      # - "8002:8002"  # (optional) Prometheus metrics at http://<host>:<this-port>/metrics
#    command: [tritonserver,
#              --model-repository=/models,
#              --strict-model-config=false,
#              --model-control-mode=explicit,
#              --load-model=vit_l_14,
#              # --log-verbose=1,  # (optional)
#              --grpc-infer-allocation-pool-size=16 ]

  east-text-detection:
    <<: *detection-component-base
    image: openmpf/openmpf_east_text_detection:latest

  fasttext-language-detection:
    <<: *detection-component-base
    image: openmpf/openmpf_fasttext_language_detection:latest

  keyword-tagging:
    <<: *detection-component-base
    image: openmpf/openmpf_keyword_tagging:latest

  llama-video-summarization:
    <<: *detection-component-base
    # Expose GPU to the component. A GPU is required.
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              device_ids: ['0']
              capabilities: [gpu]
    image: openmpf/openmpf_llama_video_summarization:latest

  mog-motion-detection:
    <<: *detection-component-base
    image: openmpf/openmpf_mog_motion_detection:latest

  nllb-translation:
    <<: *detection-component-base
    # Expose GPU to the component. A GPU is required.
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              device_ids: ['0']
              capabilities: [gpu]
    image: openmpf/openmpf_nllb_translation:latest

  nlp-text-correction:
    <<: *detection-component-base
    image: openmpf/openmpf_nlp_text_correction:latest

  oalpr-license-plate-text-detection:
    <<: *detection-component-base
    image: openmpf/openmpf_oalpr_license_plate_text_detection:latest

  ocv-dnn-detection:
    <<: *detection-component-base
    image: openmpf/openmpf_ocv_dnn_detection:latest

  ocv-face-detection:
    <<: *detection-component-base
    image: openmpf/openmpf_ocv_face_detection:latest

  ocv-yolo-detection:
    <<: *detection-component-base
    image: openmpf/openmpf_ocv_yolo_detection:latest

#  ocv-yolo-detection-server:
#    image: openmpf/openmpf_ocv_yolo_detection_server:latest
#    deploy:
#      mode: global
#      # Expose GPUs to the server. At least one GPU is required.
#      resources:
#        reservations:
#          devices:
#            - driver: nvidia
#              device_ids: ['0']
#              capabilities: [gpu]
#    ulimits:
#      memlock: -1  # don't limit locked-in memory (prevent paging)
#      stack: 67108864  # 8 GiB
#    # ports:
#    #  - "8001:8001"  # server gRPC port (expose to enable handling requests from outside the stack)
#    #  - "8000:8000"  # (optional) HTTP management port
#    #  - "8002:8002"  # (optional) Prometheus metrics at http://<host>:<this-port>/metrics
#    environment:
#      - LD_PRELOAD=/plugins/libyolo608layerplugin.so
#    volumes:
#      # (optional) Volume for shared memory with OcvYoloDetection component on same host
#      # - "/dev/shm:/dev/shm"
#      # At runtime the server generates a GPU-specific engine file for the YOLO model. Caching it in a volume saves
#      # initialization time. To save space, manually remove generated engine files that are no longer needed.
#      - yolo_engine_files:/models
#    command: [tritonserver,
#              --model-repository=/models,
#              --strict-model-config=false,
#              --model-control-mode=explicit,
#              --load-model=yolo-608,
#              # --log-verbose=1,  # (optional)
#              --grpc-infer-allocation-pool-size=16 ]

  ortools-subject-component:
    <<: *detection-component-base
    image: openmpf/openmpf_ortools_subject_component:latest

  scene-change-detection:
    <<: *detection-component-base
    image: openmpf/openmpf_scene_change_detection:latest

  sphinx-speech-detection:
    <<: *detection-component-base
    image: openmpf/openmpf_sphinx_speech_detection:latest
    environment:
      JAVA_TOOL_OPTIONS: -Xmx1g  # limit Java heap size to 1GB

  subsense-motion-detection:
    <<: *detection-component-base
    image: openmpf/openmpf_subsense_motion_detection:latest

  tesseract-ocr-text-detection:
    <<: *detection-component-base
    image: openmpf/openmpf_tesseract_ocr_text_detection:latest

  tika-image-detection:
    <<: *detection-component-base
    image: openmpf/openmpf_tika_image_detection:latest

  tika-text-detection:
    <<: *detection-component-base
    image: openmpf/openmpf_tika_text_detection:latest

  transformer-tagging:
    <<: *detection-component-base
    image: openmpf/openmpf_transformer_tagging:latest
    
  whisper-speech-detection:
    <<: *detection-component-base
    image: openmpf/openmpf_whisper_speech_detection:latest

  #  azure-form-detection:
  #    <<: *detection-component-base
  #    image: openmpf/openmpf_azure_form_detection:latest
  #    environment:
  #      MPF_PROP_ACS_URL: https://eastus.api.cognitive.microsoft.com/formrecognizer/v2.0/layout/analyze
  #      MPF_PROP_ACS_SUBSCRIPTION_KEY: <Your Azure subscription key goes here.>

  # azure-read-text-detection:
  #   <<: *detection-component-base
  #   image: openmpf/openmpf_azure_read_text_detection:latest
  #   environment:
  #     MPF_PROP_ACS_URL: https://eastus.api.cognitive.microsoft.com/vision/v3.1/read/analyze
  #     MPF_PROP_ACS_SUBSCRIPTION_KEY: <Your Azure subscription key goes here.>

  # azure-speech-detection:
  #   <<: *detection-component-base
  #   image: openmpf/openmpf_azure_speech_detection:latest
  #   environment:
  #     MPF_PROP_ACS_URL: https://eastus.api.cognitive.microsoft.com/speechtotext/v3.0/transcriptions
  #     MPF_PROP_ACS_SUBSCRIPTION_KEY: <Your Azure subscription key goes here.>
  #     MPF_PROP_ACS_BLOB_CONTAINER_URL: https://myaccount.blob.core.windows.net/mycontainer
  #     MPF_PROP_ACS_BLOB_SERVICE_KEY: <Your Azure blob storage service key goes here.>

  # azure-translation:
  #   <<: *detection-component-base
  #   image: openmpf/openmpf_azure_translation:latest
  #   environment:
  #     MPF_PROP_ACS_URL: https://api.cognitive.microsofttranslator.com
  #     MPF_PROP_ACS_SUBSCRIPTION_KEY: <Your Azure subscription key goes here.>

volumes:
  shared_data:
  db_data:
  yolo_engine_files:

Notice

MITRE IS PROVIDING THE SOFTWARE "AS IS" AND MAKES NO WARRANTY, EXPRESS OR IMPLIED, AS TO THE ACCURACY, CAPABILITY, EFFICIENCY, MERCHANTABILITY, OR FUNCTIONING OF THE SOFTWARE. IN NO EVENT WILL MITRE BE LIABLE FOR ANY GENERAL, CONSEQUENTIAL, INDIRECT, INCIDENTAL, EXEMPLARY, OR SPECIAL DAMAGES, RELATED TO THE SOFTWARE OR ANY DERIVATIVE OF THE SOFTWARE.

License Considerations

We are not lawyers and provide this information to the best of our ability in an attempt to honor all licensing agreements and clarify the potential responsibilities of OpenMPF users.

Docker Distribution

The OpenMPF Docker images are released under GPLv2, unless otherwise stated.

ffmpeg-devel Integration

The software in the Workflow Manager image, and most C++ component images, is dynamically linked with a version of OpenCV that is in turn linked with a version of ffmpeg-devel built with --enable-gpl --enable-nonfree --enable-libx264 --enable-libx265. Distribution of software that includes the latter two encoders must be released under GPLv2 and cannot be used commercially without obtaining the appropriate licenses from x264 LLC / CoreCodec or MulticoreWare. See here for more information.

Note that the OpenMPF core is built with, but does not require, the x264 or x265 encoders. In some cases, such as when generating video markup, users have the option to use x264, or an alternative encoder such as vp9 or mjpeg.

Usage Royalties

x264 and x256 Encoders

If someone uses a component that makes use of the x264 or x256 encoders in FFmpeg for commercial applications, then that person should obtain the appropriate licenses from x264 LLC / CoreCodec or MulticoreWare, respectively.

"h264" and "hevc" Decoders

FFmpeg comes bundled with its own native "h264" and "hevc" decoders, which OpenMPF may use depending on the media types provided when creating jobs. Although released under LGPL, use of these decoders for commercial applications may still require the payment of royalties to patent holders. The FFmpeg group states on their Legal page:

Q: Does FFmpeg use patented algorithms?

A: We do not know, we are not lawyers so we are not qualified to answer this. Also we have never read patents to implement any part of FFmpeg, so even if we were qualified we could not answer it as we do not know what is patented.

There have been cases where companies have used FFmpeg in their products. These companies found out that once you start trying to make money from patented technologies, the owners of the patents will come after their licensing fees. Notably, MPEG LA is vigilant and diligent about collecting for MPEG-related technologies.

Tag summary

Content type

Image

Digest

sha256:5f4bc7b69

Size

417.9 MB

Last updated

7 months ago

docker pull openmpf/openmpf_workflow_manager