Udostępnij za pośrednictwem


Używanie interfejsów API DICOMweb Standard z językiem Python

W tym artykule pokazano, jak pracować z usługą DICOMweb przy użyciu języka Python i przykładowych plików DICOM® .dcm.

Użyj tych przykładowych plików:

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

Nazwa pliku, studyUID, seriesUID i instanceUID przykładowych plików DICOM to:

Plik Identyfikator UID badania 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

Uwaga

Każdy z tych plików reprezentuje pojedyncze wystąpienie i jest częścią tego samego badania. Ponadto zielony kwadrat i czerwony trójkąt są częścią tej samej serii, podczas gdy niebieski okrąg znajduje się w oddzielnej serii.

Wymagania wstępne

Aby korzystać z interfejsów API DICOMweb w warstwie Standardowa, musisz mieć wdrożone wystąpienie usługi DICOM. Aby uzyskać więcej informacji, zobacz Wdrażanie usługi DICOM przy użyciu witryny Azure Portal.

Po wdrożeniu wystąpienia usługi DICOM pobierz adres URL usługi App Service:

  1. Zaloguj się w witrynie Azure Portal.
  2. Wyszukaj ostatnie zasoby i wybierz wystąpienie usługi DICOM.
  3. Skopiuj adres URL usługi DICOM.
  4. Jeśli nie masz tokenu, zobacz Uzyskiwanie tokenu dostępu dla usługi DICOM przy użyciu interfejsu wiersza polecenia platformy Azure.

W tym kodzie uzyskujesz dostęp do publicznej usługi platformy Azure w wersji zapoznawczej. Ważne jest, aby nie przekazywać żadnych prywatnych informacji o zdrowiu (PHI).

Praca z usługą DICOM

DiCOMweb Standard sprawia, że duże użycie żądań HTTP w połączeniu multipart/related z nagłówkami akceptowania specyficznymi dla diCOM. Deweloperzy zaznajomieni z innymi interfejsami API opartymi na protokole REST często pracują ze standardowym standardem DICOMweb. Jednak po jego uruchomieniu można łatwo użyć. Rozpoczęcie pracy wymaga tylko nieco znajomości.

Importowanie bibliotek języka Python

Najpierw zaimportuj niezbędne biblioteki języka Python.

Implementujemy ten przykład przy użyciu biblioteki synchronicznej requests . W przypadku obsługi asynchronicznej rozważ użycie httpx lub innej biblioteki asynchronicznej. Ponadto importujemy dwie funkcje pomocnicze z urllib3 usługi , aby obsługiwać pracę z żądaniami multipart/related .

Ponadto importujemy DefaultAzureCredential dane, aby zalogować się do platformy Azure i uzyskać token.

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

Konfigurowanie zmiennych zdefiniowanych przez użytkownika

Zastąp wszystkie wartości zmiennych opakowane w { } własnymi wartościami. Ponadto sprawdź, czy wszystkie skonstruowane zmienne są poprawne. Na przykład jest tworzony przy użyciu adresu URL usługi, base_url a następnie dołączany do używanej wersji interfejsu API REST. Adres URL usługi DICOM to: https://<workspacename-dicomservicename>.dicom.azurehealthcareapis.com. Możesz użyć witryny Azure Portal, aby przejść do usługi DICOM i uzyskać adres URL usługi. Więcej informacji na temat przechowywania wersji można również znaleźć w dokumentacji dotyczącej wersji interfejsu API dla usługi DICOM. Jeśli używasz niestandardowego adresu URL, musisz zastąpić ją własną wartością.

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

Uwierzytelnianie na platformie Azure i uzyskiwanie tokenu

