Verwenden von DICOMWeb™ Standard-APIs mit Python

In diesem Lernprogramm wird Python verwendet, um die Arbeit mit dem DICOM-Dienst zu veranschaulichen.

Im Lernprogramm verwenden wir die folgenden BEISPIEL-DICOM-Dateien.

  • blue-circle.dcm
  • dicom-metadata.csv
  • green-square.dcm
  • red-triangle.dcm

Der Dateiname, "studyUID", "seriesUID" und "instanceUID" der DICOM-Beispieldateien sind wie folgt:

Datei StudyUID SeriesUID InstanceUID
green-square.dcm 1.2.826.0.1.3680043.8.498.13230779778012324449356534479549187420 1.2.826.0.1.3680043.8.498.45787841905473114233124723359129632652 1.2.826.0.1.3680043.8.498.12714725698140337137334606354172323212
red-triangle.dcm 1.2.826.0.1.3680043.8.498.13230779778012324449356534479549187420 1.2.826.0.1.3680043.8.498.45787841905473114233124723359129632652 1.2.826.0.1.3680043.8.498.47359123102728459884412887463296905395
blue-circle.dcm 1.2.826.0.1.3680043.8.498.13230779778012324449356534479549187420 1.2.826.0.1.3680043.8.498.77033797676425927098669402985243398207 1.2.826.0.1.3680043.8.498.13273713909719068980354078852867170114

Hinweis

Jede dieser Dateien stellt eine einzelne Instanz dar und ist Teil derselben Studie. Außerdem sind das grüne Quadrat und das rote Dreieck Teil derselben Serie, während sich der blaue Kreis in einer separaten Reihe befindet.

Voraussetzungen

Um die DICOMWeb™ Standard-APIs zu verwenden, müssen Sie über eine Instanz des DICOM-Diensts verfügen. Wenn Sie den DICOM-Dienst noch nicht bereitgestellt haben, lesen Sie die Bereitstellung des DICOM-Diensts mithilfe des Azure-Portals.

Nachdem Sie eine Instanz des DICOM-Diensts bereitgestellt haben, rufen Sie die URL für Ihren App-Dienst ab:

  1. Melden Sie sich beim Azure-Portal an.
  2. Suchen Sie zuletzt verwendete Ressourcen , und wählen Sie Ihre DICOM-Dienstinstanz aus.
  3. Kopieren Sie die Dienst-URL Ihres DICOM-Diensts .
  4. Wenn Sie noch kein Token abgerufen haben, lesen Sie " Abrufen des Zugriffstokens für den DICOM-Dienst mit Azure CLI".

Für diesen Code greifen wir auf einen Azure-Dienst der öffentlichen Vorschau zu. Es ist wichtig, dass Sie keine privaten Gesundheitsinformationen (Private Health Information, PHI) hochladen.

Arbeiten mit dem DICOM-Dienst

Der DICOMweb™ Standard verwendet http-Anforderungen in multipart/related Kombination mit DICOM-spezifischen Akzeptiert-Headern. Entwickler, die mit anderen REST-basierten APIs vertraut sind, finden häufig die Arbeit mit dem DICOMweb-Standard™ awkward. Sobald Sie es jedoch eingerichtet und ausgeführt haben, ist es einfach zu verwenden. Es dauert nur ein wenig Vertrautheit, um loszulegen.

Importieren der entsprechenden Python-Bibliotheken

Importieren Sie zunächst die erforderlichen Python-Bibliotheken.

Wir haben uns entschieden, dieses Beispiel mithilfe der synchronen requests Bibliothek zu implementieren. Für asynchrone Unterstützung sollten Sie die Verwendung oder eine andere asynchrone Bibliothek in httpx Betracht ziehen. Darüber hinaus importieren wir zwei unterstützende Funktionen, urllib3 um das Arbeiten mit multipart/related Anforderungen zu unterstützen.

Darüber hinaus importieren DefaultAzureCredential wir, um sich bei Azure anzumelden und ein Token abzurufen.

import requests
import pydicom
from pathlib import Path
from urllib3.filepost import encode_multipart_formdata, choose_boundary
from azure.identity import DefaultAzureCredential

