Verwenden von DICOMweb-Standard-APIs mit Python

In diesem Artikel wird gezeigt, wie Sie mit dem DICOMweb-Dienst mit Python- und Beispiel-DCM-DICOM-Dateien® arbeiten.

Verwenden Sie die folgenden Beispieldateien:

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

Der Dateiname, „studyUID“, „seriesUID“ und „instanceUID“ der DICOM-Beispieldateien sind:

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 green-square und red-triangle Teil derselben Datenreihe, während sich blue-circle in einer separaten Reihe befindet.

Voraussetzungen

Um die DICOMweb-Standard-APIs zu verwenden, müssen Sie über eine Instanz des DICOM-Diensts verfügen. Weitere Informationen finden Sie unter Bereitstellen des DICOM-Diensts mithilfe des Azure-Portals.

Rufen Sie nach der Bereitstellung einer Instanz des DICOM-Diensts 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 haben, finden Sie weitere Informationen unter Abrufen des Zugriffstokens für den DICOM-Dienst mit Azure CLI.

Für diesen Code greifen Sie auf einen Azure-Dienst in 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 multipart/related-HTTP-Anforderungen in Kombination mit DICOM-spezifischen Accept-Headern. Entwickler, die mit anderen REST-basierten APIs vertraut sind, finden die Arbeit mit dem DICOMweb Standard häufig unpraktisch. Nach der Inbetriebnahme ist es aber einfach zu verwenden. Es braucht nur ein wenig Gewöhnung, um loszulegen.

Importieren der Python-Bibliotheken

Importieren Sie zunächst die erforderlichen Python-Bibliotheken.

Wir implementieren dieses Beispiel mithilfe der synchronen requests-Bibliothek. Für asynchrone Unterstützung sollten Sie httpx oder eine andere asynchrone Bibliothek verwenden. Darüber hinaus importieren wir zwei unterstützende Funktionen aus urllib3, um die Arbeit mit multipart/related-Anforderungen zu unterstützen.

Darüber hinaus importieren wir DefaultAzureCredential für das Anmelden bei Azure und das Abrufen eines Tokens.

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

Konfigurieren benutzerdefinierter Variablen

Ersetzen Sie alle Variablenwerte in geschweiften Klammern ({}) durch Ihre eigenen Werte. Überprüfen Sie außerdem, ob sämtliche konstruierten Variablen korrekt sind. Beispielsweise wurde base_url mithilfe der Dienst-URL konstruiert und dann mithilfe 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 die DICOM-Dienstdokumentation besuchen, um weitere Informationen zur Versionsverwaltung zu erhalten. Wenn Sie eine benutzerdefinierte URL verwenden, müssen Sie diesen Wert mit Ihrem eigenen ü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, verschiedene Möglichkeiten zum Abrufen von Token für die Anmeldung beim Dienst zu verwenden. Verwenden Sie in diesem Beispiel die Anmeldeinformation AzureCliCredential, um ein Token für die Anmeldung beim Dienst abzurufen. Es gibt andere Anmeldeinformationsanbieter wie ManagedIdentityCredential und EnvironmentCredential, die Sie ebenfalls verwenden können. Um AzureCliCredential zu verwenden, müssen Sie sich über die CLI bei Azure anmelden, bevor Sie diesen Code ausführen. Weitere Informationen finden Sie unter Abrufen des Zugriffstokens für den DICOM-Dienst mit Azure CLI. Alternativ können Sie das Token, das beim Anmelden von der CLI abgerufen wurde, kopieren und einfügen.

Hinweis

DefaultAzureCredential gibt mehrere verschiedene Anmeldeinformationsobjekte zurück. Wir verweisen auf die AzureCliCredential-Anmeldeinformation, dem fünften Element der zurückgegebenen Sammlung. Dies ist möglicherweise nicht konsistent. Wenn das der Fall ist, heben Sie die Auskommentierung in der Zeile print(credential.credential) auf. Dadurch werden alle Elemente aufgeführt. Suchen Sie den richtigen Index. Denken Sie dabei daran, dass Python nullbasierte Indizierung verwendet.

Hinweis

Wenn Sie sich nicht mit der CLI bei Azure angemeldet haben, schlägt dieser Vorgang fehl. Sie müssen von der CLI bei Azure angemeldet worden sein, damit dieser Vorgang 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 von multipart\related

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

encode_multipart_related ruft eine Reihe von Feldern (im Fall von DICOM sind diese Bibliotheken im Allgemeinen Part 10-DAM-Dateien) und eine optionale benutzerdefinierte Grenze ab. Der Vorgang gibt den vollständigen Text zusammen mit dem content_type zurück, den er verwenden 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, die als client bezeichnet wird. Sie wird für die Kommunikation mit dem DICOM-Dienst verwendet.

