Ako premeniť viaceré súbory DICOM do jedného JSON Array

Ako premeniť viaceré súbory DICOM do jedného JSON Array

Tento tutoriál ukazuje, ako premeniť viaceré súbory DICOM na jeden JSON array pomocou C#. Tento prístup je ideálny pre inžinierov údajov, ktorí potrebujú vyvážať metadata DicOM pre analytické nástroje, databázy alebo dátové potrubia.

Výhody vývozu JSON Array

  • Bulk spracovanie údajov:- Import viacerých záznamov DICOM do databáz v jednej operácii.

  • Analýza je pripravená:- Vyrážky JSON môžu byť priamo naložené do skladov Python, Spark alebo dát.

    • Kompaktný výstup *:- Jednotlivé súbory obsahujúce všetky metadata zjednodušujú správu údajov.

Predpoklady: Príprava životného prostredia

  • Nastaviť Visual Studio alebo akýkoľvek kompatibilný .NET IDE.
  • Vytvorte nový projekt aplikácie .NET 8 konzoly.
  • Inštalovať Aspose.Medical z NuGet Package Manager.
  • Pripravte priečinok obsahujúci viaceré súbory DICOM.

Krok za krokom sprievodca premenou viacerých súborov DICOM na JSON Array

Krok 1: Inštalácia Aspose.Medical

Pridajte do projektu Aspose.Medicínska knižnica pomocou NuGet.

Install-Package Aspose.Medical

Krok 2: Vložte potrebné názvové priestory

Pridajte odkazy na požadované názvové priestory vo vašom kóde.

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

Krok 3: Nahrať viac DICOM súborov

Nahrať DICOM súbory z priečinka do zbierky.

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

Vytvorte rad objektov Dataset z nahraných súborov.

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

Krok 5: Serializovať na JSON Array

Použitie DicomJsonSerializer.Serialize s dataset array.

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

Krok 6: Uložiť JSON Array

Uložiť JSON array do súboru.

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

Kompletný príklad kódu

Tu je kompletný príklad, ktorý ukazuje, ako premeniť viaceré súbory DICOM na JSON array:

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

Príklad JSON Array Output

Výstup JSON array vyzerá 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"] }
  }
]

Spracovanie veľkých dát pomocou LINQ

Pre lepšie riadenie pamäte s veľkými databázami použite projekcie 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.");

Príspevok v téme Progress Reporting

V prípade veľkých zápasov pridajte sprá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 Analytics Tools

Python prí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())

Nahrávanie do MongoDB

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

Pamäťové úvahy

Pri práci s veľmi veľkými databázami:

  • Pracovanie v súboroch: Rozdeľte súbory do súborov 100-500.
  • Stream Output: Použite serializáciu na báze prúdu pre veľmi veľké arény.
  • Dostup súborov: Uistite sa, že DicomFile objekty sú odstránené po extrakcii databáz.
// 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);
}

Dodatočné informácie

  • JSON array formát je ideálny pre veľkoobchodné dovoz do databáz NoSQL.
  • Zvážte kompresiu veľkých súborov JSON pre úspornosť ukladania.
  • Pre streamovanie scenárov zvážte používanie formátu NDJSON (newline-delimited JSON) namiesto toho.

Záver

Tento tutoriál vám ukázal, ako premeniť viaceré súbory DICOM do jedného JSON reťazca v C# pomocou Aspose.Medical.Tento prístup umožňuje efektívny export hromadných údajov pre analýzu, dovoz databáz a integráciu dátového potrubia.

 Slovenčina