DefaultAzureCredential umożliwia nam korzystanie z różnych sposobów uzyskiwania tokenów w celu zalogowania się do usługi. W tym przykładzie użyj elementu , AzureCliCredential aby uzyskać token w celu zalogowania się do usługi. Istnieją inni dostawcy poświadczeń, tacy jak ManagedIdentityCredential i EnvironmentCredential , których można użyć. Aby użyć obiektu AzureCliCredential, musisz zalogować się do platformy Azure z poziomu interfejsu wiersza polecenia przed uruchomieniem tego kodu. Aby uzyskać więcej informacji, zobacz Uzyskiwanie tokenu dostępu dla usługi DICOM przy użyciu interfejsu wiersza polecenia platformy Azure. Alternatywnie skopiuj i wklej token pobrany podczas logowania z interfejsu wiersza polecenia.

Uwaga

DefaultAzureCredential Zwraca kilka różnych obiektów poświadczeń. Odwołujemy się do AzureCliCredential elementu 5 w zwróconej kolekcji. Może to nie zawsze być możliwe. Jeśli tak nie jest, usuń komentarz z print(credential.credential) wiersza. Spowoduje to wyświetlenie listy wszystkich elementów. Znajdź prawidłowy indeks, przypominając, że język Python używa indeksowania zerowego.

Uwaga

Jeśli nie zalogowano się do platformy Azure przy użyciu interfejsu wiersza polecenia, zakończy się to niepowodzeniem. Aby to zadziałało, musisz zalogować się na platformie Azure z poziomu interfejsu wiersza polecenia.

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}'

Tworzenie metod pomocniczych do obsługi multipart\related

Biblioteki Requests (i większość bibliotek języka Python) nie działają multipart\related w sposób obsługujący diCOMweb. Ze względu na te biblioteki musimy dodać kilka metod do obsługi pracy z plikami DICOM.

encode_multipart_related pobiera zestaw pól (w przypadku DICOM, te biblioteki są zazwyczaj część 10 plików dam) i opcjonalną granicą zdefiniowaną przez użytkownika. Zwraca zarówno całe ciało, jak i content_type, które można użyć.

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

Tworzenie requests sesji

Tworzy sesję requests o nazwie client , która jest używana do komunikowania się z usługą DICOM.

client = requests.session()

Sprawdź, czy uwierzytelnianie jest poprawnie skonfigurowane

Wywołaj punkt końcowy interfejsu API zmiany, który zwraca wartość 200, jeśli uwierzytelnianie zakończyło się pomyślnie.

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!')

Przekazywanie wystąpień DICOM (STOW)

W poniższych przykładach wyróżniono utrwalanie plików DICOM.

Przechowywanie wystąpień przy użyciu multipart/related

W tym przykładzie pokazano, jak przekazać pojedynczy plik DICOM i używa języka Python do wstępnego ładowania pliku DICOM do pamięci jako bajtów. Po przekazaniu tablicy plików do parametru encode_multipart_relatedfields można przekazać wiele plików w jednym wpisie POST. Czasami służy do przekazywania kilku wystąpień w pełnej serii lub badaniu.

Szczegóły:

  • Ścieżka:.. /studia

  • Metoda: POST

  • Nagłówki:

    • Akceptuj: application/dicom+json
    • Typ zawartości: wieloczęściowy/powiązany; type="application/dicom"
    • Autoryzacja: element nośny $token"
  • Treść:

    • Typ zawartości: aplikacja/dicom dla każdego przekazanego pliku, oddzielone wartością granicy

Niektóre języki programowania i narzędzia zachowują się inaczej. Na przykład niektóre wymagają zdefiniowania własnej granicy. W przypadku tych języków i narzędzi może być konieczne użycie nieco zmodyfikowanego nagłówka Content-Type. Te języki i narzędzia mogą być używane pomyślnie.

  • Typ zawartości: wieloczęściowy/powiązany; type="application/dicom"; boundary=ABCD1234
  • Typ zawartości: wieloczęściowy/powiązany; boundary=ABCD1234
  • Typ zawartości: wieloczęściowy/powiązany
#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)

Przechowywanie wystąpień dla określonego badania

W tym przykładzie pokazano, jak przekazać wiele plików DICOM do określonego badania. Używa języka Python do wstępnego ładowania pliku DICOM do pamięci jako bajtów.

