Megosztás a következőn keresztül:


C# és DICOMweb Standard API-k használata

Ez a cikk bemutatja, hogyan használható a DICOMweb szolgáltatás C# és minta .dcm DICOM-fájlok® használatával.

Használja az alábbi mintafájlokat:

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

A minta DICOM-fájlok fájlneve, studyUID, seriesUID és instanceUID azonosítója a következő:

Fájl 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

Megjegyzés:

Ezek a fájlok egyetlen példányt jelölnek, és ugyanahhoz a tanulmányhoz tartoznak. A zöld négyzet és a piros háromszög is ugyanahhoz a sorozathoz tartozik, míg a kék kör külön sorozatban van.

Előfeltételek

A DICOMweb Standard API-k használatához üzembe kell helyeznie a DICOM szolgáltatás egy példányát. További információ: DICOM szolgáltatás üzembe helyezése az Azure Portalon.

A DICOM szolgáltatás egy példányának üzembe helyezése után kérje le az app service URL-címét:

  1. Jelentkezzen be az Azure Portalra.
  2. Keressen a legutóbbi erőforrások között, és válassza ki a DICOM szolgáltatáspéldányt.
  3. Másolja ki a DICOM-szolgáltatás szolgáltatás URL-címét . A kérések során győződjön meg arról, hogy az URL-cím részeként adja meg a verziót. További információ: API-verziószámozás a DICOM szolgáltatáshoz.

Az alkalmazásban telepítse a következő NuGet-csomagokat:

DicomWebClient létrehozása

A DICOM szolgáltatás üzembe helyezése után létre kell hoznia egy DicomWebClientet. Futtassa a kódrészletet a DicomWebClient létrehozásához, amelyet az oktatóanyag többi részében használ. Győződjön meg arról, hogy mindkét NuGet-csomag telepítve van. További információ: Hozzáférési jogkivonat beszerzése a DICOM szolgáltatáshoz az Azure CLI használatával.

string webServerUrl ="{Your DicomWeb Server URL}"
var httpClient = new HttpClient();
httpClient.BaseAddress = new Uri(webServerUrl);
IDicomWebClient client = new DicomWebClient(httpClient);
client.HttpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", “{Your token value}”); 

A DicomWebClient használatával mostantól végrehajthatjuk az Áruház, a Lekérés, a Keresés és a Törlés műveletet.

Store DICOM-példányok (STOW)

A DicomWebClient használatával mostantól DICOM-fájlokat tárolhatunk.

Egyetlen példány tárolása

Az egyetlen példány tárolása bemutatja, hogyan tölthet fel egyetlen DICOM-fájlt.

Részletek:

  • POST /tanulmányok
DicomFile dicomFile = await DicomFile.OpenAsync(@"{Path To blue-circle.dcm}");
DicomWebResponse response = await client.StoreAsync(new[] { dicomFile });

Adott tanulmány példányainak tárolása

Egy adott tanulmányhoz tartozó példányok azt mutatják be, hogyan tölthet fel DICOM-fájlt egy adott tanulmányba.

Részletek:

  • POST /studies/{study}
DicomFile dicomFile = await DicomFile.OpenAsync(@"{Path To red-triangle.dcm}");
DicomWebResponse response = await client.StoreAsync(new[] { dicomFile }, "1.2.826.0.1.3680043.8.498.13230779778012324449356534479549187420");

Mielőtt továbblépne az oktatóanyag következő részére, töltse fel a fájlt az green-square.dcm előző módszerek valamelyikével.

DICOM-példány lekérése (WADO)

A kódrészletek bemutatják, hogyan hajthatja végre az egyes lekéréses lekérdezéseket a korábban létrehozott DicomWebClient használatával.

A változók a többi példában is használatosak:

string studyInstanceUid = "1.2.826.0.1.3680043.8.498.13230779778012324449356534479549187420"; //StudyInstanceUID for all 3 examples
string seriesInstanceUid = "1.2.826.0.1.3680043.8.498.45787841905473114233124723359129632652"; //SeriesInstanceUID for green-square and red-triangle
string sopInstanceUid = "1.2.826.0.1.3680043.8.498.47359123102728459884412887463296905395"; //SOPInstanceUID for red-triangle

Egy tanulmány összes példányának lekérése

Részletek:

  • GET /studies/{study}
DicomWebResponse response = await client.RetrieveStudyAsync(studyInstanceUid);

A korábban feltöltött dcm-fájlok mindhárman ugyanahhoz a tanulmányhoz tartoznak, ezért a válasznak mindhárom példányt vissza kell adnia. Ellenőrizze, hogy a válasz állapota OK, és hogy a rendszer mindhárom példányt visszaadja.

A lekért példányok használata