Konfigurieren von benutzerdefinierten Variablen, die während der gesamten Verwendung verwendet werden

Ersetzen Sie alle variablen Werte, die in { } umgebrochen sind, durch ihre eigenen Werte. Überprüfen Sie außerdem, ob alle konstruierten Variablen korrekt sind. Wird beispielsweise base_url mithilfe der Dienst-URL erstellt und dann mit der verwendeten Version der REST-API angefügt. Die Dienst-URL Ihres DICOM-Diensts lautet: https://<workspacename-dicomservicename>.dicom.azurehealthcareapis.com. Sie können das Azure-Portal verwenden, um zum DICOM-Dienst zu navigieren und Ihre Dienst-URL abzurufen. Sie können auch die API-Versionsverwaltung für DICOM-Dienstdokumentation besuchen, um weitere Informationen zur Versionsverwaltung zu erhalten. Wenn Sie eine benutzerdefinierte URL verwenden, müssen Sie diesen Wert überschreiben.

dicom_service_name = "{server-name}"
path_to_dicoms_dir = "{path to the folder that includes green-square.dcm and other dcm files}"

base_url = f"{Service URL}/v{version}"

study_uid = "1.2.826.0.1.3680043.8.498.13230779778012324449356534479549187420"; #StudyInstanceUID for all 3 examples
series_uid = "1.2.826.0.1.3680043.8.498.45787841905473114233124723359129632652"; #SeriesInstanceUID for green-square and red-triangle
instance_uid = "1.2.826.0.1.3680043.8.498.47359123102728459884412887463296905395"; #SOPInstanceUID for red-triangle

Authentifizieren bei Azure und Abrufen eines Tokens

DefaultAzureCredential ermöglicht es uns, eine Vielzahl von Möglichkeiten zum Abrufen von Token zum Anmelden beim Dienst zu erhalten. Wir verwenden das AzureCliCredential Token, um sich beim Dienst anzumelden. Es gibt andere Anmeldeinformationsanbieter wie z ManagedIdentityCredential . B. und EnvironmentCredential die können auch verwendet werden. Um azureCliCredential zu verwenden, müssen Sie sich vor dem Ausführen dieses Codes von der CLI bei Azure angemeldet haben. (Weitere Informationen finden Sie unter Abrufen des Zugriffstokens für den DICOM-Dienst mit Azure CLI.) Alternativ können Sie das Token einfach kopieren und einfügen, das beim Anmelden von der CLI abgerufen wurde.

Hinweis

DefaultAzureCredential gibt mehrere verschiedene Anmeldeinformationsobjekte zurück. Wir verweisen auf das AzureCliCredential 5. Element in der zurückgegebenen Auflistung. Dies ist möglicherweise nicht konsistent. Wenn ja, heben Sie die Kommentare auf print(credential.credential) . Dadurch werden alle Elemente aufgeführt. Suchen Sie den richtigen Index, und erinnern Sie daran, dass Python nullbasierte Indizierung verwendet.

Hinweis

Wenn Sie sich nicht mit der CLI bei Azure angemeldet haben, schlägt dies fehl. Sie müssen in Azure von der CLI angemeldet sein, damit dies funktioniert.

from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()

#print(credential.credentials) # this can be used to find the index of the AzureCliCredential
token = credential.credentials[4].get_token('https://dicom.healthcareapis.azure.com')
bearer_token = f'Bearer {token.token}'

Erstellen von unterstützenden Methoden zur Unterstützung multipart\related

Die Requests Bibliotheken (und die meisten Python-Bibliotheken) funktionieren multipart\related nicht auf eine Weise, die DICOMweb™ unterstützt. Aufgrund dieser Bibliotheken müssen wir einige Methoden hinzufügen, um die Arbeit mit DICOM-Dateien zu unterstützen.

encode_multipart_related verwendet eine Reihe von Feldern (in dem DICOM-Fall sind diese Bibliotheken im Allgemeinen Teil 10 Dam-Dateien) und eine optionale benutzerdefinierte Grenze. Er gibt sowohl den vollständigen Text als auch die content_type zurück, die verwendet werden kann.