client = requests.session()

Überprüfen, ob die Authentifizierung richtig konfiguriert ist

Rufen Sie den Change Feed-API-Endpunkt auf. Er gibt den Wert 200 zurück, 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 beibehaltene DICOM-Dateien hervorgehoben.

Speichern von Instanzen mit multipart/related

In diesem Beispiel wird veranschaulicht, wie eine einzelne DICOM-Datei hochgeladen wird. Außerdem wird etwas Python-Code verwendet, um die DICOM-Datei (als Bytes) im Voraus laden in den Arbeitsspeicher zu laden. Wenn ein Array von Dateien an den Feldparameter von encode_multipart_relatedübergeben wird, können mehrere Dateien in einem einzelnen POST hochgeladen werden. Dies wird manchmal genutzt, um mehrere Instanzen innerhalb einer vollständigen Serie oder Studie hochzuladen.

Details:

  • Path: ../studies

  • Methode: POST

  • Headers:

    • Accept: application/dicom+json
    • Content-Type: multipart/related; type="application/dicom"
    • Authorization: Bearer $token"
  • Textkörper:

    • Content-Type: application/dicom für jede hochgeladene Datei, durch einen Trennwert getrennt

Einige Programmiersprachen und -tools verhalten sich anders. Bei manchen müssen Sie beispielsweise ihre eigene Grenze definieren. Für diese Sprachen und Tools müssen Sie möglicherweise einen leicht geänderten Content-Type-Header verwenden. Diese Sprachen und Tools können erfolgreich verwendet werden.

  • Content-Type: multipart/related; type="application/dicom"; boundary=ABCD1234
  • Content-Type: multipart/related; boundary=ABCD1234
  • Content-Type: 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 Sie mehrere DICOM-Dateien in die angegebene Studie hochladen können. Dabei wird etwas Python-Code verwendet, um die DICOM-Datei (als Bytes) im Voraus in den Arbeitsspeicher zu laden.

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

Details:

  • Path: ../studies/{study}
  • Methode: POST
  • Headers:
    • Accept: application/dicom+json
    • Content-Type: multipart/related; type="application/dicom"
    • Authorization: Bearer $token"
  • Hauptteil:
    • Content-Type: application/dicom für jede hochgeladene Datei, durch einen Trennwert getrennt

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 dem Standard entsprechend)

Das folgende Codebeispiel veranschaulicht, wie eine einzelne DICOM-Datei hochgeladen wird. Es handelt sich um einen nicht dem Standard entsprechenden API-Endpunkt, der das Hochladen einer einzelnen Datei in Form binärer Bytes vereinfacht, die im Textkörper einer Anforderung gesendet werden.

Details:

  • Path: ../studies
  • Methode: POST
  • Headers:
    • Accept: application/dicom+json
    • Content-Type: application/dicom
    • Authorization: Bearer $token"
  • Hauptteil:
    • Enthält eine einzelne DICOM-Datei in Form binärer 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 einer DICOM-Instanz (WADO)

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

Abrufen aller Instanzen innerhalb einer Studie

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

Details:

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

Alle drei dcm-Dateien, die wir zuvor hochgeladen haben, gehören zu derselben Studie, daher sollte die Antwort alle drei Instanzen wiedergeben. Überprüfen Sie, ob die Antwort über den Statuscode „OK“ verfügt und 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 pydicom lesen 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 aller Instanzen innerhalb einer einzelnen Studie ab.

Details:

  • Path: ../studies/{study}/metadata
  • Methode: GET
  • Headers:
    • Accept: application/dicom+json
    • Authorization: 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 wiedergeben sollte. Überprüfen Sie, ob die Antwort über den Statuscode von „OK“ verfügt und 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 innerhalb einer einzelnen Datenreihe ab.

Details:

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

Diese Datenreihe verfügt über zwei Instanzen (green-square und red-triangle), sodass die Antwort beide Instanzen zurückgeben sollte. Überprüfen Sie, ob die Antwort über den Statuscode „OK“ verfügt und 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 der Datenreihe

Diese Anforderung ruft die Metadaten aller Instanzen innerhalb einer einzelnen Datenreihe ab.

Details:

  • Path: ../studies/{study}/series/{series}/metadata
  • Methode: GET
  • Headers:
    • Accept: application/dicom+json
    • Authorization: Bearer $token"

Diese Datenreihe verfügt über zwei Instanzen (green-square und red-triangle), sodass die Antwort beide Instanzen zurückgeben sollte. Überprüfen Sie, ob die Antwort über den Statuscode „OK“ verfügt und die Metadaten beider Instanzen 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 Datenreihe einer Studie

Diese Anforderung ruft eine einzelne Instanz ab.