Az alábbi kódrészlet bemutatja, hogyan érheti el a lekért példányokat. Azt is bemutatja, hogyan férhet hozzá a példányok egyes mezőihez, és hogyan mentheti dcm-fájlként.

DicomWebAsyncEnumerableResponse<DicomFile> response = await client.RetrieveStudyAsync(studyInstanceUid);
await foreach (DicomFile file in response)
{
    string patientName = file.Dataset.GetString(DicomTag.PatientName);
    string studyId = file.Dataset.GetString(DicomTag.StudyID);
    string seriesNumber = file.Dataset.GetString(DicomTag.SeriesNumber);
    string instanceNumber = file.Dataset.GetString(DicomTag.InstanceNumber);

    file.Save($"<path_to_save>\\{patientName}{studyId}{seriesNumber}{instanceNumber}.dcm");
}

A vizsgált példányok metaadatainak lekérése

Ez a válasz egy tanulmány összes példányának metaadatait kéri le.

Részletek:

  • GET /studies/{study}/metadata
DicomWebResponse response = await client.RetrieveStudyMetadataAsync(studyInstanceUid);

A korábban feltöltött dcm-fájlok mindhárman ugyanahhoz a tanulmányhoz tartoznak, ezért a válasznak mindhárom példány metaadatait kell visszaadnia. Ellenőrizze, hogy a válasz állapotkódja OK, és hogy az összes metaadat vissza lesz-e adva.

Egy sorozat összes példányának lekérése

Ez a válasz egyetlen sorozat összes példányát lekéri.

Részletek:

  • GET /studies/{study}/series/{series}
DicomWebResponse response = await client.RetrieveSeriesAsync(studyInstanceUid, seriesInstanceUid);

Ez a sorozat két példányból áll (zöld négyzet és piros háromszög), ezért a válasznak mindkét példányt vissza kell adnia. Győződjön meg arról, hogy a válasz állapota OK, és hogy a rendszer mindkét példányt visszaadja.

Egy sorozat összes példányának metaadatainak lekérése

Ez a válasz egy tanulmány összes példányának metaadatait kéri le.

Részletek:

  • GET /studies/{study}/series/{series}/metadata
DicomWebResponse response = await client.RetrieveSeriesMetadataAsync(studyInstanceUid, seriesInstanceUid);

Ez a sorozat két példányból áll (zöld négyzet és piros háromszög), ezért a válasznak mindkét példány metaadatait kell visszaadnia. Ellenőrizze, hogy a válasz ok állapotkóddal rendelkezik-e, és hogy a metaadatok mindkét példánya vissza lesz-e adva.

Egyetlen példány lekérése egy tanulmánysorozaton belül

Ez a kérés egyetlen példányt kér le.

Részletek:

  • GET /studies/{study}/series{series}/instances/{instance}
DicomWebResponse response = await client.RetrieveInstanceAsync(studyInstanceUid, seriesInstanceUid, sopInstanceUid);

Ez a válasz csak a piros háromszögű példányt adja vissza. Ellenőrizze, hogy a válasz ok állapotkóddal rendelkezik-e, és hogy a példány vissza lett-e adva.

Egyetlen példány metaadatainak lekérése egy tanulmánysorozaton belül

Ez a kérés egyetlen példány metaadatait kéri le egyetlen tanulmányon és sorozaton belül.

Részletek:

  • GET /studies/{study}/series/{series}/instances/{instance}/metadata
DicomWebResponse response = await client.RetrieveInstanceMetadataAsync(studyInstanceUid, seriesInstanceUid, sopInstanceUid);

Ez a válasz csak a piros háromszög példány metaadatait adja vissza. Ellenőrizze, hogy a válasz állapota OK, és hogy a metaadatok vissza lesznek-e adva.

Egy vagy több keret lekérése egyetlen példányból

Ez a kérés egy vagy több képkockát kér le egyetlen példányból.

Részletek:

  • GET /studies/{study}/series/{series}/instances/{instance}/frames/{frames}
DicomWebResponse response = await client.RetrieveFramesAsync(studyInstanceUid, seriesInstanceUid, sopInstanceUid, frames: new[] { 1 });

Ennek a válasznak az egyetlen keretet kell visszaadnia a piros háromszögből. Ellenőrizze, hogy a válasz állapota OK, és hogy a keret vissza lesz-e adva.

Lekérdezési DICOM (QIDO)

Megjegyzés:

A támogatott DICOM-attribútumok esetében tekintse meg a DICOM megfelelőségi nyilatkozatát .

Tanulmányok keresése

Ez a kérés egy vagy több tanulmányt keres DICOM-attribútumok alapján.

Részletek:

  • GET /tanulmányok? StudyInstanceUID={study}
string query = $"/studies?StudyInstanceUID={studyInstanceUid}";
DicomWebResponse response = await client.QueryAsync(query);