def encode_multipart_related(fields, boundary=None):
    if boundary is None:
        boundary = choose_boundary()

    body, _ = encode_multipart_formdata(fields, boundary)
    content_type = str('multipart/related; boundary=%s' % boundary)

    return body, content_type

Erstellen einer requests Sitzung

Erstellt eine requests Sitzung namens client", die verwendet wird, um mit dem DICOM-Dienst zu kommunizieren.

client = requests.session()

Überprüfen, ob die Authentifizierung ordnungsgemäß konfiguriert ist

Rufen Sie den Changefeed-API-Endpunkt auf, der einen 200 zurückgibt, wenn die Authentifizierung erfolgreich ist.

headers = {"Authorization":bearer_token}
url= f'{base_url}/changefeed'

response = client.get(url,headers=headers)
if (response.status_code != 200):
    print('Error! Likely not authenticated!')

Hochladen von DICOM-Instanzen (STOW)

In den folgenden Beispielen werden die beibehaltenen DICOM-Dateien hervorgehoben.

Speichern von Instanzen mithilfe von multipart/related

In diesem Beispiel wird veranschaulicht, wie Sie eine einzelne DICOM-Datei hochladen und ein bisschen ein Python verwendet, um die DICOM-Datei (als Bytes) in den Arbeitsspeicher zu laden. Indem Sie ein Array von Dateien an den Feldparameter encode_multipart_relatedübergeben, können mehrere Dateien in einem einzelnen POST hochgeladen werden. Es wird manchmal verwendet, um mehrere Instanzen in einer vollständigen Serie oder Studie hochzuladen.

Details:

  • Pfad:.. /Studien

  • Methode: POST

  • Headers:

    • Annehmen: application/dicom+json
    • Inhaltstyp: multipart/related; type="application/dicom"
    • Autorisierung: Bearer $token"
  • Hauptteil:

    • Inhaltstyp: anwendung/dicom für jede hochgeladene Datei, getrennt durch einen Grenzwertwert

Einige Programmiersprachen und Tools verhalten sich anders. Einige davon erfordern beispielsweise, dass Sie ihre eigene Grenze definieren. Für diejenigen müssen Sie möglicherweise einen leicht geänderten Inhaltstypheader verwenden. Die folgenden Wurden erfolgreich verwendet.

  • Inhaltstyp: multipart/related; type="application/dicom"; grenze=ABCD1234
  • Inhaltstyp: multipart/related; grenze=ABCD1234
  • Inhaltstyp: multipart/related
#upload blue-circle.dcm
filepath = Path(path_to_dicoms_dir).joinpath('blue-circle.dcm')

# Read through file and load bytes into memory 
with open(filepath,'rb') as reader:
    rawfile = reader.read()
files = {'file': ('dicomfile', rawfile, 'application/dicom')}

#encode as multipart_related
body, content_type = encode_multipart_related(fields = files)

headers = {'Accept':'application/dicom+json', "Content-Type":content_type, "Authorization":bearer_token}

url = f'{base_url}/studies'
response = client.post(url, body, headers=headers, verify=False)

Speichern von Instanzen für eine bestimmte Studie

In diesem Beispiel wird veranschaulicht, wie Mehrere DICOM-Dateien in die angegebene Studie hochgeladen werden. Es verwendet ein bisschen ein Python, um die DICOM-Datei (als Bytes) in den Arbeitsspeicher zu laden.

Indem Sie ein Array von Dateien an den Feldparameter encode_multipart_relatedübergeben, können mehrere Dateien in einem einzelnen POST hochgeladen werden. Es wird manchmal verwendet, um eine vollständige Serie oder Studie hochzuladen.

Details:

  • Pfad:.. /studies/{study}
  • Methode: POST
  • Headers:
    • Annehmen: application/dicom+json
    • Inhaltstyp: multipart/related; type="application/dicom"
    • Autorisierung: Bearer $token"
  • Hauptteil:
    • Inhaltstyp: anwendung/dicom für jede hochgeladene Datei, getrennt durch einen Grenzwertwert

