ivmartel / dwv

DICOM Web Viewer: open source zero footprint medical image library.
https://ivmartel.github.io/dwv/
GNU General Public License v3.0
1.64k stars 591 forks source link

Questions for Deployment #556

Closed vsoch closed 6 years ago

vsoch commented 6 years ago

hey @ivmartel ! We are really excited about dmv, and (as you would imagine) have a few more questions. For those that don't have direct answers, I'd like to offer to do little test cases / analyses to provide with the software. Here is what I would like to learn:

Permissions

Does dwv have any concept of what you might call "permission management?" I'm guessing this is something that would be managed by some kind of wrapper (or custom implementation) with the viewer? If yes, what plugins / software have you seen work well in the past to manage? I would imagine bringing into several popular frameworks would make available useful third party modules, but also increase the need to monitor for security loopholes (I think/hopewe are getting better with security audits?).

Performance

The scale of the image sets that we are going to be querying is large. We generally are curious - when would we expect slowdown? For example, I tested a few three.js viewers and they were really slow. I'd expect anything with substantial rendering like that would be. I saw that you had webGL on your roadmap, what kind of direction were you thinking? My colleague @akeshavan is very interested in this, working on neurobrain.

User Stories

This is pretty cool - do you have a namespace for your user stories? https://github.com/ivmartel/dwv/wiki/User-Stories Is that something you came up with? (I like it).

Dicom Web Standard

I asked about this in a previous issue, but is there any reason Dicom Web Standard and WACOM isn't on the roadmap?

HIPAA

I noticed HIPAA mentioned in your docs - what specifically does dwv do, does it hide / otherwise change tags with PHI? This is very important.

Annotations

It's awesome that you support annotations! (Look I made a thing!)

image

It also looks like when I export the state (as a file, state.json), the annotation is represented (super cool!) I will include the whole thing here for those following to see what I mean (notice THETHING)

{
  "version": "0.3",
  "window-center": 1123,
  "window-width": 2228,
  "position": {
    "i": 0,
    "j": 0,
    "k": 0
  },
  "scale": 1,
  "scaleCenter": {
    "x": 0,
    "y": 0
  },
  "translation": {
    "x": 0,
    "y": 0
  },
  "drawings": {
    "attrs": {
      "listening": true,
      "visible": true
    },
    "className": "Layer",
    "children": [
      {
        "attrs": {
          "name": "position-group",
          "id": "slice-0_frame-0",
          "visible": true
        },
        "className": "Group",
        "children": [
          {
            "attrs": {
              "name": "line-group",
              "visible": true,
              "id": "eqe84ryo1jn",
              "draggable": true
            },
            "className": "Group",
            "children": [
              {
                "attrs": {
                  "points": [
                    41,
                    135,
                    56,
                    115
                  ],
                  "stroke": "#ffff80",
                  "strokeWidth": 0.7344262295082,
                  "name": "shape"
                },
                "className": "Line"
              },
              {
                "attrs": {
                  "x": 43.203278688525,
                  "y": 132.06229508197,
                  "sides": 3,
                  "radius": 3.672131147541,
                  "rotation": -143.13010235416,
                  "fill": "#ffff80",
                  "strokeWidth": 0.7344262295082,
                  "name": "shape-triangle"
                },
                "className": "RegularPolygon"
              },
              {
                "attrs": {
                  "x": 31,
                  "y": 100,
                  "name": "label"
                },
                "className": "Label",
                "children": [
                  {
                    "attrs": {
                      "fontSize": 4.4065573770492,
                      "fontFamily": "Verdana",
                      "fill": "#ffff80",
                      "name": "text",
                      "text": "THETHING"
                    },
                    "className": "Text"
                  },
                  {
                    "attrs": {
                      "width": 23.32307434082,
                      "height": 4.4065573770492
                    },
                    "className": "Tag"
                  }
                ]
              }
            ]
          }
        ]
      }
    ]
  },
  "drawingsDetails": {
    "eqe84ryo1jn": {
      "textExpr": "THETHING",
      "longText": "I drew this thing.",
      "quant": null
    }
  }
}

Does the annotation follow any kind of ontology or standard, or something specific to dwv? E.g. how is this mapped to RadLex, AIM or similar (or is it up to the user / not?)

That's all I got! I'm cc-ing my team @rmarinshaw @somalee @garricko @jmesterh @willthelaw so they (if they want) notified about our discussion.

Thank you very kindly for your help, and please take the time you need to look through the above! I'm hoping that we can get all our boxes checked off, and then I can help with some of that roadmap :)

ivmartel commented 6 years ago

