複数の DICOM ファイルを単一の JSON Array に変換する方法
このチュートリアルでは、複数の DICOM ファイルを C# を使用して単一の JSON レイヤーに変換する方法を示しています. このアプローチは、分析ツール、データベース、またはデータ パイプラインのための Dicom メタデータを輸出する必要があるデータエンジニアに最適です。
JSON Array 輸出の利点
●Bulk データ処理:- 複数の DICOM レコードを 1 つの操作でデータベースにインポートします。
●「アナリティクス準備」:- JSON リリースは、Python、Spark、またはデータストレージに直接充電することができます。
コンパクト出力*:- すべてのメタデータを含む単一ファイルは、データ管理を簡素化します。
原題: Preparing the Environment
- Visual Studio または 互換性のある .NET IDE を設定します.
- 新しい .NET 8 コンソールアプリケーションプロジェクトを作成します。
- NuGet Package Manager から Aspose.Medical をインストールします。
- 複数の DICOM ファイルを含むフォルダーを作成します。
複数の DICOM ファイルを JSON Array に変換するためのステップアップガイド
ステップ1:インストール Aspose.Medical
NuGet を使用してプロジェクトに Aspose.Medical ライブラリを追加します。
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 オブジェクトの範囲を構築します。
Dataset[] datasets = dicomFiles
.Select(dcm => dcm.Dataset)
.ToArray();ステップ5:JSON Arrayにシリアル化する
利用 DicomJsonSerializer.Serialize データセットアレイで
string jsonArray = DicomJsonSerializer.Serialize(datasets, writeIndented: true);ステップ6:JSONアレイを保存する
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 出力
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 を Analytics ツールにインポートする
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())モンゴDBへのダウンロード
// 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 Array フォーマットは、NoSQL データベースへの大量輸入に最適です。
- ストレージ効率のために大型JSONファイルを圧縮することを検討します。
- ストリーミングシナリオでは、代わりにNDJSON(新線無制限 JSON)フォーマットを使用することを検討してください。
結論
このチュートリアルは、Aspose.Medical を使用して複数の DICOM ファイルを C# で単一の JSON ラインに変換する方法を示しています。このアプローチでは、分析、データベースの輸入、およびデータパイプライン統合のための効率的な大規模データ輸出が可能になります。