filepath_red = Path(path_to_dicoms_dir).joinpath('red-triangle.dcm')
filepath_green = Path(path_to_dicoms_dir).joinpath('green-square.dcm')

# Open up and read through file and load bytes into memory 
with open(filepath_red,'rb') as reader:
    rawfile_red = reader.read()
with open(filepath_green,'rb') as reader:
    rawfile_green = reader.read()  
       
files = {'file_red': ('dicomfile', rawfile_red, 'application/dicom'),
         'file_green': ('dicomfile', rawfile_green, 'application/dicom')}

#encode as multipart_related
body, content_type = encode_multipart_related(fields = files)

headers = {'Accept':'application/dicom+json', "Content-Type":content_type, "Authorization":bearer_token}

url = f'{base_url}/studies'
response = client.post(url, body, headers=headers, verify=False)

Einzelne Instanz speichern (nicht standard)

Im folgenden Codebeispiel wird veranschaulicht, wie eine einzelne DICOM-Datei hochgeladen wird. Es handelt sich um einen nicht standardmäßigen API-Endpunkt, der das Hochladen einer einzelnen Datei als binäre Bytes vereinfacht, die im Textkörper einer Anforderung gesendet werden.

Details:

  • Pfad:.. /Studien
  • Methode: POST
  • Headers:
    • Annehmen: application/dicom+json
    • Inhaltstyp: application/dicom
    • Autorisierung: Bearer $token"
  • Hauptteil:
    • Enthält eine einzelne DICOM-Datei als binäre Bytes.
#upload blue-circle.dcm
filepath = Path(path_to_dicoms_dir).joinpath('blue-circle.dcm')

# Open up and read through file and load bytes into memory 
with open(filepath,'rb') as reader:
    body = reader.read()

headers = {'Accept':'application/dicom+json', 'Content-Type':'application/dicom', "Authorization":bearer_token}

url = f'{base_url}/studies'
response = client.post(url, body, headers=headers, verify=False)
response  # response should be a 409 Conflict if the file was already uploaded in the above request

Abrufen von DICOM-Instanzen (WADO)

In den folgenden Beispielen wird das Abrufen von DICOM-Instanzen hervorgehoben.

Abrufen aller Instanzen in einer Studie

In diesem Beispiel werden alle Instanzen innerhalb einer einzelnen Studie abgerufen.

Details:

  • Pfad:.. /studies/{study}
  • Methode: GET
  • Headers:
    • Annehmen: multipart/related; type="application/dicom"; transfer-syntax=*
    • Autorisierung: Bearer $token"

Alle drei dcm-Dateien, die wir zuvor hochgeladen haben, sind Teil derselben Studie, sodass die Antwort alle drei Instanzen zurückgeben sollte. Überprüfen Sie, ob die Antwort über einen Statuscode von OK verfügt und dass alle drei Instanzen zurückgegeben werden.

url = f'{base_url}/studies/{study_uid}'
headers = {'Accept':'multipart/related; type="application/dicom"; transfer-syntax=*', "Authorization":bearer_token}

response = client.get(url, headers=headers) #, verify=False)

Verwenden der abgerufenen Instanzen

Die Instanzen werden als binäre Bytes abgerufen. Sie können die zurückgegebenen Elemente durchlaufen und die Bytes in eine Datei konvertieren, die gelesen pydicomwerden kann.

import requests_toolbelt as tb
from io import BytesIO

mpd = tb.MultipartDecoder.from_response(response)
for part in mpd.parts:
    # Note that the headers are returned as binary!
    print(part.headers[b'content-type'])
    
    # You can convert the binary body (of each part) into a pydicom DataSet
    #   And get direct access to the various underlying fields
    dcm = pydicom.dcmread(BytesIO(part.content))
    print(dcm.PatientName)
    print(dcm.SOPInstanceUID)

Abrufen von Metadaten aller Instanzen in der Studie

Diese Anforderung ruft die Metadaten für alle Instanzen innerhalb einer einzigen Studie ab.

Details:

  • Pfad:.. /studies/{study}/metadata
  • Methode: GET
  • Headers:
    • Annehmen: application/dicom+json
    • Autorisierung: Bearer $token"

