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:
- Melden Sie sich beim Azure-Portal an.
- Suchen Sie Zuletzt verwendete Ressourcen und wählen Sie Ihre DICOM-Dienstinstanz aus.
- Kopieren Sie die Dienst-URL Ihres DICOM-Diensts.
- 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 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. Das ist möglicherweise nicht immer der Fall. Heben Sie andernfalls die Auskommentierung 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 Inhaltstyp (content_type) zurück, der 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, 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, und es wird Python verwendet, um die DICOM-Datei im Voraus als Bytes in den Arbeitsspeicher zu laden. Wenn ein Array von Dateien an den Feldparameter encode_multipart_related
übergeben wird, können mehrere Dateien in einem einzelnen POST-Vorgang 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 Python verwendet, um die DICOM-Datei im Voraus als Bytes in den Arbeitsspeicher zu laden.
Wenn ein Array von Dateien an den Feldparameter encode_multipart_related
übergeben wird, können mehrere Dateien in einem einzelnen POST-Vorgang 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 zuvor hochgeladen wurden, gehören zur gleichen Studie. Daher sollte die Antwort alle drei Instanzen zurückgeben. Ü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 in einer Schleife durchlaufen und die Bytes in eine Datei konvertieren, die von pydicom
gelesen werden 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:
- 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. Vergewissern Sie sich, dass der Statuscode der Antwort „OK“ lautet und dass 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 einzigen 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) oderAccept: multipart/related; type="application/octet-stream"; transfer-syntax=*
oderAccept: 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 DICOM-Konformitätserklärung.
Suchen Sie 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 Reihe
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. Ist der Vorgang erfolgreich, hat 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 Reihe 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
Durch dieses Codebeispiel wird die Instanz des grünen Vierecks (das einzige verbleibende Element in der Datenreihe) vom Server gelöscht. Ist der Vorgang erfolgreich, 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 bestimmten 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 des National Electrical Manufacturers Association für seine Standards-Publikationen über die digitale Kommunikation medizinischer Informationen.