Python과 함께 DICOMweb 표준 API 사용
이 문서에서는 Python 및 샘플 .dcm DICOM® 파일을 사용하여 DICOMweb 서비스로 작업하는 방법을 보여 줍니다.
다음 샘플 파일을 사용합니다.
- blue-circle.dcm
- dicom-metadata.csv
- green-square.dcm
- red-triangle.dcm
샘플 DICOM 파일의 파일 이름, studyUID, seriesUID 및 instanceUID는 다음과 같습니다.
파일 | 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 |
참고 항목
각 파일은 하나의 인스턴스를 나타내며 동일한 연구의 일부입니다. 또한 녹색 사각형과 빨간색 삼각형은 동일한 계열이며, 파란색 원은 별도의 계열입니다.
필수 조건
DICOMweb 표준 API를 사용하려면 DICOM 서비스의 인스턴스가 배포되어 있어야 합니다. 자세한 내용은 Azure Portal을 사용하여 DICOM 서비스 배포를 참조하세요.
DICOM 서비스의 인스턴스를 배포한 후 App Service의 URL을 검색합니다.
- Azure Portal에 로그인합니다.
- 최신 리소스를 검색하고 DICOM 서비스 인스턴스를 선택합니다.
- DICOM 서비스의 서비스 URL을 복사합니다.
- 토큰이 없으면 Azure CLI를 사용하여 DICOM 서비스에 대한 액세스 토큰 가져오기를 참조하세요.
이 코드의 경우 공개 미리 보기 Azure 서비스에 액세스합니다. 개인 의료 정보(PHI)를 업로드하지 않는 것이 중요합니다.
DICOM 서비스 작업
DICOMweb 표준은 DICOM 특정 수락 헤더와 결합된 multipart/related
HTTP 요청을 많이 사용합니다. 다른 REST 기반 API에 익숙한 개발자는 DICOMweb 표준을 사용하는 것이 불편할 수 있습니다. 그러나 실행한 후에는 사용하기 쉽습니다. 시작하기 위해서는 약간의 적응이 필요합니다.
Python 라이브러리 가져오기
먼저, 필요한 Python 라이브러리를 가져옵니다.
동기식 requests
라이브러리를 사용하여 이 예를 구현합니다. 비동기 지원을 위해서는 httpx
또는 다른 비동기 라이브러리 사용을 고려합니다. 또한 multipart/related
요청 작업을 지원하기 위해 urllib3
에서 두 가지 지원 함수를 가져오고 있습니다.
또한 Azure에 로그인하고 토큰을 가져오기 위해 DefaultAzureCredential
을 가져오고 있습니다.
import requests
import pydicom
from pathlib import Path
from urllib3.filepost import encode_multipart_formdata, choose_boundary
from azure.identity import DefaultAzureCredential
사용자 정의 변수 구성
{ }로 묶인 모든 변수 값을 사용자 고유의 값으로 바꿉니다. 또한 구성된 변수가 올바른지 유효성을 검사합니다. 예를 들어, base_url
은 서비스 URL을 사용하여 구성된 다음 사용 중인 REST API 버전이 추가됩니다. DICOM 서비스의 서비스 URL은: https://<workspacename-dicomservicename>.dicom.azurehealthcareapis.com
입니다. Azure Portal을 사용하여 DICOM 서비스로 이동하고 서비스 URL을 가져올 수 있습니다. 버전 관리에 대한 자세한 내용은 DICOM 서비스용 API 버전 관리 설명서를 참조하세요. 사용자 지정 URL을 사용하는 경우 해당 값을 고유의 값으로 재정의해야 합니다.
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
Azure에 인증하고 토큰 가져오기
DefaultAzureCredential
을 사용하면 서비스에 로그인하기 위한 토큰을 가져오는 다양한 방법을 사용할 수 있습니다. 이 예에서는 AzureCliCredential
을 사용하여 서비스에 로그인하기 위한 토큰을 가져옵니다. ManagedIdentityCredential
및 EnvironmentCredential
과 같이 사용할 수 있는 다른 자격 증명 공급자가 있습니다. AzureCliCredential을 사용하려면 이 코드를 실행하기 전에 CLI에서 Azure에 로그인해야 합니다. 자세한 내용은 Azure CLI를 사용하여 DICOM 서비스에 대한 액세스 토큰 가져오기를 참조하세요. 또는 CLI에서 로그인하는 동안 검색된 토큰을 복사하여 붙여넣습니다.
참고 항목
DefaultAzureCredential
은 여러 가지 자격 증명 개체를 반환합니다. 반환된 컬렉션의 5번째 항목으로 AzureCliCredential
을 참조하세요. 항상 그런 것은 아닙니다. 그렇지 않은 경우 print(credential.credential)
줄의 주석 처리를 제거합니다. 그러면 모든 항목이 나열됩니다. Python이 0부터 시작하는 인덱싱을 사용한다는 점을 기억하면서 올바른 인덱스를 찾습니다.
참고 항목
CLI를 사용하여 Azure에 로그인하지 않은 경우에는 실패합니다. 이 작업을 수행하려면 CLI에서 Azure에 로그인해야 합니다.
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}'
multipart\related
를 지원하기 위한 지원 방법 만들기
Requests
라이브러리(및 대부분의 Python 라이브러리)는 DICOMweb을 지원하는 방식으로 multipart\related
와 작동하지 않습니다. 이러한 라이브러리로 인해 DICOM 파일 작업을 지원하려면 몇 가지 메서드를 추가해야 합니다.
encode_multipart_related
는 필드 집합(DICOM의 경우 이러한 라이브러리는 일반적으로 Part 10 dam 파일임)과 선택적 사용자 정의 경계를 사용합니다. 사용할 수 있는 content_type과 함께 전체 본문을 모두 반환합니다.
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
requests
세션 만들기
DICOM 서비스와 통신하는 데 사용되는 client
라는 requests
세션을 만듭니다.
client = requests.session()
인증이 올바르게 구성되었는지 확인
인증이 성공하면 200을 반환하는 변경 피드 API 엔드포인트를 호출합니다.
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!')
DICOM 인스턴스 업로드(STOW)
다음 예에서는 지속되는 DICOM 파일을 강조 표시합니다.
multipart/related
를 사용하여 인스턴스 저장
이 예는 단일 DICOM 파일을 업로드하는 방법을 보여 주며, Python을 사용하여 DICOM 파일을 바이트로 메모리에 미리 로드합니다. 파일 배열이 필드 매개 변수 encode_multipart_related
에 전달되면 단일 POST로 여러 파일을 업로드할 수 있습니다. 때로는 전체 시리즈나 연구 내에서 여러 인스턴스를 업로드하는 데 사용됩니다.
세부 정보:
경로: ../studies
메서드: POST
헤더:
- Accept: application/dicom+json
- Content-Type: multipart/related; type="application/dicom"
- 권한 부여: Bearer $token"
본문:
- Content-Type: 업로드된 각 파일에 대해 application/dicom, 경계 값으로 구분
일부 프로그래밍 언어 및 도구는 다르게 동작합니다. 예를 들어, 일부에서는 자체 경계를 정의해야 합니다. 이러한 언어 및 도구의 경우 약간 수정된 Content-Type 헤더를 사용해야 할 수 있습니다. 이러한 언어와 도구를 성공적으로 사용할 수 있습니다.
- 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)
특정 연구에 대한 인스턴스 저장
이 예에서는 여러 DICOM 파일을 지정된 연구에 업로드하는 방법을 보여 줍니다. Python을 사용하여 DICOM 파일을 바이트로 메모리에 미리 로드합니다.
파일 배열이 필드 매개 변수 encode_multipart_related
에 전달되면 단일 POST로 여러 파일을 업로드할 수 있습니다. 때로는 전체 시리즈나 연구를 업로드하는 데 사용됩니다.
세부 정보:
- 경로: ../studies/{study}
- 메서드: POST
- Headers:
- Accept: application/dicom+json
- Content-Type: multipart/related; type="application/dicom"
- 권한 부여: Bearer $token"
- 본문:
- Content-Type: 업로드된 각 파일에 대해 application/dicom, 경계 값으로 구분
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)
단일 인스턴스 저장(비표준)
다음 코드 예에서는 단일 DICOM 파일을 업로드하는 방법을 보여 줍니다. 요청 본문에 전송된 이진 바이트로 단일 파일 업로드를 간소화하는 비표준 API 엔드포인트입니다.
세부 정보:
- 경로: ../studies
- 메서드: POST
- Headers:
- Accept: application/dicom+json
- Content-Type: application/dicom
- 권한 부여: Bearer $token"
- 본문:
- 단일 DICOM 파일을 이진 바이트로 포함합니다.
#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
DICOM 인스턴스 검색(WADO)
다음 예에서는 DICOM 인스턴스 검색을 강조 표시합니다.
연구 내 모든 인스턴스 검색
이 예에서는 단일 연구 내의 모든 인스턴스를 검색합니다.
세부 정보:
- 경로: ../studies/{study}
- 메서드: GET
- Headers:
- Accept: multipart/related; type="application/dicom"; transfer-syntax=*
- 권한 부여: Bearer $token"
이전에 업로드한 3개의 dcm 파일은 모두 동일한 연구의 일부이므로 응답은 3개의 인스턴스를 모두 반환해야 합니다. 응답의 상태 코드가 OK이고 세 인스턴스가 모두 반환되는지 유효성을 검사합니다.
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)
검색된 인스턴스 사용
인스턴스는 이진 바이트로 검색됩니다. 반환된 항목을 반복하고 바이트를 pydicom
이 읽을 수 있는 파일로 변환하면 다음과 같습니다.
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)
연구에서 모든 인스턴스의 메타데이터 검색
이 요청은 단일 연구 내 모든 인스턴스에 대한 메타데이터를 검색합니다.
세부 정보:
- 경로: ../studies/{study}/metadata
- 메서드: GET
- Headers:
- Accept: application/dicom+json
- 권한 부여: Bearer $token"
이전에 업로드한 세 개의 .dcm
파일은 모두 동일한 연구의 일부이므로 응답은 세 인스턴스 모두에 대한 메타데이터를 반환해야 합니다. 응답의 상태 코드가 OK이고 모든 메타데이터가 반환되었는지 유효성을 검사합니다.
url = f'{base_url}/studies/{study_uid}/metadata'
headers = {'Accept':'application/dicom+json', "Authorization":bearer_token}
response = client.get(url, headers=headers) #, verify=False)
계열 내 모든 인스턴스 검색
이 요청은 단일 시리즈 내의 모든 인스턴스를 검색합니다.
세부 정보:
- 경로: ../studies/{study}/series/{series}
- 메서드: GET
- Headers:
- Accept: multipart/related; type="application/dicom"; transfer-syntax=*
- 권한 부여: Bearer $token"
이 시리즈에는 두 개의 인스턴스(녹색 사각형과 빨간색 삼각형)가 있으므로 응답은 두 인스턴스를 모두 반환해야 합니다. 응답의 상태 코드가 OK이고 두 인스턴스가 모두 반환되는지 유효성을 검사합니다.
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)
시리즈에 있는 모든 인스턴스의 메타데이터를 검색합니다.
이 요청은 단일 시리즈 내 모든 인스턴스에 대한 메타데이터를 검색합니다.
세부 정보:
- 경로: ../studies/{study}/series/{series}/metadata
- 메서드: GET
- Headers:
- Accept: application/dicom+json
- 권한 부여: Bearer $token"
이 시리즈에는 두 개의 인스턴스(녹색 사각형과 빨간색 삼각형)가 있으므로 두 인스턴스 모두에 대해 응답이 반환되어야 합니다. 응답의 상태 코드가 확인인지 유효성을 검사하고 두 인스턴스의 메타데이터가 반환되는지 유효성을 검사합니다.
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)
단일 연구의 단일 계열 내에서 단일 인스턴스 검색
이 요청은 단일 인스턴스를 검색합니다.
세부 정보:
- 경로: ../studies/{study}/series{series}/instances/{instance}
- 메서드: GET
- Headers:
- Accept: application/dicom; transfer-syntax=*
- 권한 부여: Bearer $token"
이 코드 예는 빨간색 삼각형 인스턴스만 반환해야 합니다. 응답의 상태 코드가 OK이고 인스턴스가 반환되는지 유효성을 검사합니다.
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)
단일 연구의 단일 계열 내에서 단일 인스턴스의 메타데이터 검색
이 요청은 단일 연구 및 계열 내 단일 인스턴스에 대한 메타데이터를 검색합니다.
세부 정보:
- 경로: ../studies/{study}/series/{series}/instances/{instance}/metadata
- 메서드: GET
- Headers:
- Accept: application/dicom+json
- 권한 부여: Bearer $token"
이 코드 예는 빨간색 삼각형 인스턴스에 대한 메타데이터만 반환해야 합니다. 응답의 상태 코드가 OK이고 메타데이터가 반환되는지 유효성을 검사합니다.
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)
단일 인스턴스에서 하나 이상의 프레임 검색
이 요청은 단일 인스턴스에서 하나 이상의 프레임을 검색합니다.
세부 정보:
- 경로: ../studies/{study}/series{series}/instances/{instance}/frames/1,2,3
- 메서드: GET
- Headers:
- 권한 부여: Bearer $token"
Accept: multipart/related; type="application/octet-stream"; transfer-syntax=1.2.840.10008.1.2.1
(기본값) 또는Accept: multipart/related; type="application/octet-stream"; transfer-syntax=*
또는Accept: multipart/related; type="application/octet-stream";
이 코드 예는 빨간색 삼각형에서 유일한 프레임을 반환해야 합니다. 응답의 상태 코드가 OK이고 프레임이 반환되는지 유효성을 검사합니다.
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)
DICOM 쿼리(QIDO)
다음 예제에서는 고유 식별자를 사용하여 항목을 검색합니다. PatientName과 같은 다른 특성을 검색할 수도 있습니다.
지원되는 DICOM 특성은 DICOM 적합성 문을 참조하세요.
연구 검색
이 요청은 DICOM 특성을 기준으로 하나 이상의 연구를 검색합니다.
세부 정보:
- 경로: ../studies?StudyInstanceUID={study}
- 메서드: GET
- Headers:
- Accept: application/dicom+json
- 권한 부여: Bearer $token"
응답에 하나의 연구가 포함되어 있고 응답 코드가 올바른지 유효성을 검사합니다.
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)
계열 검색
이 요청은 DICOM 특성을 기준으로 하나 이상의 시리즈를 검색합니다.
세부 정보:
- 경로: ../series?SeriesInstanceUID={series}
- 메서드: GET
- Headers:
- Accept: application/dicom+json
- 권한 부여: Bearer $token"
응답에 하나의 계열이 포함되어 있고 응답 코드가 올바른지 유효성을 검사합니다.
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)
연구 내 계열 검색
이 요청은 DICOM 특성을 기준으로 단일 연구 내에서 하나 이상의 시리즈를 검색합니다.
세부 정보:
- 경로: ../studies/{study}/series?SeriesInstanceUID={series}
- 메서드: GET
- Headers:
- Accept: application/dicom+json
- 권한 부여: Bearer $token"
응답에 하나의 계열이 포함되어 있고 응답 코드가 올바른지 유효성을 검사합니다.
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)
인스턴스 검색
이 요청은 DICOM 특성을 기준으로 하나 이상의 인스턴스를 검색합니다.
세부 정보:
- 경로: ../instances?SOPInstanceUID={instance}
- 메서드: GET
- Headers:
- Accept: application/dicom+json
- 권한 부여: Bearer $token"
응답에 하나의 인스턴스가 포함되어 있고 응답 코드가 정상인지 유효성을 검사합니다.
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)
연구 내 인스턴스 검색
이 요청은 DICOM 특성을 기준으로 단일 연구 내에서 하나 이상의 인스턴스를 검색합니다.
세부 정보:
- 경로: ../studies/{study}/instances?SOPInstanceUID={instance}
- 메서드: GET
- Headers:
- Accept: application/dicom+json
- 권한 부여: Bearer $token"
응답에 하나의 인스턴스가 포함되어 있고 응답 코드가 정상인지 유효성을 검사합니다.
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)
연구 및 계열 내 인스턴스 검색
이 요청은 DICOM 특성을 기준으로 단일 연구 및 단일 시리즈 내에서 하나 이상의 인스턴스를 검색합니다.
세부 정보:
- 경로: ../studies/{study}/series/{series}/instances?SOPInstanceUID={instance}
- 메서드: GET
- Headers:
- Accept: application/dicom+json
- 권한 부여: Bearer $token"
응답에 하나의 인스턴스가 포함되어 있고 응답 코드가 정상인지 유효성을 검사합니다.
url = f'{base_url}/studies/{study_uid}/series/{series_uid}/instances'
headers = {'Accept':'application/dicom+json'}
params = {'SOPInstanceUID':instance_uid}
response = client.get(url, headers=headers, params=params) #, verify=False)
DICOM 삭제
참고 항목
삭제는 DICOM 표준의 일부가 아니지만 편의를 위해 추가되었습니다.
삭제에 성공하면 204 응답 코드가 반환됩니다. 항목이 존재하지 않거나 이미 삭제된 경우 404 응답 코드가 반환됩니다.
연구 및 계열 내 특정 인스턴스 삭제
이 요청은 단일 연구 및 단일 계열 내에서 단일 인스턴스를 삭제합니다.
세부 정보:
- 경로: ../studies/{study}/series/{series}/instances/{instance}
- 메서드: DELETE
- Headers:
- 권한 부여: Bearer $token
이 요청은 서버에서 빨간색 삼각형 인스턴스를 삭제합니다. 성공하면 응답 상태 코드에 콘텐츠가 포함되지 않습니다.
headers = {"Authorization":bearer_token}
url = f'{base_url}/studies/{study_uid}/series/{series_uid}/instances/{instance_uid}'
response = client.delete(url, headers=headers)
연구 내 특정 계열 삭제
이 요청은 단일 연구 내에서 단일 계열(및 모든 자식 인스턴스)을 삭제합니다.
세부 정보:
- 경로: ../studies/{study}/series/{series}
- 메서드: DELETE
- Headers:
- 권한 부여: Bearer $token
이 코드 예는 서버에서 녹색 사각형 인스턴스(시리즈에 남아 있는 유일한 요소)를 삭제합니다. 성공하면 응답 상태 코드는 콘텐츠를 삭제하지 않습니다.
headers = {"Authorization":bearer_token}
url = f'{base_url}/studies/{study_uid}/series/{series_uid}'
response = client.delete(url, headers=headers)
특정 연구 삭제
이 요청은 단일 연구(및 모든 자식 계열 및 인스턴스)를 삭제합니다.
세부 정보:
- 경로: ../studies/{study}
- 메서드: DELETE
- Headers:
- 권한 부여: Bearer $token
headers = {"Authorization":bearer_token}
url = f'{base_url}/studies/{study_uid}'
response = client.delete(url, headers=headers)
참고 항목
DICOM®은 의료 정보의 디지털 통신과 관련된 표준 간행물에 대한 미국 전기공업회의 등록 상표입니다.