Jak převést více DICOM souborů do jedné JSON array

Jak převést více DICOM souborů do jedné JSON array

Tento tutoriál ukazuje, jak převést více DICOM souborů do jedné JSON řady pomocí C#. Tento přístup je ideální pro datové inženýry, kteří potřebují exportovat metadata DIKOM pro analytické nástroje, databáze, nebo datových potrubí.

Výhody vývozu JSON Array

  • ** Zpracování dat Bulk**:- Import více DICOM záznamů do databází v jedné operaci.

  • Analýza je připravená:- JSON součásti mohou být přenášeny přímo do Python, Spark nebo datových skladů.

    • Kompaktní výstupy *- Jednotlivé soubory obsahující všechny metadata zjednodušují správu dat.

Předpoklady: Příprava životního prostředí

  • Nastavení Visual Studio nebo jakéhokoli kompatibilního .NET IDE.
  • Vytvořte nový projekt aplikace .NET 8 konzole.
  • Instalace aplikace Aspose.Medical z programu NuGet Package Manager.
  • Připravte složku obsahující více souborů DICOM.

Krok za krokem průvodce pro konverzi více DICOM souborů do JSON Array

Krok 1: Instalace Aspose.Medical

Přidejte do svého projektu knihovnu Aspose.Medicine pomocí aplikace NuGet.

Install-Package Aspose.Medical

Krok 2: Vložte potřebné názevové prostory

Přidejte odkazy na požadované názevové prostory ve vašem kódu.

using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;

Krok 3: Stáhněte více DICOM souborů

Stáhněte soubory DICOM z složky do sbírky.

string inputFolder = @"C:\DicomStudies";
string[] dicomPaths = Directory.GetFiles(inputFolder, "*.dcm");

List<DicomFile> dicomFiles = new();
foreach (string path in dicomPaths)
{
    dicomFiles.Add(DicomFile.Open(path));
}

Krok 4: Extrakt Dataset Array

Vytvořte řadu datasetových objektů z nahraných souborů.

Dataset[] datasets = dicomFiles
    .Select(dcm => dcm.Dataset)
    .ToArray();

Krok 5: Serializujte se na JSON Array

Použití DicomJsonSerializer.Serialize s datasetem array.

string jsonArray = DicomJsonSerializer.Serialize(datasets, writeIndented: true);

Krok 6: Ušetřete JSON Array

Uložte JSON array do souboru.

File.WriteAllText("dicom_studies.json", jsonArray);
Console.WriteLine($"Exported {datasets.Length} DICOM datasets to JSON array.");

Kompletní příklad kódu

Zde je kompletní příklad, který ukazuje, jak převést více DICOM souborů do řady 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}");

Příklad JSON Array Output

Výstup JSON array vypadá takto:

[
  {
    "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"] }
  }
]

Zpracování velkých datových souborů pomocí LINQ

Pro lepší správu paměti s velkými databázemi použijte projekce 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.");

Přidání zprávy o pokroku

Pro velké zápasy přidejte zprávu o pokroku:

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.");

Import JSON Array do analytických nástrojů

Python příklad

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())

Stáhnout do MongoDB

// Using mongoimport
// mongoimport --db medical --collection studies --jsonArray --file dicom_studies.json

Paměťové úvahy

Při práci s velkými databázemi:

  • Proces v souborech: Rozdělte soubory na souby 100-500 souborů.
  • Stream Output: Použijte serializace založenou na toku pro velmi velké soupravy.
  • Diskutovat soubory: Ujistěte se, že předměty DicomFile jsou po extrahování datových souborů odstraněny.
// 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);
}

Další informace

  • JSON array formát je ideální pro masové dovozy do databází NoSQL.
  • Zvažte komprimování velkých JSON souborů pro úsporu úspor.
  • V případě streamingových scénářů se zamyslete nad použitím formátu NDJSON (newline-delimited JSON).

závěr

Tento tutoriál vám ukázal, jak převést více DICOM souborů do jedné JSON řady v C# pomocí Aspose.Medical.Tento přístup umožňuje efektivní exportu objemových dat pro analýzu, dovoz databází a integraci datového potrubí.

 Čeština