Po przekazaniu tablicy plików do parametru encode_multipart_relatedfields można przekazać wiele plików w jednym wpisie POST. Czasami służy do przekazywania pełnej serii lub badania.

Szczegóły:

  • Ścieżka:.. /studies/{study}
  • Metoda: POST
  • Nagłówki:
    • Akceptuj: application/dicom+json
    • Typ zawartości: wieloczęściowy/powiązany; type="application/dicom"
    • Autoryzacja: element nośny $token"
  • Ciało:
    • Typ zawartości: aplikacja/dicom dla każdego przekazanego pliku, oddzielone wartością granicy

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)

Przechowywanie pojedynczego wystąpienia (niestandardowe)

W poniższym przykładzie kodu pokazano, jak przekazać pojedynczy plik DICOM. Jest to niestandardowy punkt końcowy interfejsu API, który upraszcza przekazywanie pojedynczego pliku jako bajtów binarnych wysyłanych w treści żądania

Szczegóły:

  • Ścieżka:.. /studia
  • Metoda: POST
  • Nagłówki:
    • Akceptuj: application/dicom+json
    • Typ zawartości: application/dicom
    • Autoryzacja: element nośny $token"
  • Ciało:
    • Zawiera pojedynczy plik DICOM jako bajty binarne.
#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

Pobieranie wystąpień DICOM (WADO)

W poniższych przykładach wyróżniono pobieranie wystąpień DICOM.

Pobieranie wszystkich wystąpień w ramach badania

Ten przykład pobiera wszystkie wystąpienia w ramach pojedynczego badania.

Szczegóły:

  • Ścieżka:.. /studies/{study}
  • Metoda: GET
  • Nagłówki:
    • Zaakceptuj: wieloczęściowy/powiązany; type="application/dicom"; transfer-syntax=*
    • Autoryzacja: element nośny $token"

Wszystkie trzy pliki dcm, które zostały przekazane wcześniej, są częścią tego samego badania, więc odpowiedź powinna zwrócić wszystkie trzy wystąpienia. Sprawdź, czy odpowiedź ma kod stanu OK i czy zwracane są wszystkie trzy wystąpienia.

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)

Korzystanie z pobranych wystąpień

Wystąpienia są pobierane jako bajty binarne. Możesz wykonać pętlę przez zwrócone elementy i przekonwertować bajty na plik, który pydicom można odczytać w następujący sposób.

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)

Pobieranie metadanych wszystkich wystąpień w badaniu

To żądanie pobiera metadane dla wszystkich wystąpień w ramach pojedynczego badania.

Szczegóły:

  • Ścieżka:.. /studies/{study}/metadata
  • Metoda: GET
  • Nagłówki:
    • Akceptuj: application/dicom+json
    • Autoryzacja: element nośny $token"

Wszystkie trzy .dcm przekazane wcześniej pliki są częścią tego samego badania, więc odpowiedź powinna zwrócić metadane dla wszystkich trzech wystąpień. Sprawdź, czy odpowiedź ma kod stanu OK i czy wszystkie metadane są zwracane.

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

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

Pobieranie wszystkich wystąpień w serii

To żądanie pobiera wszystkie wystąpienia w ramach jednej serii.

Szczegóły:

  • Ścieżka:.. /studies/{study}/series/{series}
  • Metoda: GET
  • Nagłówki:
    • Zaakceptuj: wieloczęściowy/powiązany; type="application/dicom"; transfer-syntax=*
    • Autoryzacja: element nośny $token"

Ta seria ma dwa wystąpienia (zielony kwadrat i czerwony trójkąt), więc odpowiedź powinna zwrócić oba wystąpienia. Sprawdź, czy odpowiedź ma kod stanu OK i czy oba wystąpienia są zwracane.

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)

Pobieranie metadanych wszystkich wystąpień w serii

To żądanie pobiera metadane dla wszystkich wystąpień w ramach jednej serii.

Szczegóły:

  • Ścieżka:.. /studies/{study}/series/{series}/metadata
  • Metoda: GET
  • Nagłówki:
    • Akceptuj: application/dicom+json
    • Autoryzacja: element nośny $token"

