Bagaimana untuk menukar pelbagai fail DICOM ke dalam satu JSON Array

Bagaimana untuk menukar pelbagai fail DICOM ke dalam satu JSON Array

Tutorial ini menunjukkan bagaimana untuk menukar beberapa fail DICOM ke dalam satu array JSON menggunakan C#. pendekatan ini sesuai untuk jurutera data yang perlu mengeksport metadata DIKOM untuk alat analisis, pangkalan data, atau paip data.

Kelebihan JSON Array Eksport

    • Pemprosesan Data Bulk :- Import beberapa rekod DICOM ke dalam pangkalan data dalam satu operasi.
  • *Perkh yang bersedia :- Array JSON boleh dimuat turun secara langsung ke dalam Python, Spark, atau gudang data.

    • Pengeluaran Kompakt * :- Fail tunggal yang mengandungi semua metadata memudahkan pengurusan data.

Tag: persiapan persekitaran

  • Menyediakan Visual Studio atau mana-mana .NET IDE yang kompatibel.
  • Mencipta projek aplikasi .NET 8 baru.
  • Instal Aspose.Medical daripada NuGet Package Manager.
  • Menyediakan folder yang mengandungi beberapa fail DICOM.

Langkah-langkah panduan untuk menukar pelbagai fail DICOM ke JSON Array

Langkah 1: Instal Aspose.Medical

Tambah perpustakaan Aspose.Medical kepada projek anda menggunakan NuGet.

Install-Package Aspose.Medical

Langkah 2: Masukkan ruang nama yang diperlukan

Tambah rujukan kepada ruang nama yang diperlukan dalam kod anda.

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

Langkah 3: Muat turun pelbagai fail DICOM

Muat turun fail DICOM daripada folder ke dalam koleksi.

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

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

Langkah 4: Mengekstrak Dataset Array

Membina satu siri objek Dataset daripada fail yang dimuat naik.

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

Langkah 5: Serialisasi kepada JSON Array

Use DicomJsonSerializer.Serialize dengan dataset array.

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

Langkah 6: Simpan JSON Array

Simpan JSON array ke dalam fail.

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

Contoh Kod Lengkap

Berikut ialah contoh lengkap yang menunjukkan bagaimana untuk menukar beberapa fail DICOM ke 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}");

Contoh JSON Array output

Rangkaian output JSON kelihatan seperti ini:

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

Pemprosesan data besar dengan LINQ

Untuk pengurusan memori yang lebih baik dengan set data yang besar, gunakan projeksi 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.");

Menambah Laporan Kemajuan

Untuk batch besar, tambahkan laporan kemajuan:

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

Mengimport JSON Array ke dalam Alat Analisis

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

Penghantaran ke MongoDB

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

Pertimbangan memori

Apabila bekerja dengan set data yang sangat besar:

  • Proses dalam Batches: Membahagikan fail ke dalam batches 100-500 fail.
  • Stream Output: Gunakan serialisasi berasaskan aliran untuk array yang sangat besar.
  • Dispose Files: Pastikan objek DicomFile dibuang selepas mengekstrak set data.
// 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);
}

Maklumat tambahan

  • Format array JSON sesuai untuk pengimportan besar-besaran ke pangkalan data NoSQL.
  • Pertimbangkan untuk memampatkan fail JSON besar untuk kecekapan penyimpanan.
  • Untuk senario streaming, pertimbangkan menggunakan format NDJSON (newline-delimited JSON) sebaliknya.

Conclusion

Tutorial ini telah menunjukkan kepada anda bagaimana untuk menukar beberapa fail DICOM ke dalam satu JSON array dalam C# menggunakan Aspose.Medical. pendekatan ini membolehkan pengeksportan data bulk yang cekap untuk analisis, pengimportan pangkalan data, dan integrasi paip data.

 Melayu