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을 검색합니다.

  1. Azure Portal에 로그인합니다.
  2. 최근 리소스를 검색하고 DICOM 서비스 인스턴스를 선택합니다.
  3. DICOM 서비스의 서비스 URL을 복사합니다.
  4. 토큰이 없는 경우 Azure CLI를 사용하여 DICOM 서비스에 대한 액세스 토큰 가져오기를 참조하세요.

이 코드의 경우 공개 미리 보기 Azure 서비스에 액세스합니다. 개인 상태 정보(PHI)를 업로드하지 않는 것이 중요합니다.

DICOM 서비스 작업

DICOMweb 표준은 DICOM 특정 수락 헤더와 결합된 HTTP 요청을 많이 사용합니다 multipart/related . 다른 REST 기반 API에 익숙한 개발자는 DICOMweb 표준으로 작업하는 것이 불편할 수 있습니다. 그러나 실행되고 나면 사용하기 쉽습니다. 시작하기 위해서는 약간의 친숙함이 필요합니다.

Python 라이브러리 가져오기

먼저 필요한 Python 라이브러리를 가져옵니다.

동기 requests 라이브러리를 사용하여 이 예제를 구현합니다. 비동기 지원을 위해 사용하거나 다른 비동기 라이브러리를 사용하는 httpx 것이 좋습니다. 또한 요청 작업을 지원하기 위해 두 가지 urllib3 지원 함수를 가져오고 multipart/related 있습니다.

또한 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 가져와서 서비스에 로그인합니다. 사용할 수 있는 자격 증명 공급자와 EnvironmentCredential 같은 ManagedIdentityCredential 다른 자격 증명 공급자도 있습니다. AzureCliCredential을 사용하려면 이 코드를 실행하기 전에 CLI에서 Azure에 로그인해야 합니다. 자세한 내용은 Azure CLI를 사용하여 DICOM 서비스에 대한 액세스 토큰 가져오기를 참조하세요. 또는 CLI에서 로그인하는 동안 검색된 토큰을 복사하여 붙여넣습니다.

참고 항목

DefaultAzureCredential 는 여러 다른 자격 증명 개체를 반환합니다. 반환된 AzureCliCredential 컬렉션에서 5번째 항목으로 참조합니다. 일관성이 없을 수 있습니다. 그렇다면 줄의 주석 처리를 제거합니다 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의 경우 이러한 라이브러리는 일반적으로 10부 댐 파일임) 및 선택적 사용자 정의 경계를 사용합니다. 사용할 수 있는 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 세션 만들기

requests DICOM 서비스와 통신하는 데 사용되는 세션을 client 만듭니다.

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로 업로드할 수 있습니다. 때로는 전체 시리즈 또는 연구 내에 여러 인스턴스를 업로드하는 데 사용됩니다.

세부 정보:

  • 경로:.. /연구

  • 메서드: POST

  • 헤더:

    • 수락: application/dicom+json
    • Content-Type: multipart/related; type="application/dicom"
    • 권한 부여: 전달자 $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
  • 헤더:
    • 수락: application/dicom+json
    • Content-Type: multipart/related; type="application/dicom"
    • 권한 부여: 전달자 $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 엔드포인트입니다.

세부 정보:

  • 경로:.. /연구
  • 메서드: POST
  • 헤더:
    • 수락: application/dicom+json
    • Content-Type: application/dicom
    • 권한 부여: 전달자 $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
  • 헤더:
    • 수락: 다중 파트/관련; type="application/dicom"; transfer-syntax=*
    • 권한 부여: 전달자 $token"

이전에 업로드한 세 개의 dcm 파일은 모두 동일한 연구의 일부이므로 응답은 세 인스턴스를 모두 반환해야 합니다. 응답에 상태 코드가 있고 세 인스턴스가 모두 반환되는지 확인합니다.

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
  • 헤더:
    • 수락: application/dicom+json
    • 권한 부여: 전달자 $token"

이전에 업로드한 세 .dcm 파일은 모두 동일한 연구의 일부이므로 응답은 세 인스턴스 모두에 대한 메타데이터를 반환해야 합니다. 응답에 상태 코드가 있고 모든 메타데이터가 반환되었는지 확인합니다.

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
  • 헤더:
    • 수락: 다중 파트/관련; type="application/dicom"; transfer-syntax=*
    • 권한 부여: 전달자 $token"

이 계열에는 두 개의 인스턴스(녹색 사각형 및 빨간색 삼각형)가 있으므로 응답은 두 인스턴스를 모두 반환해야 합니다. 응답에 상태 코드가 있고 두 인스턴스가 모두 반환되는지 확인합니다.

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
  • 헤더:
    • 수락: application/dicom+json
    • 권한 부여: 전달자 $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
  • 헤더:
    • 수락: application/dicom; transfer-syntax=*
    • 권한 부여: 전달자 $token"

이 코드 예제에서는 인스턴스 빨간색 삼각형만 반환해야 합니다. 응답에 상태 코드가 있고 인스턴스가 반환되었는지 확인합니다.

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
  • 헤더:
    • 수락: application/dicom+json
    • 권한 부여: 전달자 $token"

이 코드 예제에서는 인스턴스 빨간색 삼각형에 대한 메타데이터만 반환해야 합니다. 응답에 상태 코드가 있고 메타데이터가 반환되었는지 확인합니다.

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
  • 헤더:
    • 권한 부여: 전달자 $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";

이 코드 예제에서는 빨간색 삼각형에서 유일한 프레임을 반환해야 합니다. 응답에 상태 코드가 있고 프레임이 반환되었는지 확인합니다.

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 특성별로 하나 이상의 연구를 검색합니다.

세부 정보:

  • 경로:.. /연구? StudyInstanceUID={study}
  • 메서드: GET
  • 헤더:
    • 수락: application/dicom+json
    • 권한 부여: 전달자 $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 특성별로 하나 이상의 계열을 검색합니다.

세부 정보:

  • 경로:.. /시리즈? SeriesInstanceUID={series}
  • 메서드: GET
  • 헤더:
    • 수락: application/dicom+json
    • 권한 부여: 전달자 $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
  • 헤더:
    • 수락: application/dicom+json
    • 권한 부여: 전달자 $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 특성별로 하나 이상의 인스턴스를 검색합니다.

세부 정보:

  • 경로:.. /인스턴스? SOPInstanceUID={instance}
  • 메서드: GET
  • 헤더:
    • 수락: application/dicom+json
    • 권한 부여: 전달자 $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
  • 헤더:
    • 수락: application/dicom+json
    • 권한 부여: 전달자 $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
  • 헤더:
    • 수락: application/dicom+json
    • 권한 부여: 전달자 $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
  • 헤더:
    • 권한 부여: 전달자 $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
  • 헤더:
    • 권한 부여: 전달자 $token

이 코드 예제에서는 서버에서 녹색 사각형 인스턴스(계열에 남아 있는 유일한 요소)를 삭제합니다. 성공하면 응답 상태 코드가 콘텐츠를 삭제하지 않습니다.

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

특정 연구 삭제

이 요청은 단일 연구(및 모든 자식 시리즈 및 인스턴스)를 삭제합니다.

세부 정보:

  • 경로:.. /studies/{study}
  • 메서드: DELETE
  • 헤더:
    • 권한 부여: 전달자 $token
headers = {"Authorization":bearer_token}
url = f'{base_url}/studies/{study_uid}'
response = client.delete(url, headers=headers) 

참고 항목

DICOM® 은 의료 정보의 디지털 통신과 관련된 표준 간행물에 대한 전국 전기 제조 업체 협회의 등록 상표입니다.