Ta seria ma dwa wystąpienia (zielony kwadrat i czerwony trójkąt), więc odpowiedź powinna być zwracana dla obu wystąpień. Sprawdź, czy odpowiedź ma kod stanu OK i czy są zwracane metadane obu wystąpień.

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)

Pobieranie pojedynczego wystąpienia w ramach serii badania

To żądanie pobiera pojedyncze wystąpienie.

Szczegóły:

  • Ścieżka:.. /studies/{study}/series{series}/instances/{instance}
  • Metoda: GET
  • Nagłówki:
    • Zaakceptuj: application/dicom; transfer-syntax=*
    • Autoryzacja: element nośny $token"

Ten przykładowy kod powinien zwracać tylko czerwone trójkąty wystąpienia. Sprawdź, czy odpowiedź ma kod stanu OK i czy wystąpienie jest zwracane.

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)

Pobieranie metadanych pojedynczego wystąpienia w ramach serii badania

To żądanie pobiera metadane dla pojedynczego wystąpienia w ramach pojedynczego badania i serii.

Szczegóły:

  • Ścieżka:.. /studies/{study}/series/{series}/instances/{instance}/metadata
  • Metoda: GET
  • Nagłówki:
    • Akceptuj: application/dicom+json
    • Autoryzacja: element nośny $token"

Ten przykładowy kod powinien zwracać tylko metadane dla wystąpienia czerwonego trójkąta. Sprawdź, czy odpowiedź ma kod stanu OK i czy metadane są zwracane.

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)

Pobieranie co najmniej jednej ramki z jednego wystąpienia

To żądanie pobiera jedną lub więcej ramek z jednego wystąpienia.

Szczegóły:

  • Ścieżka:.. /studies/{study}/series{series}/instances/{instance}/frame/1,2,3
  • Metoda: GET
  • Nagłówki:
    • Autoryzacja: element nośny $token"
    • Accept: multipart/related; type="application/octet-stream"; transfer-syntax=1.2.840.10008.1.2.1 (Wartość domyślna) lub
    • Accept: multipart/related; type="application/octet-stream"; transfer-syntax=* lub
    • Accept: multipart/related; type="application/octet-stream";

Ten przykładowy kod powinien zwrócić jedyną ramkę z czerwonego trójkąta. Sprawdź, czy odpowiedź ma kod stanu OK i czy ramka jest zwracana.

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)

Zapytanie DICOM (QIDO)

W poniższych przykładach wyszukujemy elementy przy użyciu ich unikatowych identyfikatorów. Możesz również wyszukać inne atrybuty, takie jak PatientName.

Zapoznaj się z instrukcją zgodności diCOM, aby uzyskać informacje o obsługiwanych atrybutach DICOM.

Wyszukiwanie badań

To żądanie wyszukuje co najmniej jedno badanie według atrybutów DICOM.

Szczegóły:

  • Ścieżka:.. /studia? StudyInstanceUID={study}
  • Metoda: GET
  • Nagłówki:
    • Akceptuj: application/dicom+json
    • Autoryzacja: element nośny $token"

Sprawdź, czy odpowiedź zawiera jedno badanie i czy kod odpowiedzi jest ok.

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)

Wyszukiwanie serii

To żądanie wyszukuje co najmniej jedną serię według atrybutów DICOM.

Szczegóły:

  • Ścieżka:.. /seria? SeriesInstanceUID={series}
  • Metoda: GET
  • Nagłówki:
    • Akceptuj: application/dicom+json
    • Autoryzacja: element nośny $token"

Sprawdź, czy odpowiedź zawiera jedną serię i czy kod odpowiedzi jest ok.

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)

Wyszukiwanie serii w ramach badania

To żądanie wyszukuje co najmniej jedną serię w ramach jednego badania według atrybutów DICOM.

