الذكاء الاصطناعي والتعلم الآلي يحولون الصورة الطبية، ولكن تدريب هذه النماذج يتطلب مجموعات البيانات الكبيرة والمجهولة بشكل صحيح.في هذا الدليل، سوف تتعلم كيفية إعداد مجموعة بيانات DICOM للبحوث الذكية باستخدام تدفق عمل كامل يجمع بين المجموعة المجهول مع تصدير JSON الميتايدات للتكامل اللامبالاة في أنابيب ML.

جدول المحتوى

لماذا تحتاج أبحاث الذكاء الاصطناعي إلى بيانات DICOM المجهولة

تتطلب نماذج الذكاء الاصطناعي في التصوير الطبي للتشخيص والتقسيم والاكتشاف بيانات تدريبية كبيرة.يجب أن تكون هذه البيانات مجهولة بشكل صحيح من أجل الامتثال لسياسات HIPAA وGDPR والهيئات المؤسسية.وبالإضافة إلى ذلك، غالبا ما تنتشر التعاون البحثي في العديد من المؤسسات، مما يجعل التطهير المعياري ضروري.

يتطلب التحضير الصحيح لمجموعة البيانات أكثر من مجرد إزالة أسماء المرضى.يتطلب التعامل المنهجي مع جميع المعلومات التي تحدد الهوية، وتطبيق متسق لقواعد المجهولية عبر الآلاف من الملفات، وتحويل النموذج الذي يجعل بيانات الوصول إلى إطارات ML.

مخاطر إعداد مجموعة بيانات غير صحيحة

إن استخدام مجموعات البيانات المجهولة جزئياً أو غير المنظمة بشكل غير صحيح يخلق مشاكل كبيرة.يمكن أن يعرض التسمية غير المكتملة معلومات المريض ، مما يؤدي إلى انتهاكات تنظيمية وانتهاكات أخلاقية.مخالفة غير متسقة عبر مجموعة بيانات يمكن أن تضع في الاعتبار مشكلات في نوعية البيان أو المعلومات.يجعله من الصعب تصفية وطلب وبيانات ما قبل المعالجة لتدريب النموذج.

يتم تخفيف هذه المخاطر من خلال استخدام أنابيب المجهول الآلي والمتسق وتحويل البيانات إلى تنسيقات سهلة الاستخدام.

تدفق عمل التحضير الكامل

يتكون تدفق العمل الكامل من أربعة مراحل.أولًا ، يتم تحديد المجموعة من دراسات DICOM باستخدام ملفات تعريف متسقة.ثانيا ، تحويل البيانات الميتاتية المجهولة إلى JSON لإدخال الأنابيب.الثالثة ، تخزين الصور وبيانات المعادن للوصول إلى إطار ML.

دعونا نقوم بتنفيذ كل مرحلة مع أمثلة الرمز.