Details:

  • Path: ../studies/{study}/series{series}/instances/{instance}
  • Methode: GET
  • Headers:
    • Accept: application/dicom; transfer-syntax=*
    • Authorization: Bearer $token"

Dieses Codebeispiel sollte nur die red-triangle-Instanz zurückgeben. Überprüfen Sie, ob die Antwort über den Statuscode „OK“ verfügt und 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 Datenreihe einer Studie

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

Details:

  • Path: ../studies/{study}/series/{series}/instances/{instance}/metadata
  • Methode: GET
  • Headers:
    • Accept: application/dicom+json
    • Authorization: Bearer $token"

Dieses Codebeispiel sollte nur die Metadaten der red-triangle-Instanz wiedergeben. Überprüfen Sie, ob die Antwort über den Statuscode „OK“ verfügt und 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:

  • Path: ../studies/{study}/series{series}/instances/{instance}/frames/1,2,3
  • Methode: GET
  • Headers:
    • Authorization: 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";

Dieses Codebeispiel sollte den einzigen Frame aus der red-triangle-Instanz wiedergeben. Überprüfen Sie, ob die Antwort über den Statuscode von „OK“ verfügt und 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)

Abfragen von DICOM (QIDO)

In den folgenden Beispielen suchen wir nach Elementen anhand ihrer eindeutigen Bezeichner. Sie können auch nach anderen Attributen suchen, z. B. PatientName.

Informationen zu unterstützten DICOM-Attributen finden Sie in der Dokumentation DICOM-Konformitätserklärung.

Suchen nach Studien

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

Details:

  • Path: ../studies?StudyInstanceUID={study}
  • Methode: GET
  • Headers:
    • Accept: application/dicom+json
    • Authorization: Bearer $token"

Überprüfen Sie, ob die Antwort eine Studie enthält und über den Antwortcode „OK“ verfügt.

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)

Suchen nach Datenreihen

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

Details:

  • Path: ../series?SeriesInstanceUID={series}
  • Methode: GET
  • Headers:
    • Accept: application/dicom+json
    • Authorization: Bearer $token"

Überprüfen Sie, ob die Antwort eine Datenreihe enthält und über den Antwortcode „OK“ verfügt.

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 mithilfe von DICOM-Attributen nach einer oder mehreren Datenreihen innerhalb einer einzelnen Studie.

Details:

  • Path: ../studies/{study}/series?SeriesInstanceUID={series}
  • Methode: GET
  • Headers:
    • Accept: application/dicom+json
    • Authorization: Bearer $token"

Überprüfen Sie, ob die Antwort eine Datenreihe enthält und über den Antwortcode „OK“ verfügt.

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 mithilfe von DICOM-Attributen nach einer oder mehreren Instanzen.

Details:

  • Path: ../instances?SOPInstanceUID={instance}
  • Methode: GET
  • Headers:
    • Accept: application/dicom+json
    • Authorization: Bearer $token"

Überprüften Sie, ob die Antwort eine Instanz enthält und über den Antwortcode „OK“ verfügt.

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 innerhalb einer Studie

Diese Anforderung sucht mithilfe von DICOM-Attributen nach einer oder mehreren Instanzen innerhalb einer einzelnen Studie.

Details:

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

Überprüften Sie, ob die Antwort eine Instanz enthält und über den Antwortcode „OK“ verfügt.

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 innerhalb einer Studie und Datenreihe

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

Details:

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

Überprüften Sie, ob die Antwort eine Instanz enthält und über den Antwortcode „OK“ verfügt.

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)

Löschen von DICOM

Hinweis

Das Löschen ist nicht Teil des DICOM-Standards, wurde jedoch hinzugefügt, um Ihnen die Arbeit zu erleichtern.

Ein 204-Antwortcode wird zurückgegeben, wenn der Löschvorgang erfolgreich ist. Ein 404-Antwortcode wird zurückgegeben, wenn die Elemente nie vorhanden waren oder bereits gelöscht wurden.

Löschen einer bestimmten Instanz innerhalb einer Studie und Datenreihe

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

Details:

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

Durch diese Anforderung wird die red-triangle-Instanz vom Server gelöscht. 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 innerhalb einer Studie

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

Details:

  • Path: ../studies/{study}/series/{series}
  • Methode: DELETE
  • Headers:
    • Authorization: Bearer $token

Diese Antwort löscht die green-square-Instanz (es ist das einzige verbliebene Element in der Datenreihe) vom Server. Wenn dies erfolgreich ist, löscht der Antwortstatuscode keinen Inhalt.

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

Löschen einer bestimmte Studie

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

Details:

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

Hinweis

DICOM® ist die eingetragene Marke der National Electrical Manufacturers Association für ihre Veröffentlichungen von Standards über die digitale Kommunikation medizinischer Informationen.