Làm thế nào để chuyển đổi nhiều tập tin DICOM thành một JSON Array duy nhất
Hướng dẫn này cho thấy làm thế nào để chuyển đổi nhiều tập tin DICOM thành một bộ JSON duy nhất bằng cách sử dụng C#. Cách tiếp cận này là lý tưởng cho các kỹ sư dữ liệu những người cần phải xuất khẩu các metadata DIKOM cho công cụ phân tích, cơ sở data, hoặc ống data.
Lợi ích của JSON Array Export
- Công cụ xử lý dữ liệu Bulk:- nhập nhiều bản ghi DICOM vào cơ sở dữ liệu trong một hoạt động.
- Phân tích đã sẵn sàng:- Các bản gốc JSON có thể được tải trực tiếp vào Python, Spark hoặc kho dữ liệu.
- Chất lượng thông minh *:- Một tệp duy nhất chứa tất cả các metadata đơn giản hóa quản lý dữ liệu.
Chủ đề: Chuẩn bị môi trường
- Cài đặt Visual Studio hoặc bất kỳ IDE .NET tương thích nào.
- Tạo một dự án ứng dụng .NET 8 mới.
- Cài đặt Aspose.Medical từ NuGet Package Manager.
- Chuẩn bị một thư mục chứa nhiều tệp DICOM.
Hướng dẫn từng bước để chuyển đổi nhiều tệp DICOM sang JSON Array
Bước 1: Cài đặt Aspose.Medical
Thêm thư viện Aspose.Medical vào dự án của bạn bằng NuGet.
Install-Package Aspose.MedicalBước 2: Thêm các không gian tên cần thiết
Thêm tham chiếu đến các không gian tên cần thiết trong mã của bạn.
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Serialization;Bước 3: Tải nhiều tập tin DICOM
Tải các tệp DICOM từ một thư mục vào một bộ sưu tập.
string inputFolder = @"C:\DicomStudies";
string[] dicomPaths = Directory.GetFiles(inputFolder, "*.dcm");
List<DicomFile> dicomFiles = new();
foreach (string path in dicomPaths)
{
dicomFiles.Add(DicomFile.Open(path));
}Bước 4: Tiết xuất Dataset Array
Xây dựng một loạt các đối tượng Dataset từ các tập tin được tải lên.
Dataset[] datasets = dicomFiles
.Select(dcm => dcm.Dataset)
.ToArray();Bước 5: Tập trung vào JSON Array
Sử dụng DicomJsonSerializer.Serialize với Dataset array.
string jsonArray = DicomJsonSerializer.Serialize(datasets, writeIndented: true);Bước 6: Save the JSON Array
Lưu JSON array vào một tệp.
File.WriteAllText("dicom_studies.json", jsonArray);
Console.WriteLine($"Exported {datasets.Length} DICOM datasets to JSON array.");Mẫu mã đầy đủ
Dưới đây là một ví dụ đầy đủ cho thấy làm thế nào để chuyển đổi nhiều tệp DICOM sang một chuỗi 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}");Ví dụ JSON Array Output
Kết quả của JSON array trông như thế này:
[
{
"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"] }
}
]Xử lý dữ liệu lớn với LINQ
Để quản lý bộ nhớ tốt hơn với các tập dữ liệu lớn, sử dụng dự báo 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.");Thêm báo cáo tiến bộ
Đối với các trận đấu lớn, hãy thêm báo cáo tiến bộ:
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.");nhập JSON Array vào Analytics Tools
Python Ví dụ
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())Tải về MongoDB
// Using mongoimport
// mongoimport --db medical --collection studies --jsonArray --file dicom_studies.json
Ghi chú Memory Considerations
Khi làm việc với các tập tin dữ liệu rất lớn:
- Các quy trình trong Batches: Chia các tập tin thành các bộ của 100-500 tệp.
- Stream Output: Sử dụng series dựa trên stream cho các dòng rất lớn.
- Hãy cài đặt tệp: Hãy chắc chắn rằng các đối tượng DicomFile được loại bỏ sau khi thu thập các tập dữ liệu.
// 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);
}Thông tin bổ sung
- JSON array format là lý tưởng cho nhập khẩu hàng loạt vào các cơ sở dữ liệu NoSQL.
- Hãy xem xét việc nén các tệp JSON lớn cho hiệu quả lưu trữ.
- Đối với kịch bản streaming, hãy cân nhắc sử dụng định dạng NDJSON (Newline-delimited JSON) thay vào đó.
Kết luận
Hướng dẫn này đã cho bạn thấy làm thế nào để chuyển đổi nhiều tập tin DICOM thành một bộ JSON duy nhất trong C# bằng cách sử dụng Aspose.Medical. Cách tiếp cận này cho phép xuất dữ liệu khối hiệu quả cho phân tích, nhập cơ sở hạ tầng, và tích hợp đường ống data.