Alle drei .dcm dateien, die wir zuvor hochgeladen haben, sind Teil derselben Studie, sodass die Antwort die Metadaten für alle drei Instanzen zurückgeben sollte. Überprüfen Sie, ob die Antwort über einen Statuscode von OK verfügt und dass alle Metadaten zurückgegeben werden.

url = f'{base_url}/studies/{study_uid}/metadata'
headers = {'Accept':'application/dicom+json', "Authorization":bearer_token}

response = client.get(url, headers=headers) #, verify=False)

Abrufen aller Instanzen innerhalb einer Datenreihe

Diese Anforderung ruft alle Instanzen in einer einzelnen Datenreihe ab.

Details:

  • Pfad:.. /studies/{study}/series/{series}
  • Methode: GET
  • Headers:
    • Annehmen: multipart/related; type="application/dicom"; transfer-syntax=*
    • Autorisierung: Bearer $token"

Diese Reihe verfügt über zwei Instanzen (grün-quadratisch und rot-dreieck), sodass die Antwort beide Instanzen zurückgeben sollte. Überprüfen Sie, ob die Antwort über einen Statuscode von OK verfügt und dass beide Instanzen zurückgegeben werden.

url = f'{base_url}/studies/{study_uid}/series/{series_uid}'
headers = {'Accept':'multipart/related; type="application/dicom"; transfer-syntax=*', "Authorization":bearer_token}

response = client.get(url, headers=headers) #, verify=False)

Abrufen von Metadaten aller Instanzen in Serie

Diese Anforderung ruft die Metadaten für alle Instanzen innerhalb einer einzelnen Datenreihe ab.

Details:

  • Pfad:.. /studies/{study}/series/{series}/metadata
  • Methode: GET
  • Headers:
    • Annehmen: application/dicom+json
    • Autorisierung: Bearer $token"

Diese Reihe verfügt über zwei Instanzen (grün-quadratisch und rot-dreieck), sodass die Antwort für beide Instanzen zurückgegeben werden soll. Überprüfen Sie, ob die Antwort über einen Statuscode von OK verfügt und dass beide Instanzen Metadaten zurückgegeben werden.

url = f'{base_url}/studies/{study_uid}/series/{series_uid}/metadata'
headers = {'Accept':'application/dicom+json', "Authorization":bearer_token}

response = client.get(url, headers=headers) #, verify=False)

Abrufen einer einzelnen Instanz innerhalb einer Reihe einer Studie

Diese Anforderung ruft eine einzelne Instanz ab.

Details:

  • Pfad:.. /studies/{study}/series{series}/instances/{instance}
  • Methode: GET
  • Headers:
    • Akzeptieren: anwendung/dicom; transfer-syntax=*
    • Autorisierung: Bearer $token"

In diesem Codebeispiel sollte nur die Instanz rot-dreieck zurückgegeben werden. Überprüfen Sie, ob die Antwort über einen Statuscode von OK verfügt und dass die Instanz zurückgegeben wird.

url = f'{base_url}/studies/{study_uid}/series/{series_uid}/instances/{instance_uid}'
headers = {'Accept':'application/dicom; transfer-syntax=*', "Authorization":bearer_token}

response = client.get(url, headers=headers) #, verify=False)

Abrufen von Metadaten einer einzelnen Instanz innerhalb einer Reihe einer Studie

Diese Anforderung ruft die Metadaten für eine einzelne Instanz innerhalb einer einzelnen Studie und Datenreihe ab.

Details:

  • Pfad:.. /studies/{study}/series/{series}/instances/{instance}/metadata
  • Methode: GET
  • Headers:
    • Annehmen: application/dicom+json
    • Autorisierung: Bearer $token"

In diesem Codebeispiel sollten nur die Metadaten für das rote Dreieck der Instanz zurückgegeben werden. Überprüfen Sie, ob die Antwort über einen Statuscode von OK verfügt und dass die Metadaten zurückgegeben werden.

url = f'{base_url}/studies/{study_uid}/series/{series_uid}/instances/{instance_uid}/metadata'
headers = {'Accept':'application/dicom+json', "Authorization":bearer_token}

