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:
- Jelentkezzen be az Azure Portalra.
- Keressen a legutóbbi erőforrások között, és válassza ki a DICOM szolgáltatáspéldányt.
- 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.