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:
- Zaloguj się w witrynie Azure Portal.
- Wyszukaj ostatnie zasoby i wybierz wystąpienie usługi DICOM.
- Skopiuj adres URL usługi DICOM.
- 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_related
fields 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_related
fields 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) lubAccept: multipart/related; type="application/octet-stream"; transfer-syntax=*
lubAccept: 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.