All Projects → wolfpacs → wolfpacs

wolfpacs / wolfpacs

Licence: GPL-3.0 License
WolfPACS is an DICOM load balancer written in Erlang.

Programming Languages

erlang
1774 projects
python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to wolfpacs

DICOM.jl
Julia package for reading and writing DICOM (Digital Imaging and Communications in Medicine) files
Stars: ✭ 45 (+4400%)
Mutual labels:  dicom, medical, pacs, radiology
dicomweb-pacs
Easy to use DICOMWEB enabled PACS with DIMSE services based on sqlite database
Stars: ✭ 42 (+4100%)
Mutual labels:  dicom, medical, pacs
dicom-standard-chinese
Chinese translation of DICOM standard, DICOM协议中文版
Stars: ✭ 26 (+2500%)
Mutual labels:  dicom, medical, pacs
Niffler
Niffler: A DICOM Framework for Machine Learning and Processing Pipelines.
Stars: ✭ 52 (+5100%)
Mutual labels:  dicom, pacs, radiology
nnDetection
nnDetection is a self-configuring framework for 3D (volumetric) medical object detection which can be applied to new data sets without manual intervention. It includes guides for 12 data sets that were used to develop and evaluate the performance of the proposed method.
Stars: ✭ 355 (+35400%)
Mutual labels:  medical, medical-image-computing
monai-deploy
MONAI Deploy aims to become the de-facto standard for developing, packaging, testing, deploying and running medical AI applications in clinical production.
Stars: ✭ 56 (+5500%)
Mutual labels:  dicom, radiology
deid
best effort anonymization for medical images using python
Stars: ✭ 108 (+10700%)
Mutual labels:  dicom, medical
Post Me
📩 Use web Workers and other Windows through a simple Promise API
Stars: ✭ 398 (+39700%)
Mutual labels:  communication, worker
Emory-BMI-GSoC
Emory BMI GSoC Project Ideas
Stars: ✭ 27 (+2600%)
Mutual labels:  dicom, radiology
clara-dicom-adapter
DICOM Adapter is a component of the Clara Deploy SDK which facilitates integration with DICOM compliant systems, enables ingestion of imaging data, helps triggering of jobs with configurable rules and offers pushing the output of jobs to PACS systems.
Stars: ✭ 31 (+3000%)
Mutual labels:  dicom, medical
roco-dataset
Radiology Objects in COntext (ROCO): A Multimodal Image Dataset
Stars: ✭ 38 (+3700%)
Mutual labels:  medical, radiology
rid-covid
Image-based COVID-19 diagnosis. Links to software, data, and other resources.
Stars: ✭ 74 (+7300%)
Mutual labels:  medical, radiology
Krakend
Ultra performant API Gateway with middlewares. A project hosted at The Linux Foundation
Stars: ✭ 4,752 (+475100%)
Mutual labels:  router, load-balancer
networking-icons
Repo containing various networking icons including routers, switches, servers, firewalls, load balancers and more. Icons are provided in png and svg formats.
Stars: ✭ 61 (+6000%)
Mutual labels:  router, load-balancer
AlizaMS
DICOM Viewer
Stars: ✭ 144 (+14300%)
Mutual labels:  dicom, medical
Multitor
Create multiple TOR instances with a load-balancing.
Stars: ✭ 624 (+62300%)
Mutual labels:  communication, load-balancer
Mritopng
A simple python module to make it easy to batch convert DICOM files to PNG images.
Stars: ✭ 113 (+11200%)
Mutual labels:  dicom, medical
Dltk
Deep Learning Toolkit for Medical Image Analysis
Stars: ✭ 1,249 (+124800%)
Mutual labels:  ml, medical
lura
Ultra performant API Gateway with middlewares. A project hosted at The Linux Foundation
Stars: ✭ 5,159 (+515800%)
Mutual labels:  router, load-balancer
dicom-dimse-native
node js native addon for dimse services
Stars: ✭ 33 (+3200%)
Mutual labels:  dicom, pacs

WolfPACS

Build status codecov.io Docker build License GPLv3 Documentation Version Observance

Logo

Raison d'être

With the advent of powerful AI solutions in Radiology, there is growing need to split the workload across multiple workers. WolfPACS acts as a load balancer, sending DICOM series to the correct worker.

Mission statement

