Como converter vários arquivos DICOM em um único array JSON
Este tutorial demonstra como converter múltiplos arquivos DICOM em um único array JSON usando C#. Esta abordagem é ideal para engenheiros de dados que precisam exportar metadados DIKOM para ferramentas de análise, bancos de informações ou tubos de informação.
Benefícios do JSON Array Export
** Processamento de dados do Bulk**:- Importar vários registros DICOM em bases de dados em uma única operação.
- Análise está pronta:- Os arquivos JSON podem ser carregados diretamente para Python, Spark ou armazéns de dados.
- Output compacto *:- Um único arquivo que contém todos os metadados simplifica a gestão de dados.
Título: Preparando o Meio Ambiente
- Instale o Visual Studio ou qualquer .NET IDE compatível.
- Crie um novo projeto de aplicação .NET 8 console.
- Instale Aspose.Medical do NuGet Package Manager.
- Prepare uma pasta que contenha vários arquivos DICOM.
Guia passo a passo para converter múltiplos arquivos DICOM para JSON Array
Passo 1: Instalar Aspose.Medical
Adicione a Aspose.Medical Library ao seu projeto usando NuGet.
Install-Package Aspose.MedicalPasso 2: Incluir os espaços de nome necessários
Adicione referências aos espaços de nomes necessários em seu código.
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;Passo 3: Carregar múltiplos arquivos DICOM
Carregar arquivos DICOM de uma pasta em uma coleção.
string inputFolder = @"C:\DicomStudies";
string[] dicomPaths = Directory.GetFiles(inputFolder, "*.dcm");
List<DicomFile> dicomFiles = new();
foreach (string path in dicomPaths)
{
dicomFiles.Add(DicomFile.Open(path));
}Passo 4: Extração de Dataset Array
Crie uma série de objetos do Dataset dos arquivos carregados.
Dataset[] datasets = dicomFiles
.Select(dcm => dcm.Dataset)
.ToArray();Passo 5: Serialize para JSON Array
Utilização DicomJsonSerializer.Serialize com o Dataset Array.
string jsonArray = DicomJsonSerializer.Serialize(datasets, writeIndented: true);Passo 6: Salve o JSON Array
Salve o array JSON para um arquivo.
File.WriteAllText("dicom_studies.json", jsonArray);
Console.WriteLine($"Exported {datasets.Length} DICOM datasets to JSON array.");Exemplo de código completo
Aqui está um exemplo completo mostrando como converter múltiplos arquivos DICOM em um array 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}");Exemplo de JSON Array Output
A saída do JSON array parece assim:
[
{
"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"] }
}
]Processamento de Big Data com o LINQ
Para melhor gestão da memória com grandes conjuntos de dados, use projeções 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.");Adicionar relatórios de progresso
Para grandes partidas, adicione o relatório de progresso:
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.");Importar JSON Array para Ferramentas de Análise
Exemplo de 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())Carregar em MongoDB
// Using mongoimport
// mongoimport --db medical --collection studies --jsonArray --file dicom_studies.json
Considerações de memória
Ao trabalhar com grandes conjuntos de dados:
- Processo em Batches: Divida os arquivos em batches de 100-500 ficheiros.
- Stream Output: Use serialização baseada no fluxo para arredores muito grandes.
- Dispose Files: Assegure-se de que os objetos do DicomFile são eliminados após a extração de conjuntos de dados.
// 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);
}Informações adicionais
- O formato de array JSON é ideal para importações em massa em bases de dados NoSQL.
- Considere a compressão de grandes arquivos JSON para eficiência de armazenamento.
- Para cenários de streaming, considere usar o formato NDJSON (newline-delimited JSON) em vez disso.
Conclusão
Este tutorial mostrou-lhe como converter vários arquivos DICOM em um único array JSON em C# usando Aspose.Medical. Esta abordagem permite uma exportação eficiente de dados em massa para análises, importações de banco de datos e integração de tubos de data.