コード例 #1
0
    def onURLReceived(self, urlString):
        """Process DICOM view requests. Example:
    slicer://viewer/?studyUID=2.16.840.1.113669.632.20.121711.10000158860
      &access_token=k0zR6WAPpNbVguQ8gGUHp6
      &dicomweb_endpoint=http%3A%2F%2Fdemo.kheops.online%2Fapi
      &dicomweb_uri_endpoint=%20http%3A%2F%2Fdemo.kheops.online%2Fapi%2Fwado
    """

        url = qt.QUrl(urlString)
        if (url.authority().lower() != "viewer"):
            return
        query = qt.QUrlQuery(url)
        queryMap = {}
        for key, value in query.queryItems(qt.QUrl.FullyDecoded):
            queryMap[key] = qt.QUrl.fromPercentEncoding(value)

        if not "dicomweb_endpoint" in queryMap:
            logging.error("Missing dicomweb_endpoint")
            return
        if not "studyUID" in queryMap:
            logging.error("Missing studyUID")
            return

        accessToken = None
        if "access_token" in queryMap:
            accessToken = queryMap["access_token"]

        slicer.util.selectModule("DICOM")
        slicer.app.processEvents()
        from DICOMLib import DICOMUtils
        DICOMUtils.importFromDICOMWeb(
            dicomWebEndpoint=queryMap["dicomweb_endpoint"],
            studyInstanceUID=queryMap["studyUID"],
            accessToken=accessToken)
コード例 #2
0
    def onURLReceived(self, urlString):
        """Process DICOM view requests. Example:
        slicer://viewer/?studyUID=2.16.840.1.113669.632.20.121711.10000158860
          &access_token=k0zR6WAPpNbVguQ8gGUHp6
          &dicomweb_endpoint=http%3A%2F%2Fdemo.kheops.online%2Fapi
          &dicomweb_uri_endpoint=%20http%3A%2F%2Fdemo.kheops.online%2Fapi%2Fwado
        """

        url = qt.QUrl(urlString)
        if (url.authority().lower() != "viewer"):
            logging.debug("DICOM module ignores non-viewer URL: " + urlString)
            return
        query = qt.QUrlQuery(url)
        queryMap = {}
        for key, value in query.queryItems(qt.QUrl.FullyDecoded):
            queryMap[key] = qt.QUrl.fromPercentEncoding(value)

        if "dicomweb_endpoint" not in queryMap:
            logging.debug(
                "DICOM module ignores URL without dicomweb_endpoint query parameter: "
                + urlString)
            return
        if "studyUID" not in queryMap:
            logging.debug(
                "DICOM module ignores URL without studyUID query parameter: " +
                urlString)
            return

        logging.info("DICOM module received URL: " + urlString)

        accessToken = None
        if "access_token" in queryMap:
            accessToken = queryMap["access_token"]

        slicer.util.selectModule("DICOM")
        slicer.app.processEvents()
        from DICOMLib import DICOMUtils
        importedSeriesInstanceUIDs = DICOMUtils.importFromDICOMWeb(
            dicomWebEndpoint=queryMap["dicomweb_endpoint"],
            studyInstanceUID=queryMap["studyUID"],
            accessToken=accessToken)

        # Select newly loaded items to make it easier to load them
        self.browserWidget.dicomBrowser.setSelectedItems(
            ctk.ctkDICOMModel.SeriesType, importedSeriesInstanceUIDs)
コード例 #3
0
    def accessDICOMwebStudy(self, request, requestBody):
        """
        Access DICOMweb server to download requested study, add it to
        Slicer's dicom database, and load it into the scene.
        :param requestBody: is a json string
        :param requestBody['dicomWEBPrefix']: is the start of the url
        :param requestBody['dicomWEBStore']: is the middle of the url
        :param requestBody['studyUID']: is the end of the url
        :param requestBody['accessToken']: is the authorization bearer token for the DICOMweb server
        """
        p = urllib.parse.urlparse(request.decode())
        q = urllib.parse.parse_qs(p.query)

        request = json.loads(requestBody), b'application/json'

        dicomWebEndpoint = request['dicomWEBPrefix'] + '/' + request[
            'dicomWEBStore']
        print(f"Loading from {dicomWebEndpoint}")

        from DICOMLib import DICOMUtils
        loadedUIDs = DICOMUtils.importFromDICOMWeb(
            dicomWebEndpoint=request['dicomWEBPrefix'] + '/' +
            request['dicomWEBStore'],
            studyInstanceUID=request['studyUID'],
            accessToken=request['accessToken'])

        files = []
        for studyUID in loadedUIDs:
            for seriesUID in slicer.dicomDatabase.seriesForStudy(studyUID):
                for instance in slicer.dicomDatabase.instancesForSeries(
                        seriesUID):
                    files.append(
                        slicer.dicomDatabase.fileForInstance(instance))
        loadables = DICOMUtils.getLoadablesFromFileLists([files])
        loadedNodes = DICOMUtils.loadLoadables(loadLoadables)

        print(f"Loaded {loadedUIDs}, and {loadedNodes}")

        return b'{"result": "ok"}'