The OpenMPF Workflow Manager
9.1K
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.
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.
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".
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".
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:
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.
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.
The OpenMPF Docker images are released under GPLv2, unless otherwise stated.
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.
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.
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.
Content type
Image
Digest
sha256:5f4bc7b69…
Size
417.9 MB
Last updated
7 months ago
docker pull openmpf/openmpf_workflow_manager