एआई और मशीन सीखना चिकित्सा छवि को बदल रहा है, लेकिन इन मॉडलों को प्रशिक्षित करने के लिए बड़े, उचित रूप से एनानोमाइज़ेड डेटासेट की आवश्यकता होती है. इस गाइड में, आप एक पूर्ण कार्यप्रवाह का उपयोग करके एएनआई अनुसंधान के लिये डीआईसीओएम डाटा सेट तैयार करने का तरीका जानते हैं जो एमएल पाइपलाइनों में अनगिनत इंटेलिजेंस के उद्देश्य से जीएसओएन मेटाडेटा निर्यात के साथ बैच एनोनीकरण को जोड़ता है।

सामग्री तालिक

क्यों एआई रिसर्च को एनीमेटेड डीआईसीओएम डेटा की आवश्यकता होती है

चिकित्सा इमेजिंग एआई मॉडल का निदान, विभाजन, और पता लगाने के लिए मौलिक प्रशिक्षण डेटा की आवश्यकता होती है. इन जानकारी को HIPAA, GDPR और संस्थागत नीतियों के अनुपालन में उचित रूप से अनाम किया जाना चाहिए. इसके अलावा, अनुसंधान सहयोग अक्सर कई संस्थानों को फैलाता है, जिससे मानकीकृत डि-डिजिटेशन आवश्यक हो।

सही डेटासेट तैयारी केवल रोगी के नामों को हटाने की तुलना में अधिक शामिल है. यह सभी पहचान जानकारी का व्यवस्थित प्रबंधन, हजारों फ़ाइलों के माध्यम से एनीमेशन के नियमों का लगातार अनुप्रयोग, और प्रारूप रूपांतरण की आवश्यकता होती है जो एमएल फ्रेमवर्क के लिए उपलब्ध बनाती है।

गलत डेटासेट तैयारी के जोखिम

आंशिक रूप से अज्ञात या गलत ढंग से संरचित डेटा सेट का उपयोग महत्वपूर्ण समस्याओं का कारण बनता है. अपूर्ण एनीमेशन रोगी की जानकारी को उजागर कर सकता है, जिसके परिणामस्वरूप विनियमन उल्लंघन और नैतिक विरोधाभास हो सकते हैं. एक डाटासेट के माध्यम से असंगत anonymization bias या data quality issues introduce. Unstructured metadata makes it difficult to filter, query, and preprocess data for model training.

इन जोखिमों को स्वचालित, लगातार एनीमेशन पाइपलाइनों का उपयोग करके और डेटा को मशीन के अनुकूल प्रारूपों में परिवर्तित करके कम किया जाता है।

पूर्ण तैयारी कार्यप्रवाह

पूर्ण कार्यप्रवाह चार चरणों से बना है. सबसे पहले, बैच लगातार प्रोफाइल का उपयोग करके डीआईसीओएम अध्ययनों को अज्ञात बनाता है; दूसरा, पाइपलाइन इंजेक्शन के लिए एनीमेटेड मेटाडेटा को जेएसओएन में परिवर्तित करना; तीसरे, एमएल फ्रेमवर्क एक्सेस के साथ छवियों और मैटडाइट्स को संग्रहीत करना. चौथा, सुरक्षित भंडारण में अनाम और मूल आईडी के बीच मैपिंग बनाए रखना।

आइए प्रत्येक चरण को कोड उदाहरणों के साथ लागू करते हैं।

बैच एनीमेशन (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 {#converting-metadata-to-json} में परिवर्तित करें

एनीमेशन के बाद, मेटाडेटा को एमएल पाइपलाइन इंजेक्शन के लिए JSON में परिवर्तित करें:

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

एमएल पाइपलाइनों के साथ एकीकरण

निर्यात किए गए JSON को विभिन्न एमएल फ्रेमवर्क और उपकरणों में लोड किया जा सकता है।

पांडस के साथ Python में लोड करें

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

पूर्ण पाइपलाइन स्क्रिप्ट

यहाँ एक पूर्ण सी # स्क्रिप्ट है जो पूरे तैयारी कार्यप्रवाह को पूरा करता है:

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

सर्वश्रेष्ठ अभ्यास (Best Practices)

सुरक्षित आईडी मानचित्रण भंडारण आवश्यक है. अनाम और मूल पहचानकर्ताओं के बीच का मैपिंग एक सुरक्षित, एक्सेस-नियंत्रित स्थान पर संग्रहीत किया जाना चाहिए, अनानी डेटा से अलग. यह व्यक्तिगतता को बनाए रखते हुए नैदानिक ट्रैकिंग के लिए यदि आवश्यक हो तो पुनर्वितरण की अनुमति देगा.

** पुनरावृत्ति के लिए सभी ऑपरेशनों को लॉग करें. रिकॉर्ड करें कि कौन से फ़ाइलें संसाधित की गई थीं, कब, किस प्रोफ़ाइल के साथ, और किसी भी त्रुटियों का सामना किया गया था. यह दस्तावेज अनुसंधान पुनर्विचार और ऑडिट आवश्यकताओं में महत्वपूर्ण है.

** पूरे डेटा सेट को संसाधित करने से पहले नमूना आउटपुट की पुष्टि करें. यह सुनिश्चित करने के लिए कि प्रोफ़ाइल उम्मीद के अनुसार काम करता है और छवि की गुणवत्ता बनाए रखा जाता है, स्पॉट-चिकित करें।

बड़े डेटासेट के लिए जानकारी विभाजन को ध्यान में रखें अध्ययन के प्रकार, मॉडलिंग या अन्य प्रासंगिक मानदंडों के अनुसार उत्पादन का आयोजन करें ताकि विभिन्न प्रशिक्षण कार्यों पर उपसेट्स का चयन सुविधाजनक हो सके।

निष्कर्षों के लिए

एआई और मशीन सीखने के लिए डीआईसीओएम डेटासेट तैयार करना गोपनीयता, सामंजस्य और प्रारूप संगतता पर सावधानीपूर्वक ध्यान देने की आवश्यकता होती है. .NET में Aspose.Medical का उपयोग करके, आप स्वचालित पाइपलाइनों का निर्माण कर सकते हैं जो लगातार प्रोफाइलों के साथ अध्ययनों को गुमनाम बनाते हैं, एमएल फ्रेम इंजेक्शन के लिये जेएसओएन में मेटाडेटा निर्यात करते हैं और पुनरावृत्ति के उद्देश्य से ऑडिट ट्रैक बनाए रखते हुए।

यह कार्यप्रवाह यह सुनिश्चित करता है कि आपका अनुसंधान डेटा उचित रूप से अज्ञात, अच्छी तरह से संरचित है, और चिकित्सा छवि एआई की अगली पीढ़ी के लिए तैयार है।

अधिक जानकारी और उदाहरण के लिए, देखें मेडिकल दस्तावेज - Medical Documentationपूरी एपीआई क्षमताओं का परीक्षण करने के लिए, मुक्त अस्थायी लाइसेंस प्राप्त कर.

More in this category