Cara Mengkonversi Multiple DICOM File ke Array JSON tunggal

Cara Mengkonversi Multiple DICOM File ke Array JSON tunggal

Tutorial ini menunjukkan cara mengkonversi beberapa file DICOM ke dalam satu array JSON menggunakan C#. pendekatan ini ideal untuk insinyur data yang perlu mengekspor metadata DIKOM untuk alat analisis, database, atau pipa data.

Keuntungan dari JSON Array Export

  • • Pengolahan Data Bulk:- Mengimport beberapa rekaman DICOM ke database dalam satu operasi.

  • “Analistik siap” :- Array JSON dapat dimuat langsung ke Python, Spark, atau gudang data.

    • Pengeluaran Kompakt * :- File tunggal yang berisi semua metadata memudahkan pengelolaan data.

Persyaratan: Persiapan Lingkungan

  • Menginstal Visual Studio atau IDE .NET yang kompatibel.
  • Mencipta aplikasi .NET 8 baru.
  • Instal Aspose.Medical dari NuGet Package Manager.
  • Siapkan folder yang berisi beberapa file DICOM.

Panduan Langkah-Langkah untuk Konversi Multiple DICOM File ke JSON Array

Langkah 1: Instalasi Aspose.Medical

Tambahkan perpustakaan Aspose.Medical ke proyek Anda menggunakan NuGet.

Install-Package Aspose.Medical

Langkah 2: Menyertakan ruang nama yang diperlukan

Tambahkan referensi ke ruang nama yang diperlukan dalam kode Anda.

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

Langkah 3: Mengisi Multiple DICOM File

Muat file DICOM dari folder ke 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

Membangun berbagai objek Dataset dari file yang dimuat.

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

Langkah 5: Serialisasi ke JSON Array

Penggunaan DicomJsonSerializer.Serialize dengan dataset array.

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

Langkah 6: Simpan JSON Array

Simpan array JSON ke file.

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

Contoh kode lengkap

Berikut adalah contoh lengkap yang menunjukkan bagaimana untuk menukar beberapa file 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

Produksi JSON array terlihat 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"] }
  }
]

Memproses data besar dengan LINQ

Untuk pengelolaan memori yang lebih baik dengan set data 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.");

Menambahkan Progress Reporting

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

Mengimpor JSON Array ke 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())

Mengunggah ke MongoDB

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

Pertimbangan Memori

Ketika bekerja dengan set data yang sangat besar:

  • Proses dalam Batches: Membagi file ke dalam batches dari 100-500 file.
  • Stream Output: Gunakan serialisasi berbasis stream untuk array yang sangat besar.
  • Dispose Files: Pastikan objek DicomFile dihapus setelah 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);
}

Informasi Tambahan

  • Format array JSON ideal untuk impor massal ke database NoSQL.
  • Pertimbangkan mengkompresi file JSON besar untuk efisiensi penyimpanan.
  • Untuk skenario streaming, pertimbangkan menggunakan format NDJSON (newline-delimited JSON) sebagai gantinya.

Kesimpulan

Tutorial ini telah menunjukkan kepada Anda bagaimana untuk menukar beberapa file DICOM ke dalam satu array JSON dalam C# menggunakan Aspose.Medical. pendekatan ini memungkinkan ekspor data bulk yang efisien untuk analisis, impor database, dan integrasi pipa data.

 Indonesia