كيفية تحويل ملفات DICOM متعددة إلى سلسلة JSON واحدة

كيفية تحويل ملفات DICOM متعددة إلى سلسلة JSON واحدة

يظهر هذا الدليل كيفية تحويل ملفات DICOM المتعددة إلى سلسلة JSON واحدة باستخدام C#.هذا النهج مثالي للمهندسين البيانات الذين يحتاجون إلى تصدير بيانات الميتا ديم للأدوات التحليلية أو قواعد البيع أو أنابيب البيعة.

فوائد JSON Array Export

  • ** معالجة البيانات الكبيرة**:- استيراد العديد من سجلات DICOM إلى قواعد البيانات في عملية واحدة.

    • التحليلات جاهزة *:- ويمكن تحميل أرايا JSON مباشرة إلى Python أو Spark أو مخازن البيانات.
  • *الخروج المدمج *:- الملف الوحيد الذي يحتوي على جميع البيانات الميتاتية يسهل إدارة بيانات.

المعايير: إعداد البيئة

  • إعداد Visual Studio أو أي .NET IDE متوافق.
  • إنشاء مشروع تطبيقات .NET 8 الجديد.
  • قم بتثبيت Aspose.Medical من NuGet Package Manager.
  • إعداد مجلد يحتوي على عدة ملفات DICOM.

دليل خطوة بخطوة لتحويل ملفات DICOM المتعددة إلى JSON Array

الخطوة 1: تثبيت Aspose.Medical

إضافة مكتبة Aspose.Medical إلى مشروعك باستخدام NuGet.

Install-Package Aspose.Medical

الخطوة 2: إدراج المساحات المطلوبة

إضافة الإشارات إلى المساحات الاسمية المطلوبة في رمزك.

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

الخطوة 3: تحميل ملفات DICOM المتعددة

تحميل ملفات DICOM من مجلد إلى مجموعة.

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

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

الخطوة 4: استخراج Dataset Array

إنشاء مجموعة من كائنات Dataset من الملفات المحمولة.

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

الخطوة الخامسة: تسلسل JSON Array

استخدام DicomJsonSerializer.Serialize مع قاعدة البيانات.

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

الخطوة 6: حفظ JSON Array

قم بتخزين JSON إلى ملف.

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

نموذج الكود الكامل

إليك مثال كامل يظهر كيفية تحويل ملفات DICOM متعددة إلى سلسلة 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}");

نموذج JSON Array Output

يبدو إنتاج JSON على هذا النحو:

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

للحصول على إدارة أفضل للذاكرة مع مجموعات البيانات الكبيرة، استخدم التصوير 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.");

إضافة تقرير التقدم

بالنسبة للبطولات الكبيرة ، أضف تقرير التقدم:

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 إلى أدوات التحليل

نموذج 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())

تحميل في MongoDB

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

التفكير في الذاكرة

عند العمل مع مجموعات البيانات الكبيرة جدا:

  • العملية في المجموعات: تقسيم الملفات إلى مجموعات من 100-500 ملف.
  • الخروج من التدفق: استخدم التسلسلات القائمة على تدفق للخطوط الكبيرة جدا.
  • توفير الملفات: تأكد من أن كائنات DicomFile يتم إزالتها بعد استخراج مجموعات البيانات.
// 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);
}

معلومات إضافية

  • تنسيق JSON هو مثالي للاستيراد الجماعي إلى قواعد البيانات NoSQL.
  • فكر في ضغط ملفات JSON الكبيرة من أجل كفاءة التخزين.
  • للحصول على سيناريوهات البث ، فكر في استخدام تنسيق NDJSON (جديد الخط JSON) بدلاً من ذلك.

استنتاجات

وقد أظهر لك هذا الدليل كيفية تحويل ملفات DICOM متعددة إلى سلسلة JSON واحدة في C# باستخدام Aspose.Medical.هذا النهج يسمح بتصدير البيانات الكبيرة الفعالة للتحليلات، واستيراد قواعد البيان، وتكامل خط أنابيب بيانات.

 عربي