rsna-anonymizer 19.1.0.dev4__tar.gz → 19.1.0.dev5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/CHANGELOG.md +6 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/PKG-INFO +5 -5
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/pyproject.toml +1 -1
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/readme.de.md +4 -4
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/readme.es.md +4 -4
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/readme.fr.md +4 -4
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/readme.md +4 -4
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/batch_process.py +23 -1
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/metadata/detect.py +53 -28
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/ner/entity.py +3 -2
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/pixel/ocr_pipeline.py +82 -25
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/pixel/remove_pixel_phi.py +26 -5
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/pixel/whitelist_io.py +4 -1
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/term_similarity.py +10 -4
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/phi/phi_io.py +22 -2
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/series/create_projections.py +9 -5
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/series/series_io.py +3 -2
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/model/anonymizer.py +110 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/utils/dicom.py +19 -3
- rsna_anonymizer-19.1.0.dev5/src/anonymizer/utils/windowing.py +209 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/ai/ai_batch_process_options_dialog.py +152 -30
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/common/app_window.py +23 -1
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/common/tk_mouse.py +4 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/reports/report_text_review.py +8 -2
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/series/histogram.py +40 -8
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/series/image.py +46 -20
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/series/metadata_assessment_dialog.py +41 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/series/series.py +5 -7
- rsna_anonymizer-19.1.0.dev4/src/anonymizer/utils/windowing.py +0 -90
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/.gitignore +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/LICENSE +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/anonymizer.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/analytics/organ_volume_ranges_ml.json +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/dicom_standard/2025e/json/dict_info.json +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/dicom_standard/2025e/json/iod_info.json +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/dicom_standard/2025e/json/module_info.json +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/dicom_standard/2025e/json/uid_info.json +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/dicom_standard/2025e/json/version +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/dicom_standard/SOURCE.md +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/fonts/DINAlternate-Bold.ttf +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/icons/create_icns.sh +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/icons/kaleidoscope.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/icons/kaleidoscope_flat.svg +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/icons/kaleidoscope_stack_angle.svg +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/icons/kaleidoscope_stack_vert.svg +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/icons/pause.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/icons/play.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/icons/rsna_icon.icns +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/icons/rsna_icon.ico +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/icons/rsna_icon.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/icons/rsna_logo_alpha.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/icons/rsna_logo_head_profile.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/icons/rsna_logo_head_profile_1024x1024.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/icons/rsna_logo_head_profile_titled.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/icons/rsna_titled_logo.svg +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/icons/rsna_titled_logo_alpha.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/icons/signpath_logo.svg +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/LC_MESSAGES/messages.mo +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/LC_MESSAGES/messages.po +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/1_/303/274bersicht.html" +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/2_deidentifikationsprotokoll.html +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/3_anonymisierungsprojekte_verwalten.html +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/4_projekteinstellungen.html +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/5_bedienung.html +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/6_lizenz.html +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/images/AWSCognitoCredentials.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/images/AbfrageAbrufenImportieren.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/images/Auswahlabfrage.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/images/BildarchivQRServer.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/images/Dashboard.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/images/Dateiauswahloptionen.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/images/DateienImportieren.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/images/ExportServer.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/images/ExportStudienAWS.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/images/ExportStudienStatus.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/images/ImportlokalenDateisystem.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/images/KlonenProjekts.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/images/LokalerServer.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/images/Modalit/303/244ten.png" +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/images/Netzwerk-Zeit/303/274berschreitungen.png" +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/images/NeueProjekteinstellungen.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/images/NeuesProjekt.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/images/Patienten-Such-CSV-Datei.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/images/PatientenPHI.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/images/Projektschlie/303/237en.png" +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/images/Protokollierungsstufen.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/images/Speicherklassen.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/images/Speicherverzeichnis.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/images/TransferSyntaxen.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/images/VerzeichnisAusw/303/244hlen.png" +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/images/Welcome_de_osx_light.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/images/Welcome_de_win_light.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/html/images/Wiederer/303/266ffnenProjekts.png" +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/whitelists/ct.txt +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/whitelists/dx.txt +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/whitelists/mg.txt +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/whitelists/mr.txt +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/de/whitelists/us.txt +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/LC_MESSAGES/messages.mo +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/LC_MESSAGES/messages.po +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/LOINC_StudyDescription.csv +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/1_overview.html +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/2_ai features.html +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/3_deidentification protocol.html +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/4_managing anonymization projects.html +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/5_project settings.html +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/6_operation.html +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/7_license.html +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/ai_features/ai batch process.html +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/ai_features/embedded_phi.html +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/ai_features/face de-identify.html +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/ai_features/harmonize.html +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/ai_features/remove burnt-in annotation.html +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/images/AWSCognitoCredentials.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/images/CloneProject.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/images/CloseProject.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/images/Dashboard.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/images/ExportServer.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/images/ExportStudiesAWS.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/images/ExportStudiesStatus.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/images/ImportFilesDialog.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/images/ImportFilesMenu.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/images/ImportStudiesDialog.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/images/ImportStudiesResult.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/images/LocalServer.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/images/LoggingLevels.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/images/Modalities.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/images/NetworkTimeouts.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/images/NewProject.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/images/NewProjectSettings.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/images/OpenLogViewer.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/images/OpenRecent.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/images/PatientLookupData.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/images/PatientLookupSave.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/images/QueryRetrieveImport.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/images/QueryServer.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/images/SelectDirectory.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/images/SelectFiles.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/images/SelectQuery.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/images/StorageClasses.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/images/StorageDirectory.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/images/TransferSyntaxes.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/images/Welcome_en_osx_light.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/html/images/Welcome_en_win_light.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/whitelists/ct.txt +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/whitelists/dx.txt +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/whitelists/mg.txt +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/whitelists/mr.txt +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/en_US/whitelists/us.txt +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/LC_MESSAGES/messages.mo +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/LC_MESSAGES/messages.po +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/1_visi/303/263n general.html" +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/2_protocolo de desidentificaci/303/263n.html" +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/3_gesti/303/263n de proyectos.html" +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/4_configuraci/303/263n del proyecto.html" +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/5_operaci/303/263n.html" +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/6_licencia.html +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/images/AWSCognitoCredenciales.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/images/AbrirReciente.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/images/CerrarProyecto.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/images/ClasesDeAlmacenamiento.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/images/Clonaci/303/263nDeProyecto.png" +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/images/Configuraci/303/263nDelProyecto.png" +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/images/ConsultarRecuperarImportar.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/images/DatosDeB/303/272squedaDePaciente.png" +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/images/DirectorioDeAlmacenamiento.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/images/ExportarEstudiosAWS.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/images/ExportarEstudiosEstado.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/images/GuardarB/303/272squedaDePaciente.png" +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/images/ImportarArchivos.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/images/ImportarArchivosDi/303/241logo.png" +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/images/ImportarEstudiosDi/303/241logo.png" +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/images/ImportarEstudiosResultado.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/images/Modalidades.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/images/NivelesDeRegistro.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/images/NuevoProyecto.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/images/PanelDeControl.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/images/SeleccionarArchivos.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/images/SeleccionarDirectorio.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/images/SeleccionarImportar.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/images/ServidorDeConsulta.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/images/ServidorDeExportaci/303/263n.png" +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/images/ServidorLocal.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/images/SintaxisDeTransferencia.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/images/TimeoutsDeRed.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/images/Welcome_es_osx_light.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html/images/Welcome_es_win_light.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html_bak/1_visi/303/263n general.html" +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html_bak/2_protocolo de desidentificaci/303/263n.html" +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html_bak/3_gesti/303/263n de proyectos.html" +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html_bak/4_configuraci/303/263n del proyecto.html" +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html_bak/5_operaci/303/263n.html" +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/html_bak/6_licencia.html +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/whitelists/ct.txt +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/whitelists/dx.txt +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/whitelists/mg.txt +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/whitelists/mr.txt +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/es/whitelists/us.txt +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/extract_translations.sh +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/fr/LC_MESSAGES/messages.mo +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/fr/LC_MESSAGES/messages.po +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/fr/html/1_aper/303/247u.html" +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/fr/html/2_protocole de d/303/251sidentification.html" +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/fr/html/3_gestion de projet.html +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/fr/html/4_param/303/250tres du projet.html" +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/fr/html/5_op/303/251ration.html" +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/fr/html/6_licence.html +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/fr/html/images/Welcome_fr_osx_light.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/fr/html/images/Welcome_fr_win_light.png +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/fr/whitelists/ct.txt +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/fr/whitelists/dx.txt +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/fr/whitelists/mg.txt +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/fr/whitelists/mr.txt +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/fr/whitelists/us.txt +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/messages.pot +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/locales/update_translations.sh +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/scripts/README.md +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/scripts/default-anonymizer.script +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/tcia_kb/TCIAPrivateTagKB-02-01-2024-formatted.csv +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/themes/dark-blue.json +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/assets/themes/rsna_theme.json +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/batch_config.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/blur_face/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/blur_face/pipeline.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/blur_face/status.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/README.md +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/classify_series.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/entity_labels.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/metadata/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/metadata/extract.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/metadata/iod_allowlist.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/metadata/iod_qc.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/metadata/ner_compile.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/metadata/scrub.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/metadata/series_assessment.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/metadata/series_index.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/metadata/viewer_tree.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/ner/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/ner/cache.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/ner/engine.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/ner/pools/en_US/SOURCE.md +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/ner/pools/en_US/cities.txt +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/ner/pools/en_US/first_names.txt +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/ner/pools/en_US/first_names_female.txt +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/ner/pools/en_US/first_names_male.txt +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/ner/pools/en_US/last_names.txt +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/ner/pools/en_US/streets.txt +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/ner/radiology_filters.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/ner/synthetic_phi.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/pixel/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/pixel/cache.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/pixel/detect_text.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/pixel/exclude_zones.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/pixel/ocr_transcript_sr.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/pixel/remove_scope.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/report/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/embedded_phi/report/process_report_text.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/feature_availability.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/feature_ids.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/harmonize/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/harmonize/_playbook_gettext.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/harmonize/description_components.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/harmonize/description_mapping_store.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/harmonize/docs/XR_US_MG.md +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/harmonize/loinc_study.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/harmonize/model_slot.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/harmonize/pipeline.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/harmonize/playbook.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/harmonize/playbook_planar.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/harmonize/profile_2d.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/harmonize/timings.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/harmonize/xp_bodypart/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/harmonize/xp_bodypart/cache.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/harmonize/xp_bodypart/fuse.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/harmonize/xp_bodypart/labels.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/harmonize/xp_bodypart/model.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/harmonize/xp_bodypart/predict.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/harmonize/xp_bodypart/preprocess.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/harmonize/xr_chest_view/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/harmonize/xr_chest_view/cache.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/harmonize/xr_chest_view/fuse.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/harmonize/xr_chest_view/labels.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/harmonize/xr_chest_view/model.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/harmonize/xr_chest_view/predict.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/harmonize/xr_chest_view/preprocess.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/model_download.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/tseg/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/tseg/cache.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/tseg/config.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/tseg/contrast.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/tseg/dicom_geometry.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/tseg/docs/README.md +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/tseg/face_gate.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/tseg/geometry_types.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/tseg/head_signals.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/tseg/ml_env.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/tseg/modality_profile.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/tseg/model_cache.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/tseg/readiness.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/tseg/regions.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/tseg/seg_retention.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/tseg/segment.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/tseg/series_classification.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ai/tseg/ts_probe.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/analytics/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/analytics/dataset.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/analytics/ledger.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/analytics/prefs.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/annotations/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/annotations/brush.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/annotations/export_dicom_seg.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/annotations/export_nii.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/annotations/import_nii.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/annotations/planar_geometry.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/annotations/store.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/annotations/volumes.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/anonymizer.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/ctp_lookup.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/dates.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/dicom/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/dicom/association.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/dicom/dicomweb/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/dicom/dicomweb/qido.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/dicom/dicomweb/session.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/dicom/dicomweb/stow.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/dicom/dicomweb/wado.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/dicom/echo_scu.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/dicom/find_scu.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/dicom/hierarchies.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/dicom/requests.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/dicom/retrieve_scu.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/dicom/scp.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/dicom/store_scu.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/headless.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/headless_io.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/jobs/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/jobs/runner.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/jobs/work_state.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/phi/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/private_tags/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/private_tags/convert_tcia_private_kb.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/private_tags/dateinc.txt +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/private_tags/private_tags.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/private_tags/tcia_kb_data.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/project.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/script/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/script/compile.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/script/date_rules.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/script/document.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/script/e1_1_basic_profile.json +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/script/e1_1_retain_tags.json +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/script/operands.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/script/option_explanations.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/script/options.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/script/paths.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/script/retain_option_tags.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/script/tcia_research_operands.json +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/series/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/series/series_overlay.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/controller/series/workspace.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/mcp/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/mcp/api/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/mcp/api/catalog.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/mcp/api/handlers.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/mcp/api/schema_json.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/mcp/api/schemas.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/mcp/api/wire.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/mcp/assets/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/mcp/assets/instructions.md +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/mcp/assets/setup_help.json +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/mcp/instructions.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/mcp/middleware/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/mcp/middleware/call_logging.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/mcp/modality_tokens.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/mcp/ops.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/mcp/server.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/mcp/session.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/mcp/snapshots.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/model/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/model/project.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/model/settings_validate.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/model/sqlite_schema.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/utils/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/utils/app_state.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/utils/dicom_dictionary.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/utils/logging.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/utils/memory.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/utils/modalities.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/utils/network.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/utils/storage/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/utils/storage/dicom_tree.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/utils/storage/java_index.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/utils/translate.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/utils/version.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/ai/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/ai/ai_batch_process_dialog.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/ai/ai_features_dialog.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/ai/blur_face_results.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/ai/face_blur_review_dialog.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/ai/features/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/ai/features/availability.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/ai/features/catalog.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/ai/features/look.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/ai/features/panel.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/ai/harmonize_description.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/ai/harmonize_results.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/ai/harmonize_run_options_dialog.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/ai/modality_whitelist_preview_dialog.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/ai/set_description_dialog.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/common/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/common/ctk_safe.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/common/filesystem_drop.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/common/fonts.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/common/help_docs.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/common/html_view.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/common/job_poller.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/common/navigation.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/common/phi_action_labels.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/common/tooltip.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/common/treeview_chrome.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/common/ux_fields.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/ocr_ui.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/project/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/project/dataset.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/project/delete_studies_dialog.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/project/description_mappings.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/project/export.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/project/import_files_dialog.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/project/import_studies_dialog.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/project/query_retrieve_import.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/reports/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/reports/entity_colors.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/reports/entity_legend.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/reports/open_workspace.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/reports/pdf_page_view.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/reports/report_canvas.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/series/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/series/anatomy_overlay.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/series/new_segment_dialog.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/series/projection.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/series/series_overlay.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/settings/anonymizer_script_dialog.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/settings/aws_cognito_dialog.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/settings/deidentification_options_dialog.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/settings/dicom_node_dialog.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/settings/logging_levels_dialog.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/settings/lookup_table_dialog.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/settings/modalites_dialog.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/settings/network_timeouts_dialog.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/settings/script_editor.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/settings/settings_dialog.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/settings/sop_classes_dialog.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/settings/transfer_syntaxes_dialog.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/shell/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/shell/analytics_charts.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/shell/dashboard.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/anonymizer/view/shell/welcome.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/eval/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/eval/midi_b/README.md +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/eval/midi_b/__init__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/eval/midi_b/__main__.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/eval/midi_b/answer_filter.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/eval/midi_b/assets/AiBatchConfig.json +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/eval/midi_b/assets/ProjectModel.json +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/eval/midi_b/assets/smoke20_random_patients.json +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/eval/midi_b/cli.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/eval/midi_b/inventory.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/eval/midi_b/ner_presentation_probe.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/eval/midi_b/paths.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/eval/midi_b/project_prep.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/eval/midi_b/report.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/eval/midi_b/score_official.py +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/eval/midi_b/scorecards/README.md +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/eval/midi_b/scorecards/source_answer_errors.md +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/eval/midi_b/scorecards/test_20261101_full.md +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/eval/midi_b/scorecards/validation_20261101_full.md +0 -0
- {rsna_anonymizer-19.1.0.dev4 → rsna_anonymizer-19.1.0.dev5}/src/eval/midi_b/vendor/README.md +0 -0
|
@@ -6,6 +6,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [19.1.0.dev5]
|
|
10
|
+
- PyPI development pre-release of 19.1 on branch `dev` (install with `uv pip install --pre rsna-anonymizer`)
|
|
11
|
+
- After metadata PHI removal (Series View Metadata Save and AI Batch), Dataset Original Description and Embedded PHI columns refresh from cleaned Study/Series Description and removed spans; lookup CSV adds CleanedStudyDescription and CleanedSeriesDescription after the sticky Study/Series Description columns
|
|
12
|
+
- AI Batch Embedded PHI: Pixel PHI / Metadata / Reports path checkboxes; Match strictness and Whitelist stay visible when Pixel PHI is off
|
|
13
|
+
- Series View windowing keeps PET window widths below one, with shared auto-window helpers and projection/default-window alignment
|
|
14
|
+
|
|
9
15
|
## [19.1.0.dev4]
|
|
10
16
|
- PyPI development pre-release of 19.1 on branch `dev` (install with `uv pip install --pre rsna-anonymizer`)
|
|
11
17
|
- PyPI source archive and wheel ship the installable packages. Pixel PHI experiment output is no longer stored in the repository. Help-site screenshots and the curated DICOM fixtures stay in git.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: rsna-anonymizer
|
|
3
|
-
Version: 19.1.0.
|
|
3
|
+
Version: 19.1.0.dev5
|
|
4
4
|
Summary: RSNA DICOM Anonymizer
|
|
5
5
|
Project-URL: Homepage, https://github.com/RSNA/anonymizer
|
|
6
6
|
Author-email: Algorhythm Software <michael@dx.life>
|
|
@@ -62,7 +62,7 @@ Other languages: [Deutsch](readme.de.md), [Español](readme.es.md), [Français](
|
|
|
62
62
|
[](https://pypi.org/project/rsna-anonymizer/)
|
|
63
63
|
[](https://www.python.org/downloads/)
|
|
64
64
|
|
|
65
|
-
**Version 19.1.0.
|
|
65
|
+
**Version 19.1.0.dev5** is the current 19.1 development pre-release on the `dev` branch (`uv pip install --pre rsna-anonymizer`). Stable **19.0.10** remains on `master`. Requires **Python 3.11–3.14** with **tkinter** built in. Prefer **3.12** for the widest Tk/AI wheel coverage; avoid **3.14.1** (torchvision excludes that patch).
|
|
66
66
|
|
|
67
67
|
## Install
|
|
68
68
|
|
|
@@ -88,7 +88,7 @@ uv --version
|
|
|
88
88
|
|
|
89
89
|
### 2. Install Python with tkinter, then the app
|
|
90
90
|
|
|
91
|
-
The desktop UI needs **tkinter**. Install a Python that ships with it, then create the venv and install **19.1.0.
|
|
91
|
+
The desktop UI needs **tkinter**. Install a Python that ships with it, then create the venv and install **19.1.0.dev5** (`--pre`):
|
|
92
92
|
|
|
93
93
|
| Platform | Ensure tkinter is available |
|
|
94
94
|
| --- | --- |
|
|
@@ -101,7 +101,7 @@ uv python install 3.12 # or: 3.11 / 3.13 / 3.14
|
|
|
101
101
|
uv venv rsna-anonymizer --python 3.12 # or: --python 3.11 / 3.13 / 3.14
|
|
102
102
|
source rsna-anonymizer/bin/activate # Windows: rsna-anonymizer\Scripts\activate
|
|
103
103
|
|
|
104
|
-
uv pip install --pre rsna-anonymizer # version 19.1.0.
|
|
104
|
+
uv pip install --pre rsna-anonymizer # version 19.1.0.dev5
|
|
105
105
|
```
|
|
106
106
|
|
|
107
107
|
### 3. Verify the install
|
|
@@ -109,7 +109,7 @@ uv pip install --pre rsna-anonymizer # version 19.1.0.dev4
|
|
|
109
109
|
```bash
|
|
110
110
|
python --version # 3.11.x–3.14.x
|
|
111
111
|
python -m tkinter # a small Tk window must open — required for the UI
|
|
112
|
-
rsna-anonymizer --version # should report 19.1.0.
|
|
112
|
+
rsna-anonymizer --version # should report 19.1.0.dev5
|
|
113
113
|
```
|
|
114
114
|
|
|
115
115
|
If `python -m tkinter` fails, the venv’s Python was built without Tk: fix the platform step above, recreate the venv, and reinstall.
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
[](https://pypi.org/project/rsna-anonymizer/)
|
|
8
8
|
[](https://www.python.org/downloads/)
|
|
9
9
|
|
|
10
|
-
**Version 19.1.0.
|
|
10
|
+
**Version 19.1.0.dev5** ist die aktuelle 19.1-Entwicklungs-Vorabversion auf dem Branch `dev` (`uv pip install --pre rsna-anonymizer`). Stabil bleibt **19.0.10** auf `master`. Benötigt **Python 3.11–3.14** mit eingebautem **tkinter**. Empfohlen ist **3.12**; **3.14.1** vermeiden (torchvision schließt diesen Patch aus).
|
|
11
11
|
|
|
12
12
|
## Installation
|
|
13
13
|
|
|
@@ -33,7 +33,7 @@ uv --version
|
|
|
33
33
|
|
|
34
34
|
### 2. Python mit tkinter und die App installieren
|
|
35
35
|
|
|
36
|
-
Die Desktop-Oberfläche braucht **tkinter**. Installieren Sie ein Python mit tkinter, erstellen Sie die venv und installieren Sie **19.1.0.
|
|
36
|
+
Die Desktop-Oberfläche braucht **tkinter**. Installieren Sie ein Python mit tkinter, erstellen Sie die venv und installieren Sie **19.1.0.dev5** (`--pre`):
|
|
37
37
|
|
|
38
38
|
| Plattform | tkinter verfügbar machen |
|
|
39
39
|
| --- | --- |
|
|
@@ -46,7 +46,7 @@ uv python install 3.12 # or: 3.11 / 3.13 / 3.14
|
|
|
46
46
|
uv venv rsna-anonymizer --python 3.12 # or: --python 3.11 / 3.13 / 3.14
|
|
47
47
|
source rsna-anonymizer/bin/activate # Windows: rsna-anonymizer\Scripts\activate
|
|
48
48
|
|
|
49
|
-
uv pip install --pre rsna-anonymizer # version 19.1.0.
|
|
49
|
+
uv pip install --pre rsna-anonymizer # version 19.1.0.dev5
|
|
50
50
|
```
|
|
51
51
|
|
|
52
52
|
### 3. Installation prüfen
|
|
@@ -54,7 +54,7 @@ uv pip install --pre rsna-anonymizer # version 19.1.0.dev4
|
|
|
54
54
|
```bash
|
|
55
55
|
python --version # 3.11.x–3.14.x
|
|
56
56
|
python -m tkinter # a small Tk window must open — required for the UI
|
|
57
|
-
rsna-anonymizer --version # should report 19.1.0.
|
|
57
|
+
rsna-anonymizer --version # should report 19.1.0.dev5
|
|
58
58
|
```
|
|
59
59
|
|
|
60
60
|
Wenn `python -m tkinter` fehlschlägt, wurde das Python der venv ohne Tk gebaut: Plattformschritt oben korrigieren, venv neu anlegen und neu installieren.
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
[](https://pypi.org/project/rsna-anonymizer/)
|
|
8
8
|
[](https://www.python.org/downloads/)
|
|
9
9
|
|
|
10
|
-
**La versión 19.1.0.
|
|
10
|
+
**La versión 19.1.0.dev5** es la prelanzamiento de desarrollo 19.1 actual en la rama `dev` (`uv pip install --pre rsna-anonymizer`). La estable **19.0.10** permanece en `master`. Requiere **Python 3.11–3.14** con **tkinter** incluido. Se recomienda **3.12**; evite **3.14.1** (torchvision excluye ese parche).
|
|
11
11
|
|
|
12
12
|
## Instalación
|
|
13
13
|
|
|
@@ -33,7 +33,7 @@ uv --version
|
|
|
33
33
|
|
|
34
34
|
### 2. Instalar Python con tkinter y la aplicación
|
|
35
35
|
|
|
36
|
-
La interfaz de escritorio necesita **tkinter**. Instale un Python que lo incluya, cree el venv e instale **19.1.0.
|
|
36
|
+
La interfaz de escritorio necesita **tkinter**. Instale un Python que lo incluya, cree el venv e instale **19.1.0.dev5** (`--pre`):
|
|
37
37
|
|
|
38
38
|
| Plataforma | Asegurar tkinter |
|
|
39
39
|
| --- | --- |
|
|
@@ -46,7 +46,7 @@ uv python install 3.12 # or: 3.11 / 3.13 / 3.14
|
|
|
46
46
|
uv venv rsna-anonymizer --python 3.12 # or: --python 3.11 / 3.13 / 3.14
|
|
47
47
|
source rsna-anonymizer/bin/activate # Windows: rsna-anonymizer\Scripts\activate
|
|
48
48
|
|
|
49
|
-
uv pip install --pre rsna-anonymizer # version 19.1.0.
|
|
49
|
+
uv pip install --pre rsna-anonymizer # version 19.1.0.dev5
|
|
50
50
|
```
|
|
51
51
|
|
|
52
52
|
### 3. Verificar la instalación
|
|
@@ -54,7 +54,7 @@ uv pip install --pre rsna-anonymizer # version 19.1.0.dev4
|
|
|
54
54
|
```bash
|
|
55
55
|
python --version # 3.11.x–3.14.x
|
|
56
56
|
python -m tkinter # a small Tk window must open — required for the UI
|
|
57
|
-
rsna-anonymizer --version # should report 19.1.0.
|
|
57
|
+
rsna-anonymizer --version # should report 19.1.0.dev5
|
|
58
58
|
```
|
|
59
59
|
|
|
60
60
|
Si `python -m tkinter` falla, el Python del venv se compiló sin Tk: corrija el paso de la plataforma, recree el venv y reinstale.
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
[](https://pypi.org/project/rsna-anonymizer/)
|
|
8
8
|
[](https://www.python.org/downloads/)
|
|
9
9
|
|
|
10
|
-
**La version 19.1.0.
|
|
10
|
+
**La version 19.1.0.dev5** est la préversion de développement 19.1 actuelle sur la branche `dev` (`uv pip install --pre rsna-anonymizer`). La stable **19.0.10** reste sur `master`. Nécessite **Python 3.11–3.14** avec **tkinter** intégré. Préférez **3.12** ; évitez **3.14.1** (torchvision exclut ce correctif).
|
|
11
11
|
|
|
12
12
|
## Installation
|
|
13
13
|
|
|
@@ -33,7 +33,7 @@ uv --version
|
|
|
33
33
|
|
|
34
34
|
### 2. Installer Python avec tkinter, puis l’application
|
|
35
35
|
|
|
36
|
-
L’interface de bureau a besoin de **tkinter**. Installez un Python qui l’inclut, créez le venv et installez **19.1.0.
|
|
36
|
+
L’interface de bureau a besoin de **tkinter**. Installez un Python qui l’inclut, créez le venv et installez **19.1.0.dev5** (`--pre`) :
|
|
37
37
|
|
|
38
38
|
| Plateforme | Assurer la disponibilité de tkinter |
|
|
39
39
|
| --- | --- |
|
|
@@ -46,7 +46,7 @@ uv python install 3.12 # or: 3.11 / 3.13 / 3.14
|
|
|
46
46
|
uv venv rsna-anonymizer --python 3.12 # or: --python 3.11 / 3.13 / 3.14
|
|
47
47
|
source rsna-anonymizer/bin/activate # Windows: rsna-anonymizer\Scripts\activate
|
|
48
48
|
|
|
49
|
-
uv pip install --pre rsna-anonymizer # version 19.1.0.
|
|
49
|
+
uv pip install --pre rsna-anonymizer # version 19.1.0.dev5
|
|
50
50
|
```
|
|
51
51
|
|
|
52
52
|
### 3. Vérifier l’installation
|
|
@@ -54,7 +54,7 @@ uv pip install --pre rsna-anonymizer # version 19.1.0.dev4
|
|
|
54
54
|
```bash
|
|
55
55
|
python --version # 3.11.x–3.14.x
|
|
56
56
|
python -m tkinter # a small Tk window must open — required for the UI
|
|
57
|
-
rsna-anonymizer --version # should report 19.1.0.
|
|
57
|
+
rsna-anonymizer --version # should report 19.1.0.dev5
|
|
58
58
|
```
|
|
59
59
|
|
|
60
60
|
Si `python -m tkinter` échoue, le Python du venv a été compilé sans Tk : corrigez l’étape plateforme ci-dessus, recréez le venv et réinstallez.
|
|
@@ -9,7 +9,7 @@ Other languages: [Deutsch](readme.de.md), [Español](readme.es.md), [Français](
|
|
|
9
9
|
[](https://pypi.org/project/rsna-anonymizer/)
|
|
10
10
|
[](https://www.python.org/downloads/)
|
|
11
11
|
|
|
12
|
-
**Version 19.1.0.
|
|
12
|
+
**Version 19.1.0.dev5** is the current 19.1 development pre-release on the `dev` branch (`uv pip install --pre rsna-anonymizer`). Stable **19.0.10** remains on `master`. Requires **Python 3.11–3.14** with **tkinter** built in. Prefer **3.12** for the widest Tk/AI wheel coverage; avoid **3.14.1** (torchvision excludes that patch).
|
|
13
13
|
|
|
14
14
|
## Install
|
|
15
15
|
|
|
@@ -35,7 +35,7 @@ uv --version
|
|
|
35
35
|
|
|
36
36
|
### 2. Install Python with tkinter, then the app
|
|
37
37
|
|
|
38
|
-
The desktop UI needs **tkinter**. Install a Python that ships with it, then create the venv and install **19.1.0.
|
|
38
|
+
The desktop UI needs **tkinter**. Install a Python that ships with it, then create the venv and install **19.1.0.dev5** (`--pre`):
|
|
39
39
|
|
|
40
40
|
| Platform | Ensure tkinter is available |
|
|
41
41
|
| --- | --- |
|
|
@@ -48,7 +48,7 @@ uv python install 3.12 # or: 3.11 / 3.13 / 3.14
|
|
|
48
48
|
uv venv rsna-anonymizer --python 3.12 # or: --python 3.11 / 3.13 / 3.14
|
|
49
49
|
source rsna-anonymizer/bin/activate # Windows: rsna-anonymizer\Scripts\activate
|
|
50
50
|
|
|
51
|
-
uv pip install --pre rsna-anonymizer # version 19.1.0.
|
|
51
|
+
uv pip install --pre rsna-anonymizer # version 19.1.0.dev5
|
|
52
52
|
```
|
|
53
53
|
|
|
54
54
|
### 3. Verify the install
|
|
@@ -56,7 +56,7 @@ uv pip install --pre rsna-anonymizer # version 19.1.0.dev4
|
|
|
56
56
|
```bash
|
|
57
57
|
python --version # 3.11.x–3.14.x
|
|
58
58
|
python -m tkinter # a small Tk window must open — required for the UI
|
|
59
|
-
rsna-anonymizer --version # should report 19.1.0.
|
|
59
|
+
rsna-anonymizer --version # should report 19.1.0.dev5
|
|
60
60
|
```
|
|
61
61
|
|
|
62
62
|
If `python -m tkinter` fails, the venv’s Python was built without Tk: fix the platform step above, recreate the venv, and reinstall.
|
|
@@ -1298,9 +1298,15 @@ def _scrub_series_descriptors(
|
|
|
1298
1298
|
dcm_paths: Sequence[Path],
|
|
1299
1299
|
replace_mode: str = "blank",
|
|
1300
1300
|
project_dir: Path | None = None,
|
|
1301
|
+
anon_model: AnonymizerModel | None = None,
|
|
1301
1302
|
on_log_detail: Callable[[str], None] | None = None,
|
|
1302
1303
|
) -> tuple[int, list[str]]:
|
|
1303
|
-
"""Run Clean Descriptors on each instance; return (modified_count, removed texts).
|
|
1304
|
+
"""Run Clean Descriptors on each instance; return (modified_count, removed texts).
|
|
1305
|
+
|
|
1306
|
+
When anon_model is set, removed spans are merged into Instance.embedded_phi so
|
|
1307
|
+
the Dataset series row Embedded PHI column updates after the batch refresh.
|
|
1308
|
+
"""
|
|
1309
|
+
del series_path # retained for call-site clarity / future series-level hooks
|
|
1304
1310
|
mode = "synth" if str(replace_mode).strip().lower() == "synth" else "blank"
|
|
1305
1311
|
modified_count = 0
|
|
1306
1312
|
all_removed: list[str] = []
|
|
@@ -1317,6 +1323,20 @@ def _scrub_series_descriptors(
|
|
|
1317
1323
|
if changed:
|
|
1318
1324
|
modified_count += 1
|
|
1319
1325
|
all_removed.extend(removed)
|
|
1326
|
+
if anon_model is not None:
|
|
1327
|
+
if removed:
|
|
1328
|
+
apply_instance_embedded_phi_for_dcm(
|
|
1329
|
+
anon_model, dcm_path, removed, merge=True
|
|
1330
|
+
)
|
|
1331
|
+
# Keep Dataset Original Description in sync with cleaned tags.
|
|
1332
|
+
try:
|
|
1333
|
+
ds = dcmread(str(dcm_path), stop_before_pixels=True, force=True)
|
|
1334
|
+
anon_model.sync_descriptions_from_dataset(ds)
|
|
1335
|
+
except Exception:
|
|
1336
|
+
logger.exception(
|
|
1337
|
+
"Failed to sync Dataset descriptions after Clean Descriptors for %s",
|
|
1338
|
+
dcm_path,
|
|
1339
|
+
)
|
|
1320
1340
|
if on_log_detail is not None and removed:
|
|
1321
1341
|
on_log_detail(f"{dcm_path.name}: " + ", ".join(removed[:8]))
|
|
1322
1342
|
return modified_count, all_removed
|
|
@@ -1386,6 +1406,7 @@ def _apply_remove_pixel_phi_series(
|
|
|
1386
1406
|
dcm_paths=sorted(get_dcm_files(series_path)),
|
|
1387
1407
|
replace_mode=metadata_replace_mode,
|
|
1388
1408
|
project_dir=project_dir,
|
|
1409
|
+
anon_model=anon_model,
|
|
1389
1410
|
on_log_detail=on_log_detail,
|
|
1390
1411
|
)
|
|
1391
1412
|
except Exception as exc: # noqa: BLE001
|
|
@@ -1540,6 +1561,7 @@ def _apply_remove_pixel_phi_series(
|
|
|
1540
1561
|
dcm_paths=dcm_paths,
|
|
1541
1562
|
replace_mode=metadata_replace_mode,
|
|
1542
1563
|
project_dir=project_dir,
|
|
1564
|
+
anon_model=anon_model,
|
|
1543
1565
|
on_log_detail=on_log_detail,
|
|
1544
1566
|
)
|
|
1545
1567
|
all_removed_texts.extend(meta_removed)
|
|
@@ -6,8 +6,9 @@ Explicit workflow (steps 1–5; apply continues 6–7)
|
|
|
6
6
|
2. Compile NER input (Tag Name: value + separators) — see ner_compile.py.
|
|
7
7
|
3. OpenMed on that string (chunk with optional overlap when over char cap).
|
|
8
8
|
4. Remap spans via the compile offset map onto original Content.
|
|
9
|
-
5. Post-NER:
|
|
10
|
-
|
|
9
|
+
5. Post-NER: pixel decide on each span (NER score floor + whitelist-vs-NER
|
|
10
|
+
contest; DICOM VR codes and clinical keep terms in the keep list), anon
|
|
11
|
+
drop, drop whole-cell pure-numeric false IDs, for/caret/Dr. expand, date +
|
|
11
12
|
descriptor PHI pattern fill (IDs, SSN-like, at/by sites, phone, Dr.).
|
|
12
13
|
|
|
13
14
|
Public API
|
|
@@ -60,7 +61,11 @@ from anonymizer.controller.ai.embedded_phi.ner.radiology_filters import (
|
|
|
60
61
|
drop_measurement_digit_id_entities,
|
|
61
62
|
is_anon_identity_tag,
|
|
62
63
|
)
|
|
63
|
-
from anonymizer.controller.ai.embedded_phi.pixel.ocr_pipeline import
|
|
64
|
+
from anonymizer.controller.ai.embedded_phi.pixel.ocr_pipeline import (
|
|
65
|
+
PhiMatchMode,
|
|
66
|
+
phi_accepted_scores,
|
|
67
|
+
thresholds_for,
|
|
68
|
+
)
|
|
64
69
|
from anonymizer.controller.ai.embedded_phi.pixel.whitelist_io import load_modality_phi_match_mode
|
|
65
70
|
from anonymizer.controller.ai.embedded_phi.report.process_report_text import resolve_dataset_whitelist
|
|
66
71
|
from anonymizer.controller.ai.embedded_phi.term_similarity import similarity_term_match
|
|
@@ -121,9 +126,9 @@ def detect_metadata_phi(
|
|
|
121
126
|
locale: NER locale pack.
|
|
122
127
|
whitelist: Terms masked after NER. None loads resolve_dataset_whitelist.
|
|
123
128
|
An explicit list (including empty) is used as given.
|
|
124
|
-
match_mode: PhiMatchMode for whitelist similarity
|
|
125
|
-
None
|
|
126
|
-
|
|
129
|
+
match_mode: PhiMatchMode for whitelist similarity and NER score floors
|
|
130
|
+
on an imaging file. None loads the modality preset (STANDARD when
|
|
131
|
+
unset).
|
|
127
132
|
project_dir: Project storage dir holding per-modality whitelists
|
|
128
133
|
and the compiled *-anonymizer.script (@safe skip).
|
|
129
134
|
modality: Imaging modality code passed to resolve_dataset_whitelist.
|
|
@@ -144,7 +149,6 @@ def detect_metadata_phi(
|
|
|
144
149
|
if whitelist is not None:
|
|
145
150
|
base_terms = list(whitelist)
|
|
146
151
|
effective_match = match_mode or load_modality_phi_match_mode(project_dir, modality)
|
|
147
|
-
similarity = thresholds_for(effective_match).whitelist_similarity
|
|
148
152
|
else:
|
|
149
153
|
resolved = resolve_dataset_whitelist(
|
|
150
154
|
project_dir,
|
|
@@ -154,17 +158,20 @@ def detect_metadata_phi(
|
|
|
154
158
|
modality=modality,
|
|
155
159
|
)
|
|
156
160
|
base_terms = list(resolved.terms)
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
161
|
+
if match_mode is not None:
|
|
162
|
+
effective_match = match_mode
|
|
163
|
+
else:
|
|
164
|
+
code = modality or (resolved.modalities[0] if resolved.modalities else None)
|
|
165
|
+
effective_match = load_modality_phi_match_mode(project_dir, code)
|
|
160
166
|
logger.info(
|
|
161
|
-
"Clean Descriptors whitelist source=%s modalities=%s terms=%d
|
|
167
|
+
"Clean Descriptors whitelist source=%s modalities=%s terms=%d mode=%s",
|
|
162
168
|
resolved.source,
|
|
163
169
|
",".join(resolved.modalities) if resolved.modalities else "—",
|
|
164
170
|
len(resolved.terms),
|
|
165
|
-
|
|
171
|
+
effective_match.value,
|
|
166
172
|
)
|
|
167
173
|
effective_whitelist = _with_dicom_vr_allow_terms(base_terms)
|
|
174
|
+
similarity = thresholds_for(effective_match).whitelist_similarity
|
|
168
175
|
min_length_ratio = 0.70
|
|
169
176
|
|
|
170
177
|
ops = (
|
|
@@ -263,7 +270,7 @@ def detect_metadata_phi(
|
|
|
263
270
|
ents,
|
|
264
271
|
whitelist=effective_whitelist,
|
|
265
272
|
anon_values=anon,
|
|
266
|
-
|
|
273
|
+
match_mode=effective_match,
|
|
267
274
|
min_length_ratio=min_length_ratio,
|
|
268
275
|
)
|
|
269
276
|
whitelist_dropped += w_drop
|
|
@@ -306,9 +313,9 @@ def detect_metadata_phi(
|
|
|
306
313
|
out[text] = tuple(pattern)
|
|
307
314
|
|
|
308
315
|
logger.info(
|
|
309
|
-
"Clean Descriptors step 5/7 post-NER
|
|
316
|
+
"Clean Descriptors step 5/7 post-NER decide_drop=%d anon_drop=%d "
|
|
310
317
|
"pure_numeric_whole_cell_drop=%d expand=%d pattern_fills=%d "
|
|
311
|
-
"with_phi=%d whitelist_terms=%d
|
|
318
|
+
"with_phi=%d whitelist_terms=%d mode=%s wl>=%.2f ner>=%.2f",
|
|
312
319
|
whitelist_dropped,
|
|
313
320
|
anon_dropped,
|
|
314
321
|
numeric_dropped,
|
|
@@ -316,7 +323,9 @@ def detect_metadata_phi(
|
|
|
316
323
|
pattern_added,
|
|
317
324
|
len(out),
|
|
318
325
|
len(effective_whitelist),
|
|
326
|
+
effective_match.value,
|
|
319
327
|
similarity,
|
|
328
|
+
thresholds_for(effective_match).ner_score,
|
|
320
329
|
)
|
|
321
330
|
return out
|
|
322
331
|
|
|
@@ -504,14 +513,15 @@ def _drop_whitelist_and_anon(
|
|
|
504
513
|
*,
|
|
505
514
|
whitelist: Sequence[str],
|
|
506
515
|
anon_values: Sequence[str] | set[str] | frozenset[str],
|
|
507
|
-
|
|
516
|
+
match_mode: PhiMatchMode,
|
|
508
517
|
min_length_ratio: float,
|
|
509
518
|
) -> tuple[list[Entity], int, int]:
|
|
510
|
-
"""Drop post-NER spans
|
|
519
|
+
"""Drop post-NER spans via pixel decide (NER floor + whitelist contest) or anon."""
|
|
511
520
|
anon = frozenset(str(v).strip() for v in anon_values if str(v).strip())
|
|
512
521
|
terms = [str(t).strip() for t in whitelist if str(t).strip()]
|
|
522
|
+
thr = thresholds_for(match_mode)
|
|
513
523
|
kept: list[Entity] = []
|
|
514
|
-
|
|
524
|
+
decide_drop = 0
|
|
515
525
|
a_drop = 0
|
|
516
526
|
for ent in ents:
|
|
517
527
|
span = text[ent.start : ent.end].strip()
|
|
@@ -524,23 +534,38 @@ def _drop_whitelist_and_anon(
|
|
|
524
534
|
span[:60],
|
|
525
535
|
)
|
|
526
536
|
continue
|
|
537
|
+
wl_score: float | None = None
|
|
538
|
+
wl_term: str | None = None
|
|
527
539
|
if terms:
|
|
528
540
|
hit = similarity_term_match(
|
|
529
541
|
span,
|
|
530
542
|
terms,
|
|
531
|
-
threshold=
|
|
543
|
+
threshold=thr.whitelist_similarity,
|
|
532
544
|
min_length_ratio=min_length_ratio,
|
|
533
545
|
)
|
|
534
|
-
if hit.
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
546
|
+
if hit.term is not None:
|
|
547
|
+
wl_score = float(hit.similarity)
|
|
548
|
+
wl_term = hit.term
|
|
549
|
+
if not phi_accepted_scores(
|
|
550
|
+
float(ent.score),
|
|
551
|
+
has_label=bool(str(ent.label or "").strip()),
|
|
552
|
+
whitelist_score=wl_score,
|
|
553
|
+
mode=match_mode,
|
|
554
|
+
):
|
|
555
|
+
decide_drop += 1
|
|
556
|
+
logger.info(
|
|
557
|
+
"Clean Descriptors step 5/7 drop decide span=%r label=%s "
|
|
558
|
+
"ner=%.3f wl=%s term=%r mode=%s",
|
|
559
|
+
span[:60],
|
|
560
|
+
ent.label,
|
|
561
|
+
float(ent.score),
|
|
562
|
+
f"{wl_score:.3f}" if wl_score is not None else "—",
|
|
563
|
+
wl_term,
|
|
564
|
+
match_mode.value,
|
|
565
|
+
)
|
|
566
|
+
continue
|
|
542
567
|
kept.append(ent)
|
|
543
|
-
return kept,
|
|
568
|
+
return kept, decide_drop, a_drop
|
|
544
569
|
|
|
545
570
|
|
|
546
571
|
def _post_ner_pattern_entities(text: str) -> list[Entity]:
|
|
@@ -15,8 +15,9 @@ class Entity:
|
|
|
15
15
|
"""One PHI span: product label plus character offsets into the source string.
|
|
16
16
|
|
|
17
17
|
score is the model's softmax confidence for raw_label (fine-grained HF
|
|
18
|
-
class), not for the mapped product label.
|
|
19
|
-
|
|
18
|
+
class), not for the mapped product label. The NER engine keeps every mapped
|
|
19
|
+
span; pixel Embedded PHI and Clean Descriptors decide apply PhiMatchMode
|
|
20
|
+
floors and the whitelist-vs-NER contest. UI hover shows label only.
|
|
20
21
|
|
|
21
22
|
replacement: when set (metadata PHI tagged with a DICOM keyword as
|
|
22
23
|
label), replace_entities always writes this string — the anonymized
|
|
@@ -13,9 +13,24 @@ PhiMatchMode
|
|
|
13
13
|
PhiMatchThresholds
|
|
14
14
|
whitelist_similarity and ner_score for one mode.
|
|
15
15
|
|
|
16
|
+
WHITELIST_CONFIDENT_SCORE
|
|
17
|
+
Whitelist similarity above this always wins over NER (0.8).
|
|
18
|
+
|
|
19
|
+
WHITELIST_OVER_NER_MARGIN
|
|
20
|
+
Weaker whitelist wins when ner.score < whitelist.score - this margin (0.1).
|
|
21
|
+
|
|
16
22
|
thresholds_for(mode: PhiMatchMode) -> PhiMatchThresholds
|
|
17
23
|
Preset floors for a match mode.
|
|
18
24
|
|
|
25
|
+
whitelist_score_meets_floor(whitelist_score: float | None, mode: PhiMatchMode) -> bool
|
|
26
|
+
True when whitelist_score meets the mode similarity floor.
|
|
27
|
+
|
|
28
|
+
whitelist_overrides_ner_scores(ner_score: float | None, whitelist_score: float | None, mode: PhiMatchMode) -> bool
|
|
29
|
+
Pixel/metadata decide: confident whitelist wins, or weaker hit with margin.
|
|
30
|
+
|
|
31
|
+
phi_accepted_scores(ner_score: float | None, *, has_label: bool, whitelist_score: float | None, mode: PhiMatchMode) -> bool
|
|
32
|
+
True when NER meets the mode floor and whitelist does not override.
|
|
33
|
+
|
|
19
34
|
is_whitelisted(t: OCRText, mode: PhiMatchMode) -> bool
|
|
20
35
|
True when whitelist.score is set and meets the mode similarity floor.
|
|
21
36
|
|
|
@@ -108,9 +123,9 @@ _NER_JOIN_MAX_SKIP_CHARS = 2
|
|
|
108
123
|
_NER_TRAILING_SEPARATORS = frozenset(":-/\\|;,.")
|
|
109
124
|
_PIXEL_NAME_LABELS = frozenset({"FIRST_NAME", "LAST_NAME"})
|
|
110
125
|
# A whitelist score above this always wins over NER.
|
|
111
|
-
|
|
126
|
+
WHITELIST_CONFIDENT_SCORE = 0.8
|
|
112
127
|
# Weaker hits override NER only when ner.score < whitelist.score - this margin.
|
|
113
|
-
|
|
128
|
+
WHITELIST_OVER_NER_MARGIN = 0.1
|
|
114
129
|
# XR (CR/DX) and US burn-in clocks: any separators → HH:MM:SS for NER.
|
|
115
130
|
_CLOCK_NORMALIZE_MODALITIES = frozenset({*XR_MODALITIES, Modality.US})
|
|
116
131
|
# Separators: non-digits and/or digit 8 (EasyOCR often reads ':' as '8'), mixed ok.
|
|
@@ -152,37 +167,81 @@ def thresholds_for(mode: PhiMatchMode) -> PhiMatchThresholds:
|
|
|
152
167
|
return _MATCH_PRESETS[mode]
|
|
153
168
|
|
|
154
169
|
|
|
155
|
-
def
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
170
|
+
def whitelist_score_meets_floor(
|
|
171
|
+
whitelist_score: float | None, mode: PhiMatchMode
|
|
172
|
+
) -> bool:
|
|
173
|
+
"""True when whitelist_score meets the mode similarity floor."""
|
|
174
|
+
if whitelist_score is None:
|
|
175
|
+
return False
|
|
176
|
+
return float(whitelist_score) >= thresholds_for(mode).whitelist_similarity
|
|
159
177
|
|
|
160
178
|
|
|
161
|
-
def
|
|
179
|
+
def whitelist_overrides_ner_scores(
|
|
180
|
+
ner_score: float | None,
|
|
181
|
+
whitelist_score: float | None,
|
|
182
|
+
mode: PhiMatchMode,
|
|
183
|
+
) -> bool:
|
|
162
184
|
"""
|
|
163
|
-
True when
|
|
185
|
+
True when whitelist meets the mode floor and wins over NER.
|
|
164
186
|
|
|
165
187
|
A whitelist score above 0.8 always wins. A weaker hit wins when NER is
|
|
166
188
|
absent or ner.score < whitelist.score - 0.1. Close scores on a fuzzy
|
|
167
189
|
resemblance stay PHI.
|
|
168
190
|
|
|
169
191
|
Args:
|
|
170
|
-
|
|
192
|
+
ner_score: Model confidence for the PHI span, or None when unlabeled.
|
|
193
|
+
whitelist_score: Best keep-term similarity for the span, or None.
|
|
171
194
|
mode: Current PhiMatchMode floors.
|
|
172
195
|
|
|
173
196
|
Returns:
|
|
174
|
-
True when callers should treat the
|
|
197
|
+
True when callers should treat the span as keep-list chrome, not PHI.
|
|
175
198
|
"""
|
|
176
|
-
if not
|
|
177
|
-
return False
|
|
178
|
-
wl_score = t.whitelist.score
|
|
179
|
-
if wl_score is None:
|
|
199
|
+
if not whitelist_score_meets_floor(whitelist_score, mode):
|
|
180
200
|
return False
|
|
181
|
-
|
|
201
|
+
assert whitelist_score is not None
|
|
202
|
+
if float(whitelist_score) > WHITELIST_CONFIDENT_SCORE:
|
|
182
203
|
return True
|
|
183
|
-
if
|
|
204
|
+
if ner_score is None:
|
|
184
205
|
return True
|
|
185
|
-
return float(
|
|
206
|
+
return float(ner_score) < float(whitelist_score) - WHITELIST_OVER_NER_MARGIN
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
def phi_accepted_scores(
|
|
210
|
+
ner_score: float | None,
|
|
211
|
+
*,
|
|
212
|
+
has_label: bool,
|
|
213
|
+
whitelist_score: float | None,
|
|
214
|
+
mode: PhiMatchMode,
|
|
215
|
+
) -> bool:
|
|
216
|
+
"""
|
|
217
|
+
True when NER meets the mode floor and whitelist does not override.
|
|
218
|
+
|
|
219
|
+
Shared by pixel boxes and Clean Descriptors metadata spans.
|
|
220
|
+
|
|
221
|
+
Args:
|
|
222
|
+
ner_score: Model confidence for the PHI span, or None.
|
|
223
|
+
has_label: True when a product PHI label is set.
|
|
224
|
+
whitelist_score: Best keep-term similarity for the span, or None.
|
|
225
|
+
mode: Current PhiMatchMode floors.
|
|
226
|
+
|
|
227
|
+
Returns:
|
|
228
|
+
True when callers should treat the span as Embedded PHI.
|
|
229
|
+
"""
|
|
230
|
+
thr = thresholds_for(mode)
|
|
231
|
+
if not has_label or ner_score is None or float(ner_score) < thr.ner_score:
|
|
232
|
+
return False
|
|
233
|
+
return not whitelist_overrides_ner_scores(ner_score, whitelist_score, mode)
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
def is_whitelisted(t: OCRText, mode: PhiMatchMode) -> bool:
|
|
237
|
+
"""True when whitelist.score is set and score >= mode.whitelist_similarity."""
|
|
238
|
+
return whitelist_score_meets_floor(t.whitelist.score, mode)
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
def _whitelist_overrides_ner(t: OCRText, mode: PhiMatchMode) -> bool:
|
|
242
|
+
"""OCRText wrapper for whitelist_overrides_ner_scores."""
|
|
243
|
+
ner_score = None if t.ner.label is None else t.ner.score
|
|
244
|
+
return whitelist_overrides_ner_scores(ner_score, t.whitelist.score, mode)
|
|
186
245
|
|
|
187
246
|
|
|
188
247
|
def phi_accepted(t: OCRText, mode: PhiMatchMode) -> bool:
|
|
@@ -198,14 +257,12 @@ def phi_accepted(t: OCRText, mode: PhiMatchMode) -> bool:
|
|
|
198
257
|
Returns:
|
|
199
258
|
True when callers should treat the box as Embedded PHI.
|
|
200
259
|
"""
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
t.ner.label is None
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
)
|
|
207
|
-
return False
|
|
208
|
-
return not _whitelist_overrides_ner(t, mode)
|
|
260
|
+
return phi_accepted_scores(
|
|
261
|
+
t.ner.score,
|
|
262
|
+
has_label=t.ner.label is not None,
|
|
263
|
+
whitelist_score=t.whitelist.score,
|
|
264
|
+
mode=mode,
|
|
265
|
+
)
|
|
209
266
|
|
|
210
267
|
|
|
211
268
|
def accepted_phi_entities(t: OCRText, mode: PhiMatchMode) -> tuple[tuple[str, str], ...]:
|