Enable a pool of heterogeneous workers (hardware, software) to serve multiple clients in a flexible way.

Status

WolfPACS is currently in the Alpha phase of development. Some critical bugs may still remain in the software.

WolfPACS is close to feature freeze but is open for adjustments upon feedback.

WolfPACS needs more black-box testing. If you have a use case please write [email protected].

Bird's-eye view

Imagine a Medical AI company called Stroke Insight. They have developed a cutting-edge algorithm to analyse MRIs; to detect strokes. To analyse the images, they need computers with a lot of GPU power. These are critical resource, that need serve many clients concurrently. The machines are called workers. Once in a while they need to take the workers offline in order to upgrade the software and/or the hardware. To server multiple clients in a flexible way, they have deployed WolfPACS as a loadbalancer.

Two clients, a hosptial in Stockholm and one in Berlin as bought their newest version of their software. Let's call them Stockholm Hospital (S) and Berlin Hospital (B). Both Stockholm and Berlin have their own central PACS systems.

To run their algorithm, Stroke Insight needs to get the original images to generate the extra information; the derived series.

Logo

Steps in figure above.

  1. A Radiologist sends the primary series to Stroke Insight (which are running WolfPACS as a loadbalancer.)
  2. WolfPACS receives the series and routes the images to an appropriate worker with the right software [1].
  3. The worker sends the new derived series back to WolfPACS.
  4. Finally, WolfPACS sends the new series back to the correct destination.

[1] A series is contains many imanges and WolfPACS makes sure that the whole series ends up on the same worker.

Mental model

Any router / load balancer has two sides. One side facing the outside world. And the other side facing the inside world (workers).

We expose port 11112 for outside clients of WolfPACS. Workers on the other side, should contact WolfPACS on port 11113.

Therefore, if you deploy WolfPACS, you need to expose 11112 to the outside world. Whereas you want to keep 11113 open inside the firewall (trusted side).

Logo

In addition, WolfPACS is best configured using HTTP. WolfPACS listens on port 8080.

Please see mini_admin.py for an example python script.

Client vs Destination

A client is anyone with the correct Application Entity (AE). This acts as a shared secret / password.

A destionation is a server that can receive DICOM data. WolfPACS needs a hostname, IP-address and called AE.

So the client will send data to WolfPACS and the destination will receive data from WolfPACS.

Quick Start

Start WolfPACS in background.

docker run -d -p 11112:11112 -p 11113:11113 -p 8080:8080 wolfpacs/wolfpacs

Configure WolfPACS to have 2 workers, 1 client and 1 destination.

python3 mini_admin.py --add-worker --name w1 --host 192.168.1.11 --port 1111 --ae W1
python3 mini_admin.py --add-worker --name w2 --host 192.168.1.12 --port 2222 --ae W2

python3 mini_admin.py --add-client --name c1 --ae C1111

python3 mini_admin.py --add-dest --name c1 --host 1.2.3.4 --port 1234 --ae D1111

python3 mini_admin.py --assoc-worker --client c1 --name w1
python3 mini_admin.py --assoc-worker --client c1 --name w2

python3 mini_admin.py --assoc-dest --client c1 --name d1

Debug WolfPACS instance

docker run -it -p 11112:11112 -p 11113:11113 -p 8080:8080 wolfpacs/wolfpacs console

Environment variables

It is possible to configure some parts of WolfPACS using environmental variables.

Variable Description Default
WOLFPACS_INSIDE_PORT The port towards the workers 11112
WOLFPACS_OUTSIDE_PORT The port facing the outside world 11113
WOLFPACS_ADMIN_PORT The port for administration over http 8080

DICOM Conformance Statement

The following transfer syntax are are supported:

Transfer Syntax UID Supported
Implicit VR Little Endian 1.2.840.10008.1.2 Yes
Explicit VR Little Endian 1.2.840.10008.1.2.1 Yes
Explicit VR Big Endian 1.2.840.10008.1.2.2 Yes

Test plan

A PACS is classified as a medical device and needs to be painstakingly tested.

We use four different test in WolfPACS and we aim to test the software thoroughly.

Test Target Method
Unit tests One Module Erlang Eunit
Integration tests Many Modules Erlang Common Tests
Validation testing User requirements Python Robot Framework
Property based testing Hidden bugs / Fussing Erlang proper
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].