Birden fazla DICOM dosyasını tek bir JSON array'e nasıl dönüştürürsünüz

Birden fazla DICOM dosyasını tek bir JSON array'e nasıl dönüştürürsünüz

Bu öğretici, birden fazla DICOM dosyasını C# kullanarak tek bir JSON aralığına nasıl dönüştüreceğinizi gösterir.Bu yaklaşım, analitik araçlar, veritabanları veya veri boruları için DIKOM metadata ihraç etmeye ihtiyaç duyan veri mühendisleri için ideal.

JSON Array ihracatının faydaları

  • Bulk veri işleme :- Birden fazla DICOM dosyası tek bir işlemde veritabanlarına ithal edilir.

  • Analitik hazırlıklar *:- JSON çerçeveleri doğrudan Python, Spark veya veri depolarına yüklenebilir.

    • Kompakt Çıkış * :- Tüm metadata içeren tek dosya, veri yönetimini kolaylaştırır.

Etiket Arşivi: çevreyi hazırlamak

  • Visual Studio veya herhangi bir uyumlu .NET IDE ayarlayın.
  • Yeni bir .NET 8 konsol uygulama projesi oluşturun.
  • Aspose.Medical’ı NuGet Paket Yöneticisi’nden kurun.
  • Birden fazla DICOM dosyası içeren bir klasör hazırlayın.

Birden fazla DICOM dosyasını JSON Array’e dönüştürmek için adım adım rehber

Adım 1: Aspose.Medical yükleme

Projenize Aspose.Medical kütüphanesini NuGet kullanarak ekleyin.

Install-Package Aspose.Medical

2. Adım: İhtiyacınız olan alanları içerir

Kodunuzda gerekli isim alanlarına referanslar ekleyin.

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

Adım 3: Çeşitli DICOM dosyalarını yükleme

DICOM dosyalarını bir klasörden bir koleksiyonuna yükleyin.

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

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

Adım 4: Dataset Array Ekstraktı

Yüklenen dosyaların bir dizi Dataset nesneleri oluşturun.

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

Adım 5: JSON Array’a Serialize

Kullanımı DicomJsonSerializer.Serialize Dataset array ile.

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

Adım 6: JSON Array’ı kurtarın

JSON array’i bir dosyaya kaydedin.

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

Tam Kodu Örneği

İşte birkaç DICOM dosyasını bir JSON aralığına nasıl dönüştüreceğinizi gösteren tam bir örnek:

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

Örnek JSON Array çıkışı

çıkış JSON array bu şekilde görünüyor:

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

LINQ ile büyük veri kümeleri işleme

Büyük veri kümeleri ile daha iyi hafıza yönetimi için, LINQ projesi kullanın:

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

Gelişme Raporlama

Büyük maçlar için, ilerleme raporu ekleyin:

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

JSON Array’ı Analytics Araçlarına İthalat Etmek

Python Örneği

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

MongoDB’ye Giriş

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

hafıza düşünceleri

Çok büyük bir veri kümesi ile çalışırken:

  • Batches işlemi: Dosyaları 100-500 dosya parçalarına bölünür.
  • Stream Output: Çok büyük aralar için akım tabanlı serializasyon kullanın.
  • ** Dosyaları ayarlayın**: DicomFile nesnelerinin veri seti çıkarıldıktan sonra kaldırıldığından emin olun.
// 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);
}

Ek Bilgiler

  • JSON array biçimi NoSQL veritabanlarına toplu ithalat için idealdir.
  • Depolama verimliliği için büyük JSON dosyalarını sıkıştırmayı düşünün.
  • Streaming senaryoları için, NDJSON (yeni çizgi sınırlı JSON) biçimini kullanmayı düşünün.

Sonuç

Bu öğretici size Aspose.Medical kullanarak C#‘da tek bir JSON aralığına çok sayıda DICOM dosyasını nasıl dönüştüreceğinizi göstermiştir.Bu yaklaşım analiz, veritabanı ithalatları ve veri boru hattı entegrasyonu için verimli toptan veri ihracatını sağlar.

 Türkçe