In order:

  1. Permissions: if you mean restricting user to certain functionality, then yes that would be handled externally to dwv. I do not know about specific appropriate third parties for this purpose.
  2. Performance: the viewer only displays slacks of 2D with the html canvas element. The bigger the slower but I do not have precise benchmarks... WebGL could be used when trying to recreate the 3D volume (called MPR, see #4).
  3. User story: this is a way of describing software requirements, quite common in Agile methodologies (see User_story on wikipedia).
  4. DicomWeb: not implemented due to a lack of time and a long backlog...
  5. HIPAA: there is a beta anonymiser in the tests folder. It allows to remove/edit tags according to user provided rules. It needs more tests!
  6. Annotations: they are free text and support simple quantification for specific shapes: for ex you can use the {surface} tag on rectangles. The state.json is a simple storage solution, I would prefer using a standard, see #306. Adding ontologies would be nice.

Now on to you, can you tell me more about your project and what you would like to use dwv for?

vsoch commented 6 years ago

hey @ivmartel !

We are just starting to put images into cloud storage, and as you can imagine want a good way to look at them. The integrations we are looking to have supported are those that would plug nicely into Google Cloud Storage, and work with their (still under development) Healthcare API.

Those are the high level things right now I think checking out the Health Care API overview pages might be a good source of information too!

vsoch commented 6 years ago

Another quick question - what do you think about https://github.com/OHIF/Viewers ? Have you taken a look? The downsides seem to be the dependency on meteor, and overall the software is much more complicated.

ivmartel commented 6 years ago

I just had a quick look at the google-healthcare-api, I now understand why you ask questions about DICOMWeb! Ok, that would be a good reason to push DICOMWeb connectivity.

Regarding anonymization, I'm not sure I get what you say, do you mean the data will come anonymized or you would prefer to have standard anonymization rules?

Yes, I know about OHIF, pretty nice viewers! I must admit I do not know much about meteor and especially the implications on dependent projects. They mention ePAD Imaging Platform as a similar project, are you related to it?

vsoch commented 6 years ago

haha yes it would be great to push connectivity with DicomWeb!

I mean that anonymization is a very important and standardized practice that must be done by an accredited entity.

Yes, epad comes out of Stanford! I can't take credit for any of it, but I've watched it's development since 2011, and now my team has been setting it up for some groups. The head of the lab that produces it happens to be my old advisor, professor, and friend. It's a small world!

ivmartel commented 6 years ago

About Google, I forgot to mention my work connecting to Google Drive, you can right click on a *.dcm file and choose dwv to view it.

ivmartel commented 6 years ago

A clarification about DICOMWeb (as I read more about it...) and dwv, dwv supports loading data via individual urls and will concatenate them if provided on the same query (see Multiple data url in User-Stories#io.

So these urls can be queries to a PACS whatever the format. I tried it with WADO-URIs (see Dicom-Support#wado) and it works. There should not be any problems with its REST equivalent (WADO-RS). What could be interesting would be to add support for group query (where you query for a list of image in one url).

Not sure which WADO the google-heathcare-api supports but I would be interested if you succeed loading data via WADO-RS.

vsoch commented 6 years ago

hey @ivmartel I wanted to thank you kindly for this information - I think this future discussion could be very useful for a future reader! I just heard from the higher ups that two open source projects are going to be creating Google Cloud Launcher versions of their applications, so I think our team is going to test those first. But thank you again kindly for your discussion here! Closing issue.

ivmartel commented 6 years ago

Thanks for your feedback. Not sure how, but I'll see if I can make dwv more accessible from Google Cloud. All comments / recommendations on how to improve or what is missing are welcome!

vsoch commented 6 years ago

I can offer some thoughts! So the audience that I am doing this review for is an institution that needs a production tool that is click and go ready to go, with minimal customization from our engineers. The user base are researchers and physicians that need the best that we can find in terms of usability and features. There are also many strict requirements in terms of security, authentication, etc. So the ideal solution is something open source that is easy to deploy (in a click and go way) from a web interface, and also connects easily to where the data is. Since we are invested in Google Cloud, this means Google Storage! The ideal would thus be to have a deployment from cloud launcher that a user can click and go to connect to his or her data. Last year Google made an entry point for developers to release their software via the marketplace https://cloudplatform.googleblog.com/2016/03/Google-Cloud-Launcher-simplifies-running-third-party-apps-in-the-cloud.html?m=1 and for you likely this means making an endpoint to connect to storage using default application credentials and then the deployment recipes that are required. I haven’t done it yet but likely it’s not a huge amount of work to expose your software to the larger google user base that wants this click and go deployment.

Hope that helps! I really like your viewer and will definitely be back for future projects :)