Ellenőrzi, hogy a válasz tartalmaz-e egy tanulmányt, és hogy a válaszkód rendben van-e.

Sorozat keresése

Ez a kérés egy vagy több sorozatot keres DICOM-attribútumok alapján.

Részletek:

  • GET /series? SeriesInstanceUID={series}
string query = $"/series?SeriesInstanceUID={seriesInstanceUid}";
DicomWebResponse response = await client.QueryAsync(query);

Ellenőrzi, hogy a válasz tartalmaz-e egy sorozatot, és hogy a válaszkód rendben van-e.

Sorozatok keresése egy tanulmányban

Ez a kérés egy vagy több sorozatot keres egy DICOM-attribútumok által végzett egyetlen vizsgálatban.

Részletek:

  • GET /studies/{study}/series? SeriesInstanceUID={series}
string query = $"/studies/{studyInstanceUid}/series?SeriesInstanceUID={seriesInstanceUid}";
DicomWebResponse response = await client.QueryAsync(query);

Ellenőrzi, hogy a válasz tartalmaz-e egy sorozatot, és hogy a válaszkód rendben van-e.

Példányok keresése

Ez a kérés egy vagy több példányt keres DICOM-attribútumok alapján.

Részletek:

  • GET /instances? SOPInstanceUID={instance}
string query = $"/instances?SOPInstanceUID={sopInstanceUid}";
DicomWebResponse response = await client.QueryAsync(query);

Ellenőrzi, hogy a válasz tartalmaz-e egy példányt, és hogy a válaszkód rendben van-e.

Példányok keresése egy tanulmányban

Ez a kérés egy vagy több példányt keres egyetlen vizsgálatban DICOM-attribútumok alapján.

Részletek:

  • GET /studies/{study}/instances? SOPInstanceUID={instance}
string query = $"/studies/{studyInstanceUid}/instances?SOPInstanceUID={sopInstanceUid}";
DicomWebResponse response = await client.QueryAsync(query);

Ellenőrzi, hogy a válasz tartalmaz-e egy példányt, és hogy a válaszkód rendben van-e.

Példányok keresése egy tanulmányban és sorozatban

Ez a kérés egy vagy több példányt keres egy tanulmányon belül, és egyetlen sorozatot DICOM-attribútumok alapján.

Részletek:

  • GET /studies/{study}/series/{series}instances? SOPInstanceUID={instance}
string query = $"/studies/{studyInstanceUid}/series/{seriesInstanceUid}/instances?SOPInstanceUID={sopInstanceUid}";
DicomWebResponse response = await client.QueryAsync(query);

Ellenőrzi, hogy a válasz tartalmaz-e egy példányt, és hogy a válaszkód rendben van-e.

DICOM törlése

Megjegyzés:

A törlés nem része a DICOM szabványnak, de az egyszerűség kedvéért lett hozzáadva.

Adott példány törlése egy tanulmányon és sorozaton belül

Ez a kérés egyetlen példányt töröl egyetlen tanulmányon és egy sorozaton belül.

Részletek:

  • DELETE /studies/{study}/series/{series}/instances/{instance}
string sopInstanceUidRed = "1.2.826.0.1.3680043.8.498.47359123102728459884412887463296905395";
DicomWebResponse response = await client.DeleteInstanceAsync(studyInstanceUid, seriesInstanceUid, sopInstanceUidRed);

Ez az újraírás törli a piros háromszögű példányt a kiszolgálóról. Ha sikeres, a válasz állapotkódja nem tartalmaz tartalmat.

Adott sorozat törlése egy tanulmányon belül

Ez a kérés egyetlen sorozatot (és az összes gyermekpéldányt) töröl egyetlen vizsgálaton belül.

Részletek:

  • DELETE /studies/{study}/series/{series}
DicomWebResponse response = await client.DeleteSeriesAsync(studyInstanceUid, seriesInstanceUid);

Ez a válasz törli a zöld négyzetes példányt (ez az egyetlen elem a sorozatban) a kiszolgálóról. Ha sikeres, a válasz állapotkódja nem tartalmaz tartalmat.

Adott tanulmány törlése

Ez a kérés egyetlen tanulmányt töröl (és az összes gyermeksorozatot és -példányt).

Részletek:

  • DELETE /studies/{study}
DicomWebResponse response = await client.DeleteStudyAsync(studyInstanceUid);

Ez a válasz törli a kékkörös példányt (ez az egyetlen elem a sorozatban) a kiszolgálóról. Ha sikeres, a válasz állapotkódja nem tartalmaz tartalmat.

Megjegyzés:

A DICOM® az Országos Elektromos Gyártók Országos Szövetségének bejegyzett védjegye az orvosi információk digitális kommunikációjával kapcsolatos szabványügyi kiadványaihoz.