Szczegóły:

  • Ścieżka:.. /studies/{study}/series? SeriesInstanceUID={series}
  • Metoda: GET
  • Nagłówki:
    • Akceptuj: application/dicom+json
    • Autoryzacja: element nośny $token"

Sprawdź, czy odpowiedź zawiera jedną serię i czy kod odpowiedzi jest ok.

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)

Wyszukiwanie wystąpień

To żądanie wyszukuje co najmniej jedno wystąpienie według atrybutów DICOM.

Szczegóły:

  • Ścieżka:.. /Wystąpień? SOPInstanceUID={instance}
  • Metoda: GET
  • Nagłówki:
    • Akceptuj: application/dicom+json
    • Autoryzacja: element nośny $token"

Sprawdź, czy odpowiedź zawiera jedno wystąpienie i czy kod odpowiedzi jest ok.

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)

Wyszukiwanie wystąpień w badaniu

To żądanie wyszukuje co najmniej jedno wystąpienie w ramach jednego badania według atrybutów DICOM.

Szczegóły:

  • Ścieżka:.. /studies/{study}/instances? SOPInstanceUID={instance}
  • Metoda: GET
  • Nagłówki:
    • Akceptuj: application/dicom+json
    • Autoryzacja: element nośny $token"

Sprawdź, czy odpowiedź zawiera jedno wystąpienie i czy kod odpowiedzi jest ok.

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)

Wyszukiwanie wystąpień w ramach badania i serii

To żądanie wyszukuje co najmniej jedno wystąpienie w ramach jednego badania i pojedynczej serii według atrybutów DICOM.

Szczegóły:

  • Ścieżka:.. /studies/{study}/series/{series}/instances? SOPInstanceUID={instance}
  • Metoda: GET
  • Nagłówki:
    • Akceptuj: application/dicom+json
    • Autoryzacja: element nośny $token"

Sprawdź, czy odpowiedź zawiera jedno wystąpienie i czy kod odpowiedzi jest ok.

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)

Usuwanie narzędzia DICOM

Uwaga

Usuwanie nie jest częścią standardu DICOM, ale zostało dodane dla wygody.

Po pomyślnym usunięciu zostanie zwrócony kod odpowiedzi 204. Kod odpowiedzi 404 jest zwracany, jeśli elementy nigdy nie istniały lub zostały już usunięte.

Usuwanie określonego wystąpienia w ramach badania i serii

To żądanie usuwa pojedyncze wystąpienie w ramach pojedynczej serii badania i pojedynczej serii.

Szczegóły:

  • Ścieżka:.. /studies/{study}/series/{series}/instances/{instance}
  • Metoda: DELETE
  • Nagłówki:
    • Autoryzacja: $token elementu nośnego

To żądanie usuwa wystąpienie czerwonego trójkąta z serwera. Jeśli operacja powiedzie się, kod stanu odpowiedzi nie zawiera zawartości.

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

Usuwanie określonej serii w ramach badania

To żądanie usuwa pojedynczą serię (i wszystkie wystąpienia podrzędne) w ramach pojedynczego badania.

Szczegóły:

  • Ścieżka:.. /studies/{study}/series/{series}
  • Metoda: DELETE
  • Nagłówki:
    • Autoryzacja: $token elementu nośnego

Ten przykład kodu usuwa wystąpienie green-square z serwera (jest to jedyny element pozostawiony w serii). W przypadku powodzenia kod stanu odpowiedzi nie usuwa zawartości.

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

Usuwanie określonego badania

To żądanie usuwa pojedyncze badanie (oraz wszystkie podrzędne serie i wystąpienia).

Szczegóły:

  • Ścieżka:.. /studies/{study}
  • Metoda: DELETE
  • Nagłówki:
    • Autoryzacja: $token elementu nośnego
headers = {"Authorization":bearer_token}
url = f'{base_url}/studies/{study_uid}'
response = client.delete(url, headers=headers) 

Uwaga

DICOM® jest zastrzeżonym znakiem towarowym National Electrical Manufacturers Association for its Standards publikacji odnoszących się do cyfrowej komunikacji informacji medycznych.