response = client.get(url, headers=headers) #, verify=False)

Abrufen eines oder mehrerer Frames aus einer einzelnen Instanz

Diese Anforderung ruft einen oder mehrere Frames aus einer einzelnen Instanz ab.

Details:

  • Pfad:.. /studies/{study}/series{series}/instances/{instance}/frames/1,2,3
  • Methode: GET
  • Headers:
    • Autorisierung: Bearer $token"
    • Accept: multipart/related; type="application/octet-stream"; transfer-syntax=1.2.840.10008.1.2.1 (Standard) oder
    • Accept: multipart/related; type="application/octet-stream"; transfer-syntax=* oder
    • Accept: multipart/related; type="application/octet-stream";

In diesem Codebeispiel sollte der einzige Frame aus dem roten Dreieck zurückgegeben werden. Überprüfen Sie, ob die Antwort über einen Statuscode von OK verfügt und dass der Frame zurückgegeben wird.

url = f'{base_url}/studies/{study_uid}/series/{series_uid}/instances/{instance_uid}/frames/1'
headers = {'Accept':'multipart/related; type="application/octet-stream"; transfer-syntax=*', "Authorization":bearer_token}

response = client.get(url, headers=headers) #, verify=False)

Abfrage DICOM (QIDO)

In den folgenden Beispielen suchen wir nach Elementen mit ihren eindeutigen Bezeichnern. Sie können auch nach anderen Attributen suchen, z. B. PatientName.

Weitere Informationen finden Sie im DICOM-Konformitätserklärungsdokument für unterstützte DICOM-Attribute.

Nach Studien suchen

Diese Anforderung sucht nach einer oder mehreren Studien nach DICOM-Attributen.

Details:

  • Pfad:.. /Studien? StudyInstanceUID={study}
  • Methode: GET
  • Headers:
    • Annehmen: application/dicom+json
    • Autorisierung: Bearer $token"

Überprüfen Sie, ob die Antwort eine Studie enthält und dass der Antwortcode OK ist.

url = f'{base_url}/studies'
headers = {'Accept':'application/dicom+json', "Authorization":bearer_token}
params = {'StudyInstanceUID':study_uid}

response = client.get(url, headers=headers, params=params) #, verify=False)

Nach Datenreihen suchen

Diese Anforderung sucht nach einer oder mehreren Datenreihen nach DICOM-Attributen.

Details:

  • Pfad:.. /series? SeriesInstanceUID={series}
  • Methode: GET
  • Headers:
    • Annehmen: application/dicom+json
    • Autorisierung: Bearer $token"

Überprüfen Sie, ob die Antwort eine Reihe enthält und dass der Antwortcode OK ist.

url = f'{base_url}/series'
headers = {'Accept':'application/dicom+json', "Authorization":bearer_token}
params = {'SeriesInstanceUID':series_uid}

response = client.get(url, headers=headers, params=params) #, verify=False)

Suchen nach Datenreihen innerhalb einer Studie

Diese Anforderung sucht nach einer oder mehreren Datenreihen innerhalb einer einzelnen Studie durch DICOM-Attribute.

Details:

  • Pfad:.. /studies/{study}/series? SeriesInstanceUID={series}
  • Methode: GET
  • Headers:
    • Annehmen: application/dicom+json
    • Autorisierung: Bearer $token"

Überprüfen Sie, ob die Antwort eine Reihe enthält und dass der Antwortcode OK ist.

url = f'{base_url}/studies/{study_uid}/series'
headers = {'Accept':'application/dicom+json', "Authorization":bearer_token}
params = {'SeriesInstanceUID':series_uid}

response = client.get(url, headers=headers, params=params) #, verify=False)

Suchen nach Instanzen

Diese Anforderung sucht nach einer oder mehreren Instanzen nach DICOM-Attributen.

Details:

  • Pfad:.. /instances? SOPInstanceUID={instance}
  • Methode: GET
  • Headers:
    • Annehmen: application/dicom+json
    • Autorisierung: Bearer $token"

Überprüfen Sie, ob die Antwort eine Instanz enthält und dass der Antwortcode OK ist.

