Как да конвертирате няколко DICOM файла в един JSON Array
Този урок показва как да се конвертират няколко DICOM файла в един JSON диапазон с помощта на C#. Този подход е идеален за инженери на данни, които трябва да изнасят метаданни на DIKOM за аналитични инструменти, бази данни или тръби за данни.
Предимства на JSON Array Export
- Преработване на данни от Булк:- Въвеждане на няколко DICOM записи в бази данни в една операция.
Анализът е готов:- JSON радиуси могат да бъдат изтеглени директно в Python, Spark или съхранение на данни.
- Съвместим изход *:- Един файл, съдържащ всички метаданни, улеснява управлението на данните.
Предимства: Подготвяне на околната среда
- Visual Studio или всяка съвместима .NET IDE.
- Създаване на нов проект за .NET 8 конзола.
- Инсталирайте Aspose.Medical от NuGet Package Manager.
- Подгответе папка, съдържаща няколко DICOM файла.
Стъпка по стъпка ръководство за конвертиране на множество DICOM файлове в JSON Array
Стъпка 1: Инсталирайте Aspose.Medical
Добавете библиотеката Aspose.Medical към вашия проект с помощта на NuGet.
Install-Package Aspose.MedicalСтъпка 2: Включете необходимите имена
Добавете препратки към необходимите имена в кода си.
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;Стъпка 3: Изтегляне на множество DICOM файлове
Изтеглете DICOM файлове от папка в колекция.
string inputFolder = @"C:\DicomStudies";
string[] dicomPaths = Directory.GetFiles(inputFolder, "*.dcm");
List<DicomFile> dicomFiles = new();
foreach (string path in dicomPaths)
{
dicomFiles.Add(DicomFile.Open(path));
}Стъпка 4: Изтегляне на Dataset Array
Създайте редица обекти на Dataset от изтеглените файлове.
Dataset[] datasets = dicomFiles
.Select(dcm => dcm.Dataset)
.ToArray();Стъпка 5: Сериализиране на JSON Array
Използване DicomJsonSerializer.Serialize Също така, с базата данни.
string jsonArray = DicomJsonSerializer.Serialize(datasets, writeIndented: true);Стъпка 6: Спасете JSON Array
Съхранявайте JSON array към файл.
File.WriteAllText("dicom_studies.json", jsonArray);
Console.WriteLine($"Exported {datasets.Length} DICOM datasets to JSON array.");Допълнителен код Пример
Ето пълен пример, който показва как да конвертирате няколко DICOM файла в JSON диапазон:
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
string inputFolder = @"C:\DicomStudies";
string outputFile = "dicom_studies.json";
// Get all DICOM files
string[] dicomPaths = Directory.GetFiles(inputFolder, "*.dcm");
Console.WriteLine($"Found {dicomPaths.Length} DICOM files.");
// Load all files
List<DicomFile> dicomFiles = new();
foreach (string path in dicomPaths)
{
try
{
dicomFiles.Add(DicomFile.Open(path));
}
catch (Exception ex)
{
Console.WriteLine($"Skipping invalid file: {Path.GetFileName(path)}");
}
}
// Build dataset array
Dataset[] datasets = dicomFiles
.Select(dcm => dcm.Dataset)
.ToArray();
// Serialize to JSON array
string jsonArray = DicomJsonSerializer.Serialize(datasets, writeIndented: true);
// Save to file
File.WriteAllText(outputFile, jsonArray);
Console.WriteLine($"Successfully exported {datasets.Length} datasets to {outputFile}");Пример за JSON Array Output
Резултатът от JSON array изглежда така:
[
{
"00080005": { "vr": "CS", "Value": ["ISO_IR 100"] },
"00100010": { "vr": "PN", "Value": [{ "Alphabetic": "DOE^JOHN" }] },
"00100020": { "vr": "LO", "Value": ["12345"] }
},
{
"00080005": { "vr": "CS", "Value": ["ISO_IR 100"] },
"00100010": { "vr": "PN", "Value": [{ "Alphabetic": "SMITH^JANE" }] },
"00100020": { "vr": "LO", "Value": ["67890"] }
}
]Обработка на големи данни с LINQ
За по-добро управление на паметта с големи набори данни, използвайте LINQ проекции:
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
string inputFolder = @"C:\LargeDicomArchive";
string outputFile = "large_export.json";
// Process files lazily to manage memory
Dataset[] datasets = Directory.GetFiles(inputFolder, "*.dcm")
.Select(path =>
{
try
{
return DicomFile.Open(path).Dataset;
}
catch
{
return null;
}
})
.Where(ds => ds != null)
.ToArray()!;
string jsonArray = DicomJsonSerializer.Serialize(datasets, writeIndented: true);
File.WriteAllText(outputFile, jsonArray);
Console.WriteLine($"Exported {datasets.Length} datasets.");Добавяне на доклади за напредък
За големи мачове, добавете доклад за напредък:
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;
string inputFolder = @"C:\DicomStudies";
string[] dicomPaths = Directory.GetFiles(inputFolder, "*.dcm");
List<Dataset> datasets = new();
int processed = 0;
int total = dicomPaths.Length;
foreach (string path in dicomPaths)
{
try
{
DicomFile dcm = DicomFile.Open(path);
datasets.Add(dcm.Dataset);
}
catch (Exception ex)
{
Console.WriteLine($"Error: {Path.GetFileName(path)} - {ex.Message}");
}
processed++;
if (processed % 100 == 0 || processed == total)
{
Console.WriteLine($"Progress: {processed}/{total} ({processed * 100 / total}%)");
}
}
string jsonArray = DicomJsonSerializer.Serialize(datasets.ToArray(), writeIndented: true);
File.WriteAllText("export.json", jsonArray);
Console.WriteLine($"Export complete: {datasets.Count} datasets.");Импортиране на JSON Array в аналитични инструменти
Пример за Python
import json
import pandas as pd
# Load the exported JSON array
with open('dicom_studies.json', 'r') as f:
dicom_data = json.load(f)
# Convert to DataFrame for analysis
df = pd.json_normalize(dicom_data)
print(df.head())Изтегляне в MongoDB
// Using mongoimport
// mongoimport --db medical --collection studies --jsonArray --file dicom_studies.json
Паметни съображения
Когато работите с много големи набори от данни:
- Процес в батерии: Разделяне на файловете в пакети от 100-500 файла.
- Stream Output: Използвайте сериализация, базирана на потока, за много големи радиатори.
- Създаване на файлове: Уверете се, че обектите на DicomFile се отстраняват след извличане на данни.
// Batch processing example
int batchSize = 100;
string[] allFiles = Directory.GetFiles(inputFolder, "*.dcm");
int batchNumber = 0;
for (int i = 0; i < allFiles.Length; i += batchSize)
{
string[] batch = allFiles.Skip(i).Take(batchSize).ToArray();
Dataset[] datasets = batch
.Select(path => DicomFile.Open(path).Dataset)
.ToArray();
string batchJson = DicomJsonSerializer.Serialize(datasets, writeIndented: true);
File.WriteAllText($"batch_{batchNumber++}.json", batchJson);
}Допълнителна информация
- Форматът JSON Array е идеален за масови вноски в NoSQL бази данни.
- Помислете за компресиране на големи JSON файлове за ефективност на съхранението.
- За стрийминг сценарии, помислете за използването на NDJSON (newline-delimited JSON) формат вместо.
заключение
Този урок ви е показал как да конвертирате няколко DICOM файла в един JSON диапазон в C# с помощта на Aspose.Medical. Този подход позволява ефективен износ на масивни данни за анализи, вноски на бази данни и интеграция на тръбопровода.