تداول الخيارات الثنائية (#batch-anonymous)

ابدأ بتسمية مجموعة DICOM الخاصة بك مع ملف تعريف متسق:

using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Anonymization;

public class DicomDatasetPreparation
{
    private readonly string _inputFolder;
    private readonly string _outputFolder;
    private readonly string _mappingFile;
    private readonly Anonymizer _anonymizer;
    private readonly List<string> _mappings = new();

    public DicomDatasetPreparation(string inputFolder, string outputFolder)
    {
        _inputFolder = inputFolder;
        _outputFolder = outputFolder;
        _mappingFile = Path.Combine(outputFolder, "id_mapping.csv");

        Directory.CreateDirectory(outputFolder);

        // Create anonymizer with research-appropriate profile
        ConfidentialityProfile profile = ConfidentialityProfile.CreateDefault(
            ConfidentialityProfileOptions.BasicProfile |
            ConfidentialityProfileOptions.RetainPatientChars
        );
        _anonymizer = new Anonymizer(profile);

        _mappings.Add("OriginalFile,AnonymizedFile,Timestamp");
    }

    public async Task ProcessDatasetAsync()
    {
        string[] dicomFiles = Directory.GetFiles(_inputFolder, "*.dcm", SearchOption.AllDirectories);
        Console.WriteLine($"Found {dicomFiles.Length} DICOM files to process.");

        int processed = 0;
        int failed = 0;

        foreach (string filePath in dicomFiles)
        {
            try
            {
                string relativePath = Path.GetRelativePath(_inputFolder, filePath);
                string outputPath = Path.Combine(_outputFolder, "images", relativePath);

                Directory.CreateDirectory(Path.GetDirectoryName(outputPath)!);

                DicomFile dcm = DicomFile.Open(filePath);
                DicomFile anonymizedDcm = _anonymizer.Anonymize(dcm);
                anonymizedDcm.Save(outputPath);

                // Record mapping for audit trail
                _mappings.Add($"\"{relativePath}\",\"{outputPath}\",\"{DateTime.UtcNow:O}\"");

                processed++;
                if (processed % 100 == 0)
                {
                    Console.WriteLine($"Progress: {processed}/{dicomFiles.Length}");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error processing {filePath}: {ex.Message}");
                failed++;
            }
        }

        // Save mapping file
        await File.WriteAllLinesAsync(_mappingFile, _mappings);

        Console.WriteLine($"\nAnonymization complete:");
        Console.WriteLine($"  Processed: {processed}");
        Console.WriteLine($"  Failed: {failed}");
        Console.WriteLine($"  Mapping file: {_mappingFile}");
    }
}

تحويل البيانات إلى JSON

بعد التسمية ، قم بتحويل البيانات الميتة إلى JSON لإدخال خط أنابيب ML:

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

public class MetadataExporter
{
    public async Task ExportMetadataToJsonAsync(string dicomFolder, string jsonOutputPath)
    {
        string[] dicomFiles = Directory.GetFiles(dicomFolder, "*.dcm", SearchOption.AllDirectories);
        List<Dataset> datasets = new();

        Console.WriteLine($"Extracting metadata from {dicomFiles.Length} files...");

        foreach (string filePath in dicomFiles)
        {
            try
            {
                DicomFile dcm = DicomFile.Open(filePath);
                datasets.Add(dcm.Dataset);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Skipping {filePath}: {ex.Message}");
            }
        }

        // Serialize all datasets to JSON array
        string jsonArray = DicomJsonSerializer.Serialize(datasets.ToArray(), writeIndented: true);
        await File.WriteAllTextAsync(jsonOutputPath, jsonArray);

        Console.WriteLine($"Exported {datasets.Count} datasets to {jsonOutputPath}");
    }

    public async Task ExportMetadataPerFileAsync(string dicomFolder, string jsonOutputFolder)
    {
        Directory.CreateDirectory(jsonOutputFolder);
        string[] dicomFiles = Directory.GetFiles(dicomFolder, "*.dcm", SearchOption.AllDirectories);

        foreach (string filePath in dicomFiles)
        {
            try
            {
                DicomFile dcm = DicomFile.Open(filePath);
                string json = DicomJsonSerializer.Serialize(dcm, writeIndented: true);

                string jsonFileName = Path.GetFileNameWithoutExtension(filePath) + ".json";
                string jsonPath = Path.Combine(jsonOutputFolder, jsonFileName);
                await File.WriteAllTextAsync(jsonPath, json);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error exporting {filePath}: {ex.Message}");
            }
        }

        Console.WriteLine($"Individual JSON files saved to {jsonOutputFolder}");
    }
}

التكامل مع الأنابيب ML

يمكن تحميل JSON المصدر إلى مجموعة متنوعة من إطارات ML والأدوات.

تحميل في Python مع Pandas

import json
import pandas as pd

# Load the JSON array
with open('dicom_metadata.json', 'r') as f:
    dicom_data = json.load(f)

# Flatten nested structure for analysis
def extract_values(record):
    result = {}
    for tag, data in record.items():
        if 'Value' in data and data['Value']:
            value = data['Value'][0]
            if isinstance(value, dict) and 'Alphabetic' in value:
                result[tag] = value['Alphabetic']
            else:
                result[tag] = value
    return result

flat_data = [extract_values(record) for record in dicom_data]
df = pd.DataFrame(flat_data)

print(df.head())
print(f"Dataset shape: {df.shape}")

أرشيف الوسم : Elasticsearch

from elasticsearch import Elasticsearch, helpers

es = Elasticsearch(['http://localhost:9200'])

with open('dicom_metadata.json', 'r') as f:
    dicom_data = json.load(f)

def generate_actions(data):
    for i, record in enumerate(data):
        yield {
            '_index': 'dicom_studies',
            '_id': i,
            '_source': record
        }

helpers.bulk(es, generate_actions(dicom_data))
print(f"Indexed {len(dicom_data)} records to Elasticsearch")

كتابة خط أنابيب كاملة

فيما يلي سيناريو C# الكامل الذي يقوم بتنفيذ سير العمل التحضيرية بأكملها:

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

class Program
{
    static async Task Main(string[] args)
    {
        string inputFolder = args.Length > 0 ? args[0] : @"C:\DicomSource";
        string outputFolder = args.Length > 1 ? args[1] : @"C:\DicomPrepared";

        Console.WriteLine("=== DICOM Dataset Preparation for AI ===\n");

        // Step 1: Anonymize
        Console.WriteLine("Step 1: Anonymizing DICOM files...");
        var prep = new DicomDatasetPreparation(inputFolder, outputFolder);
        await prep.ProcessDatasetAsync();

        // Step 2: Export metadata to JSON
        Console.WriteLine("\nStep 2: Exporting metadata to JSON...");
        var exporter = new MetadataExporter();
        string anonymizedFolder = Path.Combine(outputFolder, "images");
        string jsonOutput = Path.Combine(outputFolder, "metadata.json");
        await exporter.ExportMetadataToJsonAsync(anonymizedFolder, jsonOutput);

        Console.WriteLine("\n=== Dataset Preparation Complete ===");
        Console.WriteLine($"Anonymized images: {Path.Combine(outputFolder, "images")}");
        Console.WriteLine($"Metadata JSON: {jsonOutput}");
        Console.WriteLine($"ID Mapping: {Path.Combine(outputFolder, "id_mapping.csv")}");
    }
}

أفضل الممارسات

تخزين خرائط الهوية الآمنة أمر بالغ الأهمية.يجب تخزينه بين المخترعين المجهولين والأصليين في موقع آمن ومراقب الوصول منفصل عن البيانات المذكورة.هذا يسمح بإعادة التعرف إذا لزم الأمر لمتابعة السريرية مع الحفاظ على الخصوصية..

تسجيل جميع العمليات للتكرار.سجل ما هي الملفات التي تم معالجتها، متى، مع أي ملف تعريف، وأي أخطاء واجهت.هذا الوثيقة حاسمة لمتطلبات التكرارات البحثية والتدقيق.

تأكيد نتائج العينات قبل معالجة مجموعات البيانات بأكملها.تحقق من ملفات مجهولة الهوية للتأكد من أن الملف الشخصي يعمل كما هو متوقع وأن جودة الصورة محمية.

نظر في تقسيم البيانات لمجموعات بيانات كبيرة.تنظيم النتيجة حسب نوع الدراسة أو نموذجها أو غيرها من المعايير ذات الصلة لتسهيل اختيار الفرع لمختلف المهام التدريبية.

استنتاجات {# الاستنتاج}

إن إعداد مجموعات DICOM للذكاء الاصطناعي والتعلم الآلي يتطلب توخي الحذر من الخصوصية والاتساق والتوافق بين النماذج.باستخدام Aspose.Medical لـ .NET، يمكنك إنشاء أنابيب تلقائية تجمع بين الأبحاث مع الملفات المتسقة، وتصدير البيانات الميتا إلى JSON لإدخال إطار ML، والحفاظ على مسارات التدقيق للتكرار.

هذا تدفق العمل يضمن أن بيانات البحث الخاصة بك غير معترف بها بشكل صحيح ، وهيكل جيد ، ومستعدة للجيل القادم من الذكاء الاصطناعي التصوير الطبي.

للحصول على مزيد من المعلومات والأمثلة، يرجى زيارة الوسوم - الوثائق الطبيةلتجربة القدرات الكاملة لـ API ، الحصول على ترخيص مؤقت مجاني.

More in this category