url = f'{base_url}/instances'
headers = {'Accept':'application/dicom+json', "Authorization":bearer_token}
params = {'SOPInstanceUID':instance_uid}

response = client.get(url, headers=headers, params=params) #, verify=False)

Suchen nach Instanzen in einer Studie

Diese Anforderung sucht nach einer oder mehreren Instanzen innerhalb einer einzelnen Studie durch DICOM-Attribute.

Details:

  • Pfad:.. /studies/{study}/instances? SOPInstanceUID={instance}
  • Methode: GET
  • Headers:
    • Annehmen: application/dicom+json
    • Autorisierung: Bearer $token"

Überprüfen Sie, ob die Antwort eine Instanz enthält und dass der Antwortcode OK ist.

url = f'{base_url}/studies/{study_uid}/instances'
headers = {'Accept':'application/dicom+json', "Authorization":bearer_token}
params = {'SOPInstanceUID':instance_uid}

response = client.get(url, headers=headers, params=params) #, verify=False)

Suchen nach Instanzen in einer Studie und Reihe

Diese Anforderung sucht nach einer oder mehreren Instanzen innerhalb einer einzelnen Studie und einer einzelnen Datenreihe nach DICOM-Attributen.

Details:

  • Pfad:.. /studies/{study}/series/{series}/instances? SOPInstanceUID={instance}
  • Methode: GET
  • Headers:
    • Annehmen: application/dicom+json
    • Autorisierung: Bearer $token"

Überprüfen Sie, ob die Antwort eine Instanz enthält und dass der Antwortcode OK ist.

url = f'{base_url}/studies/{study_uid}/series/{series_uid}/instances'
headers = {'Accept':'application/dicom+json'}
params = {'SOPInstanceUID':instance_uid}

response = client.get(url, headers=headers, params=params) #, verify=False)

DICOM löschen

Hinweis

"Delete" ist nicht Teil des DICOM-Standards, aber es wurde bequem hinzugefügt.

Ein 204-Antwortcode wird zurückgegeben, wenn der Löschvorgang erfolgreich ist. Ein Antwortcode von 404 wird zurückgegeben, wenn das Element nie vorhanden ist oder bereits gelöscht wurde.

Löschen einer bestimmten Instanz innerhalb einer Studie und Reihe

Diese Anforderung löscht eine einzelne Instanz innerhalb einer einzelnen Studie und einer einzelnen Datenreihe.

Details:

  • Pfad:.. /studies/{study}/series/{series}/instances/{instance}
  • Methode: DELETE
  • Headers:
    • Autorisierung: Bearer $token

Diese Anforderung löscht die Rotdreieckinstanz vom Server. Wenn dies erfolgreich ist, enthält der Antwortstatuscode keinen Inhalt.

headers = {"Authorization":bearer_token}
url = f'{base_url}/studies/{study_uid}/series/{series_uid}/instances/{instance_uid}'
response = client.delete(url, headers=headers) 

Löschen einer bestimmten Datenreihe in einer Studie

Diese Anforderung löscht eine einzelne Datenreihe (und alle untergeordneten Instanzen) innerhalb einer einzigen Studie.

Details:

  • Pfad:.. /studies/{study}/series/{series}
  • Methode: DELETE
  • Headers:
    • Autorisierung: Bearer $token

In diesem Codebeispiel wird die grüne quadratische Instanz (es ist das einzige Element in der Datenreihe) vom Server gelöscht. Wenn dies erfolgreich ist, wird der Antwortstatuscode nicht gelöscht.

headers = {"Authorization":bearer_token}
url = f'{base_url}/studies/{study_uid}/series/{series_uid}'
response = client.delete(url, headers=headers) 

Löschen einer bestimmten Studie

Diese Anforderung löscht eine einzelne Studie (und alle untergeordneten Reihen und Instanzen).

Details:

  • Pfad:.. /studies/{study}
  • Methode: DELETE
  • Headers:
    • Autorisierung: Bearer $token
headers = {"Authorization":bearer_token}
url = f'{base_url}/studies/{study_uid}'
response = client.delete(url, headers=headers) 

Nächste Schritte

Informationen zum DICOM-Dienst finden Sie unter