endoreg-db 0.4.5__py3-none-any.whl → 0.8.6.3__py3-none-any.whl
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.
- endoreg_db/admin.py +90 -1
- endoreg_db/api_urls.py +4 -0
- endoreg_db/apps.py +12 -0
- endoreg_db/assets/dummy_model.ckpt +1 -0
- endoreg_db/codemods/readme.md +88 -0
- endoreg_db/codemods/rename_datetime_fields.py +92 -0
- endoreg_db/config/env.py +101 -0
- endoreg_db/data/__init__.py +76 -4
- endoreg_db/data/ai_model/data.yaml +7 -0
- endoreg_db/data/{label → ai_model_label}/label/data.yaml +27 -1
- endoreg_db/data/ai_model_label/label/polyp_classification.yaml +52 -0
- endoreg_db/data/ai_model_label/label-set/data.yaml +40 -0
- endoreg_db/data/ai_model_label/label-set/polyp_classifications.yaml +25 -0
- endoreg_db/data/ai_model_meta/default_multilabel_classification.yaml +27 -0
- endoreg_db/data/ai_model_video_segmentation_label/base_segmentation.yaml +176 -0
- endoreg_db/data/ai_model_video_segmentation_labelset/data.yaml +20 -0
- endoreg_db/data/center/data.yaml +40 -9
- endoreg_db/data/center_shift/ukw.yaml +9 -0
- endoreg_db/data/contraindication/bleeding.yaml +11 -0
- endoreg_db/data/db_summary.csv +58 -0
- endoreg_db/data/db_summary.xlsx +0 -0
- endoreg_db/data/disease/misc.yaml +1 -2
- endoreg_db/data/disease_classification/chronic_kidney_disease.yaml +2 -2
- endoreg_db/data/disease_classification_choice/chronic_kidney_disease.yaml +6 -6
- endoreg_db/data/distribution/numeric/data.yaml +14 -0
- endoreg_db/data/endoscope/data.yaml +93 -0
- endoreg_db/data/endoscopy_processor/data.yaml +3 -0
- endoreg_db/data/event/cardiology.yaml +0 -13
- endoreg_db/data/examination/examinations/data.yaml +34 -28
- endoreg_db/data/examination/type/data.yaml +12 -0
- endoreg_db/data/examination_indication/endoscopy.yaml +424 -0
- endoreg_db/data/examination_indication_classification/endoscopy.yaml +160 -0
- endoreg_db/data/examination_indication_classification_choice/endoscopy.yaml +101 -0
- endoreg_db/data/examination_requirement_set/colonoscopy.yaml +15 -0
- endoreg_db/data/finding/anatomy_colon.yaml +128 -0
- endoreg_db/data/finding/colonoscopy.yaml +40 -0
- endoreg_db/data/finding/colonoscopy_bowel_prep.yaml +56 -0
- endoreg_db/data/finding/complication.yaml +16 -0
- endoreg_db/data/finding/data.yaml +105 -0
- endoreg_db/data/finding/examination_setting.yaml +16 -0
- endoreg_db/data/finding/medication_related.yaml +18 -0
- endoreg_db/data/finding/outcome.yaml +12 -0
- endoreg_db/data/finding_classification/colonoscopy_bowel_preparation.yaml +95 -0
- endoreg_db/data/finding_classification/colonoscopy_jnet.yaml +22 -0
- endoreg_db/data/finding_classification/colonoscopy_kudo.yaml +25 -0
- endoreg_db/data/finding_classification/colonoscopy_lesion_circularity.yaml +20 -0
- endoreg_db/data/finding_classification/colonoscopy_lesion_planarity.yaml +24 -0
- endoreg_db/data/finding_classification/colonoscopy_lesion_size.yaml +68 -0
- endoreg_db/data/finding_classification/colonoscopy_lesion_surface.yaml +20 -0
- endoreg_db/data/finding_classification/colonoscopy_location.yaml +80 -0
- endoreg_db/data/finding_classification/colonoscopy_lst.yaml +21 -0
- endoreg_db/data/finding_classification/colonoscopy_nice.yaml +20 -0
- endoreg_db/data/finding_classification/colonoscopy_paris.yaml +26 -0
- endoreg_db/data/finding_classification/colonoscopy_sano.yaml +22 -0
- endoreg_db/data/finding_classification/colonoscopy_summary.yaml +53 -0
- endoreg_db/data/finding_classification/complication_generic.yaml +25 -0
- endoreg_db/data/finding_classification/examination_setting_generic.yaml +40 -0
- endoreg_db/data/finding_classification/histology_colo.yaml +51 -0
- endoreg_db/data/finding_classification/intervention_required.yaml +26 -0
- endoreg_db/data/finding_classification/medication_related.yaml +23 -0
- endoreg_db/data/finding_classification/visualized.yaml +33 -0
- endoreg_db/data/finding_classification_choice/bowel_preparation.yaml +78 -0
- endoreg_db/data/finding_classification_choice/colon_lesion_circularity_default.yaml +32 -0
- endoreg_db/data/finding_classification_choice/colon_lesion_jnet.yaml +15 -0
- endoreg_db/data/finding_classification_choice/colon_lesion_kudo.yaml +23 -0
- endoreg_db/data/finding_classification_choice/colon_lesion_lst.yaml +15 -0
- endoreg_db/data/finding_classification_choice/colon_lesion_nice.yaml +17 -0
- endoreg_db/data/finding_classification_choice/colon_lesion_paris.yaml +57 -0
- endoreg_db/data/finding_classification_choice/colon_lesion_planarity_default.yaml +49 -0
- endoreg_db/data/finding_classification_choice/colon_lesion_sano.yaml +14 -0
- endoreg_db/data/finding_classification_choice/colon_lesion_surface_intact_default.yaml +36 -0
- endoreg_db/data/finding_classification_choice/colonoscopy_location.yaml +229 -0
- endoreg_db/data/finding_classification_choice/colonoscopy_not_complete_reason.yaml +19 -0
- endoreg_db/data/finding_classification_choice/colonoscopy_size.yaml +82 -0
- endoreg_db/data/finding_classification_choice/colonoscopy_summary_worst_finding.yaml +15 -0
- endoreg_db/data/finding_classification_choice/complication_generic_types.yaml +15 -0
- endoreg_db/data/finding_classification_choice/examination_setting_generic_types.yaml +15 -0
- endoreg_db/data/finding_classification_choice/histology.yaml +24 -0
- endoreg_db/data/finding_classification_choice/histology_polyp.yaml +20 -0
- endoreg_db/data/finding_classification_choice/outcome.yaml +19 -0
- endoreg_db/data/finding_classification_choice/yes_no_na.yaml +11 -0
- endoreg_db/data/finding_classification_type/colonoscopy_basic.yaml +48 -0
- endoreg_db/data/finding_intervention/endoscopy.yaml +43 -0
- endoreg_db/data/finding_intervention/endoscopy_colonoscopy.yaml +168 -0
- endoreg_db/data/finding_intervention/endoscopy_egd.yaml +128 -0
- endoreg_db/data/finding_intervention/endoscopy_ercp.yaml +32 -0
- endoreg_db/data/finding_intervention/endoscopy_eus_lower.yaml +9 -0
- endoreg_db/data/finding_intervention/endoscopy_eus_upper.yaml +36 -0
- endoreg_db/data/finding_intervention_type/endoscopy.yaml +15 -0
- endoreg_db/data/finding_morphology_classification_type/colonoscopy.yaml +79 -0
- endoreg_db/data/finding_type/data.yaml +43 -0
- endoreg_db/data/gender/data.yaml +24 -0
- endoreg_db/data/information_source/annotation.yaml +6 -0
- endoreg_db/data/information_source/endoscopy_guidelines.yaml +7 -0
- endoreg_db/data/information_source/prediction.yaml +7 -0
- endoreg_db/data/information_source_type/data.yaml +8 -0
- endoreg_db/data/lab_value/cardiac_enzymes.yaml +7 -1
- endoreg_db/data/lab_value/coagulation.yaml +6 -1
- endoreg_db/data/lab_value/electrolytes.yaml +39 -1
- endoreg_db/data/lab_value/gastrointestinal_function.yaml +12 -0
- endoreg_db/data/lab_value/hematology.yaml +17 -2
- endoreg_db/data/lab_value/hormones.yaml +6 -0
- endoreg_db/data/lab_value/lipids.yaml +12 -3
- endoreg_db/data/lab_value/misc.yaml +48 -2
- endoreg_db/data/lab_value/renal_function.yaml +2 -1
- endoreg_db/data/lx_client_tag/base.yaml +54 -0
- endoreg_db/data/lx_client_type/base.yaml +30 -0
- endoreg_db/data/lx_permission/base.yaml +24 -0
- endoreg_db/data/lx_permission/endoreg.yaml +52 -0
- endoreg_db/data/medication/anticoagulation.yaml +5 -5
- endoreg_db/data/medication/tah.yaml +5 -5
- endoreg_db/data/medication_indication/anticoagulation.yaml +48 -53
- endoreg_db/data/medication_intake_time/base.yaml +4 -4
- endoreg_db/data/names_first/first_names.yaml +54 -0
- endoreg_db/data/names_last/last_names.yaml +51 -0
- endoreg_db/data/network_device/data.yaml +30 -0
- endoreg_db/data/organ/data.yaml +29 -0
- endoreg_db/data/pdf_type/data.yaml +27 -9
- endoreg_db/data/qualification/endoscopy.yaml +36 -0
- endoreg_db/data/qualification/m2.yaml +39 -0
- endoreg_db/data/qualification/outpatient_clinic.yaml +35 -0
- endoreg_db/data/qualification/sonography.yaml +36 -0
- endoreg_db/data/qualification_type/base.yaml +29 -0
- endoreg_db/data/report_reader_flag/rkh-histology-generic.yaml +10 -0
- endoreg_db/data/report_reader_flag/ukw-examination-generic.yaml +4 -0
- endoreg_db/data/report_reader_flag/ukw-histology-generic.yaml +5 -0
- endoreg_db/data/requirement/age.yaml +26 -0
- endoreg_db/data/requirement/colonoscopy_baseline_austria.yaml +45 -0
- endoreg_db/data/requirement/disease_cardiovascular.yaml +79 -0
- endoreg_db/data/requirement/disease_classification_choice_cardiovascular.yaml +41 -0
- endoreg_db/data/requirement/disease_hepatology.yaml +12 -0
- endoreg_db/data/requirement/disease_misc.yaml +12 -0
- endoreg_db/data/requirement/disease_renal.yaml +96 -0
- endoreg_db/data/requirement/endoscopy_bleeding_risk.yaml +59 -0
- endoreg_db/data/requirement/event_cardiology.yaml +251 -0
- endoreg_db/data/requirement/event_requirements.yaml +145 -0
- endoreg_db/data/requirement/finding_colon_polyp.yaml +50 -0
- endoreg_db/data/requirement/gender.yaml +25 -0
- endoreg_db/data/requirement/lab_value.yaml +441 -0
- endoreg_db/data/requirement/medication.yaml +93 -0
- endoreg_db/data/requirement_operator/age.yaml +13 -0
- endoreg_db/data/requirement_operator/lab_operators.yaml +129 -0
- endoreg_db/data/requirement_operator/model_operators.yaml +96 -0
- endoreg_db/data/requirement_set/01_endoscopy_generic.yaml +48 -0
- endoreg_db/data/requirement_set/colonoscopy_austria_screening.yaml +57 -0
- endoreg_db/data/requirement_set/endoscopy_bleeding_risk.yaml +52 -0
- endoreg_db/data/requirement_set_type/data.yaml +20 -0
- endoreg_db/data/requirement_type/requirement_types.yaml +165 -0
- endoreg_db/data/risk/bleeding.yaml +26 -0
- endoreg_db/data/risk/thrombosis.yaml +37 -0
- endoreg_db/data/risk_type/data.yaml +27 -0
- endoreg_db/data/setup_config.yaml +38 -0
- endoreg_db/data/shift/endoscopy.yaml +21 -0
- endoreg_db/data/shift_type/base.yaml +35 -0
- endoreg_db/data/tag/requirement_set_tags.yaml +11 -0
- endoreg_db/data/unit/concentration.yaml +23 -0
- endoreg_db/data/unit/time.yaml +36 -1
- endoreg_db/exceptions.py +19 -0
- endoreg_db/forms/__init__.py +3 -1
- endoreg_db/forms/examination_form.py +11 -0
- endoreg_db/forms/patient_finding_intervention_form.py +18 -0
- endoreg_db/forms/patient_form.py +27 -0
- endoreg_db/forms/questionnaires/__init__.py +1 -1
- endoreg_db/forms/questionnaires/tto_questionnaire.py +19 -19
- endoreg_db/helpers/count_db.py +45 -0
- endoreg_db/helpers/data_loader.py +208 -0
- endoreg_db/helpers/default_objects.py +378 -0
- endoreg_db/helpers/download_segmentation_model.py +31 -0
- endoreg_db/helpers/interact.py +6 -0
- endoreg_db/helpers/test_video_helper.py +119 -0
- endoreg_db/logger_conf.py +140 -0
- endoreg_db/management/__init__.py +1 -0
- endoreg_db/management/commands/__init__.py +1 -0
- endoreg_db/management/commands/anonymize_video.py +0 -0
- endoreg_db/management/commands/check_auth.py +125 -0
- endoreg_db/management/commands/create_model_meta_from_huggingface.py +115 -0
- endoreg_db/management/commands/create_multilabel_model_meta.py +214 -0
- endoreg_db/management/commands/fix_missing_patient_data.py +172 -0
- endoreg_db/management/commands/fix_video_paths.py +165 -0
- endoreg_db/management/commands/import_fallback_video.py +203 -0
- endoreg_db/management/commands/import_report.py +298 -0
- endoreg_db/management/commands/import_video.py +423 -0
- endoreg_db/management/commands/import_video_with_classification.py +367 -0
- endoreg_db/management/commands/init_default_ai_model.py +112 -0
- endoreg_db/management/commands/load_ai_model_data.py +58 -26
- endoreg_db/management/commands/load_ai_model_label_data.py +59 -0
- endoreg_db/management/commands/load_base_db_data.py +174 -118
- endoreg_db/management/commands/load_center_data.py +46 -21
- endoreg_db/management/commands/{load_logging_data.py → load_contraindication_data.py} +4 -2
- endoreg_db/management/commands/load_disease_data.py +29 -7
- endoreg_db/management/commands/{load_endoscope_type_data.py → load_endoscope_data.py} +30 -7
- endoreg_db/management/commands/load_examination_indication_data.py +86 -0
- endoreg_db/management/commands/load_finding_data.py +128 -0
- endoreg_db/management/commands/load_green_endoscopy_wuerzburg_data.py +0 -1
- endoreg_db/management/commands/load_information_source.py +13 -7
- endoreg_db/management/commands/load_lab_value_data.py +3 -3
- endoreg_db/management/commands/load_medication_data.py +83 -21
- endoreg_db/management/commands/load_name_data.py +37 -0
- endoreg_db/management/commands/{load_medication_intake_time_data.py → load_organ_data.py} +7 -5
- endoreg_db/management/commands/load_qualification_data.py +59 -0
- endoreg_db/management/commands/load_requirement_data.py +180 -0
- endoreg_db/management/commands/load_risk_data.py +56 -0
- endoreg_db/management/commands/load_shift_data.py +60 -0
- endoreg_db/management/commands/load_tag_data.py +57 -0
- endoreg_db/management/commands/register_ai_model.py +1 -1
- endoreg_db/management/commands/setup_endoreg_db.py +381 -0
- endoreg_db/management/commands/start_filewatcher.py +106 -0
- endoreg_db/management/commands/storage_management.py +548 -0
- endoreg_db/management/commands/summarize_db_content.py +189 -0
- endoreg_db/management/commands/validate_video.py +204 -0
- endoreg_db/management/commands/validate_video_files.py +161 -0
- endoreg_db/management/commands/video_validation.py +22 -0
- endoreg_db/mermaid/Overall_flow_patient_finding_intervention.md +10 -0
- endoreg_db/mermaid/anonymized_image_annotation.md +20 -0
- endoreg_db/mermaid/binary_classification_annotation.md +50 -0
- endoreg_db/mermaid/classification.md +8 -0
- endoreg_db/mermaid/examination.md +8 -0
- endoreg_db/mermaid/findings.md +7 -0
- endoreg_db/mermaid/image_classification.md +28 -0
- endoreg_db/mermaid/interventions.md +8 -0
- endoreg_db/mermaid/morphology.md +8 -0
- endoreg_db/mermaid/patient_creation.md +14 -0
- endoreg_db/mermaid/video_segmentation_annotation.md +17 -0
- endoreg_db/migrations/0001_initial.py +1234 -944
- endoreg_db/migrations/0002_add_video_correction_models.py +52 -0
- endoreg_db/migrations/0003_add_center_display_name.py +30 -0
- endoreg_db/models/__init__.py +339 -53
- endoreg_db/models/administration/__init__.py +116 -0
- endoreg_db/models/administration/ai/__init__.py +9 -0
- endoreg_db/models/administration/ai/active_model.py +35 -0
- endoreg_db/models/administration/ai/ai_model.py +156 -0
- endoreg_db/models/{ai_model → administration/ai}/model_type.py +19 -4
- endoreg_db/models/administration/case/__init__.py +19 -0
- endoreg_db/models/administration/case/case.py +114 -0
- endoreg_db/models/{case_template → administration/case/case_template}/__init__.py +10 -1
- endoreg_db/models/{case_template → administration/case/case_template}/case_template.py +60 -16
- endoreg_db/models/{case_template → administration/case/case_template}/case_template_rule.py +6 -13
- endoreg_db/models/{case_template → administration/case/case_template}/case_template_rule_value.py +21 -8
- endoreg_db/models/{case_template → administration/case/case_template}/case_template_type.py +1 -3
- endoreg_db/models/{center → administration/center}/__init__.py +9 -0
- endoreg_db/models/administration/center/center.py +67 -0
- endoreg_db/models/administration/center/center_product.py +64 -0
- endoreg_db/models/administration/center/center_resource.py +49 -0
- endoreg_db/models/administration/center/center_shift.py +88 -0
- endoreg_db/models/administration/center/center_waste.py +30 -0
- endoreg_db/models/administration/permissions/__init__.py +44 -0
- endoreg_db/models/administration/person/__init__.py +24 -0
- endoreg_db/models/administration/person/employee/__init__.py +3 -0
- endoreg_db/models/administration/person/employee/employee.py +35 -0
- endoreg_db/models/administration/person/employee/employee_qualification.py +39 -0
- endoreg_db/models/administration/person/employee/employee_type.py +42 -0
- endoreg_db/models/administration/person/examiner/__init__.py +4 -0
- endoreg_db/models/administration/person/examiner/examiner.py +54 -0
- endoreg_db/models/administration/person/names/__init__.py +0 -0
- endoreg_db/models/{persons → administration/person/names}/first_name.py +1 -1
- endoreg_db/models/{persons → administration/person/names}/last_name.py +2 -3
- endoreg_db/models/administration/person/patient/__init__.py +5 -0
- endoreg_db/models/administration/person/patient/patient.py +460 -0
- endoreg_db/models/administration/person/profession/__init__.py +24 -0
- endoreg_db/models/administration/person/user/__init__.py +5 -0
- endoreg_db/models/administration/person/user/portal_user_information.py +37 -0
- endoreg_db/models/administration/product/__init__.py +14 -0
- endoreg_db/models/administration/product/product.py +97 -0
- endoreg_db/models/administration/product/product_group.py +39 -0
- endoreg_db/models/administration/product/product_material.py +54 -0
- endoreg_db/models/{product → administration/product}/product_weight.py +21 -0
- endoreg_db/models/{product → administration/product}/reference_product.py +44 -13
- endoreg_db/models/administration/qualification/__init__.py +7 -0
- endoreg_db/models/administration/qualification/qualification.py +37 -0
- endoreg_db/models/administration/qualification/qualification_type.py +35 -0
- endoreg_db/models/administration/shift/__init__.py +9 -0
- endoreg_db/models/administration/shift/scheduled_days.py +69 -0
- endoreg_db/models/administration/shift/shift.py +51 -0
- endoreg_db/models/administration/shift/shift_type.py +108 -0
- endoreg_db/models/label/__init__.py +24 -1
- endoreg_db/models/label/annotation/__init__.py +12 -0
- endoreg_db/models/label/annotation/image_classification.py +84 -0
- endoreg_db/models/label/annotation/video_segmentation_annotation.py +66 -0
- endoreg_db/models/label/label.py +53 -54
- endoreg_db/models/label/label_set.py +53 -0
- endoreg_db/models/label/label_type.py +29 -0
- endoreg_db/models/label/label_video_segment/__init__.py +3 -0
- endoreg_db/models/label/label_video_segment/_create_from_video.py +41 -0
- endoreg_db/models/label/label_video_segment/label_video_segment.py +511 -0
- endoreg_db/models/label/video_segmentation_label.py +31 -0
- endoreg_db/models/label/video_segmentation_labelset.py +27 -0
- endoreg_db/models/media/__init__.py +16 -0
- endoreg_db/models/media/frame/__init__.py +3 -0
- endoreg_db/models/media/frame/frame.py +111 -0
- endoreg_db/models/media/pdf/__init__.py +11 -0
- endoreg_db/models/media/pdf/raw_pdf.py +757 -0
- endoreg_db/models/media/pdf/report_file.py +162 -0
- endoreg_db/models/media/pdf/report_reader/__init__.py +7 -0
- endoreg_db/models/media/pdf/report_reader/report_reader_config.py +77 -0
- endoreg_db/models/media/video/__init__.py +8 -0
- endoreg_db/models/media/video/create_from_file.py +358 -0
- endoreg_db/models/media/video/pipe_1.py +213 -0
- endoreg_db/models/media/video/pipe_2.py +105 -0
- endoreg_db/models/media/video/refactor_plan.md +0 -0
- endoreg_db/models/media/video/video_file.py +825 -0
- endoreg_db/models/media/video/video_file_ai.py +443 -0
- endoreg_db/models/media/video/video_file_anonymize.py +349 -0
- endoreg_db/models/media/video/video_file_frames/__init__.py +47 -0
- endoreg_db/models/media/video/video_file_frames/_bulk_create_frames.py +22 -0
- endoreg_db/models/media/video/video_file_frames/_create_frame_object.py +23 -0
- endoreg_db/models/media/video/video_file_frames/_delete_frames.py +104 -0
- endoreg_db/models/media/video/video_file_frames/_extract_frames.py +174 -0
- endoreg_db/models/media/video/video_file_frames/_get_frame.py +28 -0
- endoreg_db/models/media/video/video_file_frames/_get_frame_number.py +27 -0
- endoreg_db/models/media/video/video_file_frames/_get_frame_path.py +20 -0
- endoreg_db/models/media/video/video_file_frames/_get_frame_paths.py +27 -0
- endoreg_db/models/media/video/video_file_frames/_get_frame_range.py +34 -0
- endoreg_db/models/media/video/video_file_frames/_get_frames.py +27 -0
- endoreg_db/models/media/video/video_file_frames/_initialize_frames.py +129 -0
- endoreg_db/models/media/video/video_file_frames/_manage_frame_range.py +141 -0
- endoreg_db/models/media/video/video_file_frames/_mark_frames_extracted_status.py +65 -0
- endoreg_db/models/media/video/video_file_frames.py +0 -0
- endoreg_db/models/media/video/video_file_io.py +168 -0
- endoreg_db/models/media/video/video_file_meta/__init__.py +22 -0
- endoreg_db/models/media/video/video_file_meta/get_crop_template.py +45 -0
- endoreg_db/models/media/video/video_file_meta/get_endo_roi.py +39 -0
- endoreg_db/models/media/video/video_file_meta/get_fps.py +147 -0
- endoreg_db/models/media/video/video_file_meta/initialize_video_specs.py +143 -0
- endoreg_db/models/media/video/video_file_meta/text_meta.py +134 -0
- endoreg_db/models/media/video/video_file_meta/video_meta.py +70 -0
- endoreg_db/models/media/video/video_file_segments.py +209 -0
- endoreg_db/models/media/video/video_metadata.py +65 -0
- endoreg_db/models/media/video/video_processing.py +152 -0
- endoreg_db/models/medical/__init__.py +146 -0
- endoreg_db/models/medical/contraindication/__init__.py +17 -0
- endoreg_db/models/medical/disease.py +156 -0
- endoreg_db/models/medical/event.py +137 -0
- endoreg_db/models/medical/examination/__init__.py +9 -0
- endoreg_db/models/medical/examination/examination.py +148 -0
- endoreg_db/models/medical/examination/examination_indication.py +278 -0
- endoreg_db/models/medical/examination/examination_time.py +49 -0
- endoreg_db/models/medical/examination/examination_time_type.py +41 -0
- endoreg_db/models/medical/examination/examination_type.py +48 -0
- endoreg_db/models/medical/finding/__init__.py +18 -0
- endoreg_db/models/medical/finding/finding.py +96 -0
- endoreg_db/models/medical/finding/finding_classification.py +142 -0
- endoreg_db/models/medical/finding/finding_intervention.py +52 -0
- endoreg_db/models/medical/finding/finding_type.py +35 -0
- endoreg_db/models/medical/hardware/__init__.py +8 -0
- endoreg_db/models/medical/hardware/endoscope.py +65 -0
- endoreg_db/models/{hardware → medical/hardware}/endoscopy_processor.py +68 -29
- endoreg_db/models/medical/laboratory/__init__.py +5 -0
- endoreg_db/models/medical/laboratory/lab_value.py +419 -0
- endoreg_db/models/medical/medication/__init__.py +19 -0
- endoreg_db/models/medical/medication/medication.py +31 -0
- endoreg_db/models/medical/medication/medication_indication.py +50 -0
- endoreg_db/models/medical/medication/medication_indication_type.py +39 -0
- endoreg_db/models/medical/medication/medication_intake_time.py +44 -0
- endoreg_db/models/medical/medication/medication_schedule.py +45 -0
- endoreg_db/models/medical/organ/__init__.py +35 -0
- endoreg_db/models/medical/patient/__init__.py +56 -0
- endoreg_db/models/medical/patient/medication_examples.py +38 -0
- endoreg_db/models/medical/patient/patient_disease.py +63 -0
- endoreg_db/models/medical/patient/patient_event.py +75 -0
- endoreg_db/models/medical/patient/patient_examination.py +249 -0
- endoreg_db/models/medical/patient/patient_examination_indication.py +44 -0
- endoreg_db/models/medical/patient/patient_finding.py +357 -0
- endoreg_db/models/medical/patient/patient_finding_classification.py +207 -0
- endoreg_db/models/medical/patient/patient_finding_intervention.py +40 -0
- endoreg_db/models/medical/patient/patient_lab_sample.py +148 -0
- endoreg_db/models/{persons → medical}/patient/patient_lab_value.py +68 -22
- endoreg_db/models/medical/patient/patient_medication.py +104 -0
- endoreg_db/models/medical/patient/patient_medication_schedule.py +136 -0
- endoreg_db/models/medical/risk/__init__.py +7 -0
- endoreg_db/models/medical/risk/risk.py +72 -0
- endoreg_db/models/medical/risk/risk_type.py +51 -0
- endoreg_db/models/metadata/__init__.py +19 -0
- endoreg_db/models/metadata/frame_ocr_result.py +0 -0
- endoreg_db/models/metadata/model_meta.py +206 -0
- endoreg_db/models/metadata/model_meta_logic.py +343 -0
- endoreg_db/models/{data_file/metadata → metadata}/pdf_meta.py +32 -13
- endoreg_db/models/metadata/sensitive_meta.py +288 -0
- endoreg_db/models/metadata/sensitive_meta_logic.py +1048 -0
- endoreg_db/models/metadata/video_meta.py +332 -0
- endoreg_db/models/metadata/video_prediction_logic.py +190 -0
- endoreg_db/models/metadata/video_prediction_meta.py +270 -0
- endoreg_db/models/other/__init__.py +36 -1
- endoreg_db/models/other/distribution/__init__.py +44 -0
- endoreg_db/models/other/distribution/base_value_distribution.py +20 -0
- endoreg_db/models/other/distribution/date_value_distribution.py +89 -0
- endoreg_db/models/other/distribution/multiple_categorical_value_distribution.py +32 -0
- endoreg_db/models/other/distribution/numeric_value_distribution.py +125 -0
- endoreg_db/models/other/distribution/single_categorical_value_distribution.py +22 -0
- endoreg_db/models/other/emission/__init__.py +5 -0
- endoreg_db/models/other/emission/emission_factor.py +94 -0
- endoreg_db/models/{persons → other}/gender.py +8 -3
- endoreg_db/models/other/information_source.py +159 -0
- endoreg_db/models/other/material.py +14 -2
- endoreg_db/models/other/resource.py +6 -2
- endoreg_db/models/other/tag.py +27 -0
- endoreg_db/models/other/transport_route.py +15 -3
- endoreg_db/models/{unit.py → other/unit.py} +16 -6
- endoreg_db/models/other/waste.py +10 -3
- endoreg_db/models/requirement/__init__.py +11 -0
- endoreg_db/models/requirement/requirement.py +767 -0
- endoreg_db/models/requirement/requirement_evaluation/__init__.py +6 -0
- endoreg_db/models/requirement/requirement_evaluation/get_values.py +40 -0
- endoreg_db/models/requirement/requirement_evaluation/operator_evaluation_models.py +9 -0
- endoreg_db/models/requirement/requirement_evaluation/requirement_type_parser.py +95 -0
- endoreg_db/models/requirement/requirement_operator.py +176 -0
- endoreg_db/models/requirement/requirement_set.py +287 -0
- endoreg_db/models/rule/__init__.py +13 -0
- endoreg_db/models/{rules → rule}/rule.py +6 -3
- endoreg_db/models/{rules → rule}/rule_attribute_dtype.py +0 -2
- endoreg_db/models/{rules → rule}/rule_type.py +0 -2
- endoreg_db/models/{rules → rule}/ruleset.py +0 -2
- endoreg_db/models/state/__init__.py +12 -0
- endoreg_db/models/state/abstract.py +11 -0
- endoreg_db/models/state/audit_ledger.py +150 -0
- endoreg_db/models/state/label_video_segment.py +22 -0
- endoreg_db/models/state/raw_pdf.py +187 -0
- endoreg_db/models/state/sensitive_meta.py +46 -0
- endoreg_db/models/state/video.py +232 -0
- endoreg_db/models/upload_job.py +99 -0
- endoreg_db/models/utils.py +135 -0
- endoreg_db/renames.yml +8 -0
- endoreg_db/root_urls.py +9 -0
- endoreg_db/schemas/__init__.py +0 -0
- endoreg_db/schemas/examination_evaluation.py +27 -0
- endoreg_db/serializers/Frames_NICE_and_PARIS_classifications.py +775 -0
- endoreg_db/serializers/__init__.py +118 -10
- endoreg_db/serializers/_old/raw_pdf_meta_validation.py +223 -0
- endoreg_db/serializers/_old/raw_video_meta_validation.py +179 -0
- endoreg_db/serializers/_old/video.py +71 -0
- endoreg_db/serializers/administration/__init__.py +14 -0
- endoreg_db/serializers/administration/ai/__init__.py +10 -0
- endoreg_db/serializers/administration/ai/active_model.py +10 -0
- endoreg_db/serializers/administration/ai/ai_model.py +18 -0
- endoreg_db/serializers/administration/ai/model_type.py +10 -0
- endoreg_db/serializers/administration/center.py +9 -0
- endoreg_db/serializers/administration/gender.py +9 -0
- endoreg_db/serializers/anonymization.py +69 -0
- endoreg_db/serializers/evaluation/examination_evaluation.py +1 -0
- endoreg_db/serializers/examination/__init__.py +10 -0
- endoreg_db/serializers/examination/base.py +46 -0
- endoreg_db/serializers/examination/dropdown.py +21 -0
- endoreg_db/serializers/examination_serializer.py +12 -0
- endoreg_db/serializers/finding/__init__.py +5 -0
- endoreg_db/serializers/finding/finding.py +54 -0
- endoreg_db/serializers/finding_classification/__init__.py +7 -0
- endoreg_db/serializers/finding_classification/choice.py +19 -0
- endoreg_db/serializers/finding_classification/classification.py +13 -0
- endoreg_db/serializers/label/__init__.py +7 -0
- endoreg_db/serializers/label/image_classification_annotation.py +62 -0
- endoreg_db/serializers/label/label.py +15 -0
- endoreg_db/serializers/label_video_segment/__init__.py +7 -0
- endoreg_db/serializers/label_video_segment/_lvs_create.py +149 -0
- endoreg_db/serializers/label_video_segment/_lvs_update.py +138 -0
- endoreg_db/serializers/label_video_segment/_lvs_validate.py +149 -0
- endoreg_db/serializers/label_video_segment/label_video_segment.py +344 -0
- endoreg_db/serializers/label_video_segment/label_video_segment_annotation.py +99 -0
- endoreg_db/serializers/label_video_segment/label_video_segment_update.py +163 -0
- endoreg_db/serializers/meta/__init__.py +19 -0
- endoreg_db/serializers/meta/pdf_file_meta_extraction.py +115 -0
- endoreg_db/serializers/meta/report_meta.py +53 -0
- endoreg_db/serializers/meta/sensitive_meta_detail.py +162 -0
- endoreg_db/serializers/meta/sensitive_meta_update.py +148 -0
- endoreg_db/serializers/meta/sensitive_meta_verification.py +59 -0
- endoreg_db/serializers/meta/video_meta.py +39 -0
- endoreg_db/serializers/misc/__init__.py +14 -0
- endoreg_db/serializers/misc/file_overview.py +182 -0
- endoreg_db/serializers/misc/sensitive_patient_data.py +120 -0
- endoreg_db/serializers/misc/stats.py +33 -0
- endoreg_db/serializers/misc/translatable_field_mix_in.py +44 -0
- endoreg_db/serializers/misc/upload_job.py +71 -0
- endoreg_db/serializers/patient/__init__.py +11 -0
- endoreg_db/serializers/patient/patient.py +86 -0
- endoreg_db/serializers/patient/patient_dropdown.py +27 -0
- endoreg_db/serializers/patient_examination/__init__.py +7 -0
- endoreg_db/serializers/patient_examination/patient_examination.py +141 -0
- endoreg_db/serializers/patient_finding/__init__.py +15 -0
- endoreg_db/serializers/patient_finding/patient_finding.py +31 -0
- endoreg_db/serializers/patient_finding/patient_finding_classification.py +39 -0
- endoreg_db/serializers/patient_finding/patient_finding_detail.py +53 -0
- endoreg_db/serializers/patient_finding/patient_finding_intervention.py +26 -0
- endoreg_db/serializers/patient_finding/patient_finding_list.py +41 -0
- endoreg_db/serializers/patient_finding/patient_finding_write.py +126 -0
- endoreg_db/serializers/pdf/__init__.py +5 -0
- endoreg_db/serializers/pdf/anony_text_validation.py +85 -0
- endoreg_db/serializers/report/__init__.py +9 -0
- endoreg_db/serializers/report/mixins.py +45 -0
- endoreg_db/serializers/report/report.py +105 -0
- endoreg_db/serializers/report/report_list.py +22 -0
- endoreg_db/serializers/report/secure_file_url.py +26 -0
- endoreg_db/serializers/requirements/requirement_schema.py +25 -0
- endoreg_db/serializers/requirements/requirement_sets.py +29 -0
- endoreg_db/serializers/sensitive_meta_serializer.py +282 -0
- endoreg_db/serializers/video/__init__.py +7 -0
- endoreg_db/serializers/video/segmentation.py +263 -0
- endoreg_db/serializers/video/video_file_brief.py +10 -0
- endoreg_db/serializers/video/video_file_detail.py +83 -0
- endoreg_db/serializers/video/video_file_list.py +67 -0
- endoreg_db/serializers/video/video_metadata.py +105 -0
- endoreg_db/serializers/video/video_processing_history.py +153 -0
- endoreg_db/serializers/video_examination.py +198 -0
- endoreg_db/services/__init__.py +5 -0
- endoreg_db/services/anonymization.py +223 -0
- endoreg_db/services/examination_evaluation.py +149 -0
- endoreg_db/services/finding_description_service.py +0 -0
- endoreg_db/services/lookup_service.py +411 -0
- endoreg_db/services/lookup_store.py +266 -0
- endoreg_db/services/pdf_import.py +1382 -0
- endoreg_db/services/polling_coordinator.py +288 -0
- endoreg_db/services/pseudonym_service.py +89 -0
- endoreg_db/services/requirements_object.py +147 -0
- endoreg_db/services/segment_sync.py +155 -0
- endoreg_db/services/storage_aware_video_processor.py +344 -0
- endoreg_db/services/video_import.py +1259 -0
- endoreg_db/tasks/upload_tasks.py +207 -0
- endoreg_db/tasks/video_ingest.py +157 -0
- endoreg_db/tasks/video_processing_tasks.py +327 -0
- endoreg_db/templates/admin/patient_finding_intervention.html +253 -0
- endoreg_db/templates/admin/start_examination.html +12 -0
- endoreg_db/templates/timeline.html +176 -0
- endoreg_db/urls/__init__.py +83 -0
- endoreg_db/urls/anonymization.py +32 -0
- endoreg_db/urls/auth.py +16 -0
- endoreg_db/urls/classification.py +39 -0
- endoreg_db/urls/examination.py +54 -0
- endoreg_db/urls/files.py +6 -0
- endoreg_db/urls/label_video_segment_validate.py +33 -0
- endoreg_db/urls/label_video_segments.py +46 -0
- endoreg_db/urls/media.py +227 -0
- endoreg_db/urls/patient.py +19 -0
- endoreg_db/urls/report.py +48 -0
- endoreg_db/urls/requirements.py +13 -0
- endoreg_db/urls/sensitive_meta.py +0 -0
- endoreg_db/urls/stats.py +46 -0
- endoreg_db/urls/upload.py +20 -0
- endoreg_db/urls/video.py +61 -0
- endoreg_db/urls.py +9 -0
- endoreg_db/utils/__init__.py +88 -1
- endoreg_db/utils/ai/__init__.py +9 -0
- endoreg_db/{models/ai_model/utils.py → utils/ai/get.py} +1 -4
- endoreg_db/utils/ai/inference_dataset.py +52 -0
- endoreg_db/utils/ai/multilabel_classification_net.py +159 -0
- endoreg_db/utils/ai/postprocess.py +63 -0
- endoreg_db/utils/ai/predict.py +291 -0
- endoreg_db/utils/ai/preprocess.py +68 -0
- endoreg_db/utils/calc_duration_seconds.py +24 -0
- endoreg_db/utils/case_generator/__init__.py +0 -0
- endoreg_db/utils/case_generator/case_generator.py +159 -0
- endoreg_db/utils/case_generator/lab_sample_factory.py +33 -0
- endoreg_db/utils/case_generator/utils.py +30 -0
- endoreg_db/utils/check_video_files.py +148 -0
- endoreg_db/utils/dataloader.py +118 -35
- endoreg_db/utils/dates.py +60 -0
- endoreg_db/utils/env.py +33 -0
- endoreg_db/utils/extract_specific_frames.py +72 -0
- endoreg_db/utils/file_operations.py +29 -1
- endoreg_db/utils/fix_video_path_direct.py +141 -0
- endoreg_db/utils/frame_anonymization_utils.py +463 -0
- endoreg_db/utils/hashs.py +123 -4
- endoreg_db/utils/links/__init__.py +0 -0
- endoreg_db/utils/links/requirement_link.py +193 -0
- endoreg_db/utils/mime_types.py +0 -0
- endoreg_db/utils/names.py +76 -0
- endoreg_db/utils/parse_and_generate_yaml.py +46 -0
- endoreg_db/utils/paths.py +95 -0
- endoreg_db/utils/permissions.py +143 -0
- endoreg_db/utils/pipelines/Readme.md +235 -0
- endoreg_db/utils/pipelines/__init__.py +0 -0
- endoreg_db/utils/pipelines/process_video_dir.py +120 -0
- endoreg_db/utils/product/__init__.py +0 -0
- endoreg_db/utils/product/sum_emissions.py +20 -0
- endoreg_db/utils/product/sum_weights.py +18 -0
- endoreg_db/utils/pydantic_models/__init__.py +6 -0
- endoreg_db/utils/pydantic_models/db_config.py +57 -0
- endoreg_db/utils/requirement_helpers.py +0 -0
- endoreg_db/utils/requirement_operator_logic/__init__.py +0 -0
- endoreg_db/utils/requirement_operator_logic/lab_value_operators.py +578 -0
- endoreg_db/utils/requirement_operator_logic/model_evaluators.py +368 -0
- endoreg_db/utils/setup_config.py +177 -0
- endoreg_db/utils/translation.py +27 -0
- endoreg_db/utils/validate_endo_roi.py +19 -0
- endoreg_db/utils/validate_subcategory_dict.py +91 -0
- endoreg_db/utils/validate_video_detailed.py +357 -0
- endoreg_db/utils/video/__init__.py +26 -0
- endoreg_db/utils/video/extract_frames.py +88 -0
- endoreg_db/utils/video/ffmpeg_wrapper.py +835 -0
- endoreg_db/utils/video/names.py +42 -0
- endoreg_db/utils/video/streaming_processor.py +312 -0
- endoreg_db/utils/video/video_splitter.py +94 -0
- endoreg_db/views/Frames_NICE_and_PARIS_classifications_views.py +238 -0
- endoreg_db/views/__init__.py +274 -0
- endoreg_db/views/anonymization/__init__.py +27 -0
- endoreg_db/views/anonymization/media_management.py +454 -0
- endoreg_db/views/anonymization/overview.py +216 -0
- endoreg_db/views/anonymization/validate.py +107 -0
- endoreg_db/views/auth/__init__.py +13 -0
- endoreg_db/views/auth/keycloak.py +113 -0
- endoreg_db/views/examination/__init__.py +33 -0
- endoreg_db/views/examination/examination.py +37 -0
- endoreg_db/views/examination/examination_manifest_cache.py +26 -0
- endoreg_db/views/examination/get_finding_classification_choices.py +59 -0
- endoreg_db/views/examination/get_finding_classifications.py +36 -0
- endoreg_db/views/examination/get_findings.py +41 -0
- endoreg_db/views/examination/get_instruments.py +18 -0
- endoreg_db/views/examination/get_interventions.py +14 -0
- endoreg_db/views/finding/__init__.py +9 -0
- endoreg_db/views/finding/finding.py +112 -0
- endoreg_db/views/finding/get_classifications.py +14 -0
- endoreg_db/views/finding/get_interventions.py +17 -0
- endoreg_db/views/finding_classification/__init__.py +13 -0
- endoreg_db/views/finding_classification/base.py +0 -0
- endoreg_db/views/finding_classification/finding_classification.py +42 -0
- endoreg_db/views/finding_classification/get_classification_choices.py +55 -0
- endoreg_db/views/label/__init__.py +5 -0
- endoreg_db/views/label/label.py +15 -0
- endoreg_db/views/label_video_segment/__init__.py +16 -0
- endoreg_db/views/label_video_segment/create_lvs_from_annotation.py +44 -0
- endoreg_db/views/label_video_segment/get_lvs_by_name_and_video.py +50 -0
- endoreg_db/views/label_video_segment/label_video_segment.py +77 -0
- endoreg_db/views/label_video_segment/label_video_segment_by_label.py +174 -0
- endoreg_db/views/label_video_segment/label_video_segment_detail.py +73 -0
- endoreg_db/views/label_video_segment/update_lvs_from_annotation.py +46 -0
- endoreg_db/views/label_video_segment/validate.py +226 -0
- endoreg_db/views/media/__init__.py +45 -0
- endoreg_db/views/media/pdf_media.py +388 -0
- endoreg_db/views/media/segments.py +71 -0
- endoreg_db/views/media/sensitive_metadata.py +314 -0
- endoreg_db/views/media/video_media.py +272 -0
- endoreg_db/views/media/video_segments.py +524 -0
- endoreg_db/views/meta/__init__.py +15 -0
- endoreg_db/views/meta/available_files_list.py +146 -0
- endoreg_db/views/meta/report_meta.py +53 -0
- endoreg_db/views/meta/sensitive_meta_detail.py +148 -0
- endoreg_db/views/meta/sensitive_meta_list.py +104 -0
- endoreg_db/views/meta/sensitive_meta_verification.py +71 -0
- endoreg_db/views/misc/__init__.py +63 -0
- endoreg_db/views/misc/center.py +13 -0
- endoreg_db/views/misc/csrf.py +7 -0
- endoreg_db/views/misc/gender.py +14 -0
- endoreg_db/views/misc/secure_file_serving_view.py +80 -0
- endoreg_db/views/misc/secure_file_url_view.py +84 -0
- endoreg_db/views/misc/secure_url_validate.py +79 -0
- endoreg_db/views/misc/stats.py +220 -0
- endoreg_db/views/misc/translation.py +182 -0
- endoreg_db/views/misc/upload_views.py +240 -0
- endoreg_db/views/patient/__init__.py +5 -0
- endoreg_db/views/patient/patient.py +210 -0
- endoreg_db/views/patient_examination/DEPRECATED_video_backup.py +164 -0
- endoreg_db/views/patient_examination/__init__.py +11 -0
- endoreg_db/views/patient_examination/patient_examination.py +140 -0
- endoreg_db/views/patient_examination/patient_examination_create.py +63 -0
- endoreg_db/views/patient_examination/patient_examination_detail.py +66 -0
- endoreg_db/views/patient_examination/patient_examination_list.py +68 -0
- endoreg_db/views/patient_examination/video.py +194 -0
- endoreg_db/views/patient_finding/__init__.py +7 -0
- endoreg_db/views/patient_finding/base.py +0 -0
- endoreg_db/views/patient_finding/patient_finding.py +64 -0
- endoreg_db/views/patient_finding/patient_finding_optimized.py +259 -0
- endoreg_db/views/patient_finding_classification/__init__.py +5 -0
- endoreg_db/views/patient_finding_classification/pfc_create.py +67 -0
- endoreg_db/views/patient_finding_location/__init__.py +5 -0
- endoreg_db/views/patient_finding_location/pfl_create.py +70 -0
- endoreg_db/views/patient_finding_morphology/__init__.py +5 -0
- endoreg_db/views/patient_finding_morphology/pfm_create.py +70 -0
- endoreg_db/views/pdf/__init__.py +8 -0
- endoreg_db/views/pdf/pdf_stream.py +187 -0
- endoreg_db/views/pdf/reimport.py +177 -0
- endoreg_db/views/report/__init__.py +9 -0
- endoreg_db/views/report/report_list.py +112 -0
- endoreg_db/views/report/report_with_secure_url.py +28 -0
- endoreg_db/views/report/start_examination.py +7 -0
- endoreg_db/views/requirement/__init__.py +10 -0
- endoreg_db/views/requirement/evaluate.py +279 -0
- endoreg_db/views/requirement/lookup.py +367 -0
- endoreg_db/views/requirement/lookup_store.py +252 -0
- endoreg_db/views/requirement_lookup/lookup.py +0 -0
- endoreg_db/views/requirement_lookup/lookup_store.py +0 -0
- endoreg_db/views/stats/__init__.py +13 -0
- endoreg_db/views/stats/stats_views.py +229 -0
- endoreg_db/views/video/__init__.py +59 -0
- endoreg_db/views/video/correction.py +530 -0
- endoreg_db/views/video/reimport.py +195 -0
- endoreg_db/views/video/segmentation.py +274 -0
- endoreg_db/views/video/task_status.py +49 -0
- endoreg_db/views/video/timeline.py +46 -0
- endoreg_db/views/video/video_analyze.py +52 -0
- endoreg_db/views/video/video_apply_mask.py +48 -0
- endoreg_db/views/video/video_correction.py +21 -0
- endoreg_db/views/video/video_download_processed.py +58 -0
- endoreg_db/views/video/video_examination_viewset.py +242 -0
- endoreg_db/views/video/video_meta.py +29 -0
- endoreg_db/views/video/video_processing_history.py +24 -0
- endoreg_db/views/video/video_remove_frames.py +48 -0
- endoreg_db/views/video/video_stream.py +306 -0
- endoreg_db/views.py +0 -3
- endoreg_db-0.8.6.3.dist-info/METADATA +383 -0
- endoreg_db-0.8.6.3.dist-info/RECORD +793 -0
- {endoreg_db-0.4.5.dist-info → endoreg_db-0.8.6.3.dist-info}/WHEEL +1 -1
- endoreg_db/data/active_model/data.yaml +0 -3
- endoreg_db/data/agl_service/data.yaml +0 -19
- endoreg_db/data/label/label-set/data.yaml +0 -18
- endoreg_db/management/commands/_load_model_template.py +0 -41
- endoreg_db/management/commands/delete_all.py +0 -18
- endoreg_db/management/commands/delete_legacy_images.py +0 -19
- endoreg_db/management/commands/delete_legacy_videos.py +0 -17
- endoreg_db/management/commands/extract_legacy_video_frames.py +0 -18
- endoreg_db/management/commands/fetch_legacy_image_dataset.py +0 -32
- endoreg_db/management/commands/fix_auth_permission.py +0 -20
- endoreg_db/management/commands/import_legacy_images.py +0 -94
- endoreg_db/management/commands/import_legacy_videos.py +0 -76
- endoreg_db/management/commands/load_active_model_data.py +0 -45
- endoreg_db/management/commands/load_endoscopy_processor_data.py +0 -45
- endoreg_db/management/commands/load_g_play_data.py +0 -113
- endoreg_db/management/commands/load_label_data.py +0 -67
- endoreg_db/management/commands/load_medication_indication_data.py +0 -63
- endoreg_db/management/commands/load_medication_indication_type_data.py +0 -41
- endoreg_db/management/commands/load_medication_schedule_data.py +0 -55
- endoreg_db/management/commands/load_network_data.py +0 -57
- endoreg_db/migrations/0002_anonymizedimagelabel_anonymousimageannotation_and_more.py +0 -55
- endoreg_db/migrations/0003_anonymousimageannotation_original_image_url_and_more.py +0 -39
- endoreg_db/migrations/0004_alter_rawpdffile_file.py +0 -20
- endoreg_db/migrations/0005_uploadedfile_alter_rawpdffile_file_anonymizedfile.py +0 -40
- endoreg_db/migrations/0006_alter_rawpdffile_file.py +0 -20
- endoreg_db/migrations/0007_networkdevicelogentry_datetime_and_more.py +0 -43
- endoreg_db/models/ai_model/__init__.py +0 -3
- endoreg_db/models/ai_model/active_model.py +0 -9
- endoreg_db/models/ai_model/model_meta.py +0 -24
- endoreg_db/models/annotation/__init__.py +0 -3
- endoreg_db/models/annotation/anonymized_image_annotation.py +0 -60
- endoreg_db/models/annotation/binary_classification_annotation_task.py +0 -80
- endoreg_db/models/annotation/image_classification.py +0 -27
- endoreg_db/models/center/center.py +0 -25
- endoreg_db/models/center/center_product.py +0 -34
- endoreg_db/models/center/center_resource.py +0 -19
- endoreg_db/models/center/center_waste.py +0 -11
- endoreg_db/models/data_file/__init__.py +0 -6
- endoreg_db/models/data_file/base_classes/__init__.py +0 -2
- endoreg_db/models/data_file/base_classes/abstract_frame.py +0 -51
- endoreg_db/models/data_file/base_classes/abstract_video.py +0 -201
- endoreg_db/models/data_file/frame.py +0 -45
- endoreg_db/models/data_file/import_classes/__init__.py +0 -32
- endoreg_db/models/data_file/import_classes/processing_functions/__init__.py +0 -35
- endoreg_db/models/data_file/import_classes/processing_functions/pdf.py +0 -28
- endoreg_db/models/data_file/import_classes/processing_functions/video.py +0 -260
- endoreg_db/models/data_file/import_classes/raw_pdf.py +0 -188
- endoreg_db/models/data_file/import_classes/raw_video.py +0 -343
- endoreg_db/models/data_file/metadata/__init__.py +0 -3
- endoreg_db/models/data_file/metadata/sensitive_meta.py +0 -31
- endoreg_db/models/data_file/metadata/video_meta.py +0 -133
- endoreg_db/models/data_file/report_file.py +0 -89
- endoreg_db/models/data_file/video/__init__.py +0 -7
- endoreg_db/models/data_file/video/import_meta.py +0 -25
- endoreg_db/models/data_file/video/video.py +0 -25
- endoreg_db/models/data_file/video_segment.py +0 -107
- endoreg_db/models/disease.py +0 -56
- endoreg_db/models/emission/__init__.py +0 -1
- endoreg_db/models/emission/emission_factor.py +0 -20
- endoreg_db/models/event.py +0 -22
- endoreg_db/models/examination/__init__.py +0 -4
- endoreg_db/models/examination/examination.py +0 -26
- endoreg_db/models/examination/examination_time.py +0 -27
- endoreg_db/models/examination/examination_time_type.py +0 -24
- endoreg_db/models/examination/examination_type.py +0 -18
- endoreg_db/models/hardware/__init__.py +0 -2
- endoreg_db/models/hardware/endoscope.py +0 -44
- endoreg_db/models/information_source.py +0 -29
- endoreg_db/models/laboratory/__init__.py +0 -1
- endoreg_db/models/laboratory/lab_value.py +0 -102
- endoreg_db/models/legacy_data/__init__.py +0 -3
- endoreg_db/models/legacy_data/image.py +0 -34
- endoreg_db/models/logging/__init__.py +0 -4
- endoreg_db/models/logging/agl_service.py +0 -19
- endoreg_db/models/logging/base.py +0 -22
- endoreg_db/models/logging/log_type.py +0 -23
- endoreg_db/models/logging/network_device.py +0 -24
- endoreg_db/models/medication/__init__.py +0 -1
- endoreg_db/models/medication/medication.py +0 -148
- endoreg_db/models/network/__init__.py +0 -3
- endoreg_db/models/network/agl_service.py +0 -38
- endoreg_db/models/network/network_device.py +0 -53
- endoreg_db/models/network/network_device_type.py +0 -23
- endoreg_db/models/other/distribution.py +0 -215
- endoreg_db/models/patient_examination/__init__.py +0 -35
- endoreg_db/models/permissions/__init__.py +0 -44
- endoreg_db/models/persons/__init__.py +0 -7
- endoreg_db/models/persons/examiner/__init__.py +0 -2
- endoreg_db/models/persons/examiner/examiner.py +0 -16
- endoreg_db/models/persons/examiner/examiner_type.py +0 -2
- endoreg_db/models/persons/patient/__init__.py +0 -8
- endoreg_db/models/persons/patient/case/case.py +0 -30
- endoreg_db/models/persons/patient/patient.py +0 -216
- endoreg_db/models/persons/patient/patient_disease.py +0 -16
- endoreg_db/models/persons/patient/patient_event.py +0 -22
- endoreg_db/models/persons/patient/patient_lab_sample.py +0 -106
- endoreg_db/models/persons/patient/patient_medication.py +0 -44
- endoreg_db/models/persons/patient/patient_medication_schedule.py +0 -28
- endoreg_db/models/persons/portal_user_information.py +0 -27
- endoreg_db/models/prediction/__init__.py +0 -2
- endoreg_db/models/prediction/image_classification.py +0 -37
- endoreg_db/models/prediction/video_prediction_meta.py +0 -244
- endoreg_db/models/product/__init__.py +0 -5
- endoreg_db/models/product/product.py +0 -97
- endoreg_db/models/product/product_group.py +0 -19
- endoreg_db/models/product/product_material.py +0 -24
- endoreg_db/models/questionnaires/__init__.py +0 -114
- endoreg_db/models/quiz/__init__.py +0 -2
- endoreg_db/models/quiz/quiz_answer.py +0 -41
- endoreg_db/models/quiz/quiz_question.py +0 -54
- endoreg_db/models/report_reader/__init__.py +0 -2
- endoreg_db/models/report_reader/report_reader_config.py +0 -53
- endoreg_db/models/rules/__init__.py +0 -5
- endoreg_db/queries/get/__init__.py +0 -6
- endoreg_db/queries/get/center.py +0 -42
- endoreg_db/queries/get/model.py +0 -13
- endoreg_db/queries/get/patient.py +0 -14
- endoreg_db/queries/get/patient_examination.py +0 -20
- endoreg_db/queries/get/report_file.py +0 -33
- endoreg_db/queries/get/video.py +0 -31
- endoreg_db/serializers/ai_model.py +0 -19
- endoreg_db/serializers/annotation.py +0 -17
- endoreg_db/serializers/center.py +0 -11
- endoreg_db/serializers/examination.py +0 -33
- endoreg_db/serializers/frame.py +0 -13
- endoreg_db/serializers/hardware.py +0 -21
- endoreg_db/serializers/label.py +0 -22
- endoreg_db/serializers/patient.py +0 -10
- endoreg_db/serializers/prediction.py +0 -15
- endoreg_db/serializers/report_file.py +0 -7
- endoreg_db/serializers/video.py +0 -27
- endoreg_db/tests.py +0 -3
- endoreg_db/utils/legacy_ocr.py +0 -201
- endoreg_db/utils/video_metadata.py +0 -87
- endoreg_db-0.4.5.dist-info/METADATA +0 -34
- endoreg_db-0.4.5.dist-info/RECORD +0 -316
- /endoreg_db/{data/distribution/numeric/.init → api/serializers/finding_descriptions.py} +0 -0
- /endoreg_db/{models/persons/patient/case/__init__.py → api/views/finding_descriptions.py} +0 -0
- /endoreg_db/{queries/get/annotation.py → config/__init__.py} +0 -0
- /endoreg_db/data/{label → ai_model_label}/label-type/data.yaml +0 -0
- /endoreg_db/data/{model_type → ai_model_type}/data.yaml +0 -0
- /endoreg_db/{queries/get/prediction.py → data/shift/m2.yaml} +0 -0
- /endoreg_db/{queries/get/video_import_meta.py → factories/__init__.py} +0 -0
- /endoreg_db/{queries/get/video_prediction_meta.py → helpers/__init__.py} +0 -0
- /endoreg_db/management/commands/{load_report_reader_flag.py → load_report_reader_flag_data.py} +0 -0
- /endoreg_db/models/{persons → administration/person}/person.py +0 -0
- /endoreg_db/models/{report_reader → media/pdf/report_reader}/report_reader_flag.py +0 -0
- /endoreg_db/models/{rules → rule}/rule_applicator.py +0 -0
- {endoreg_db-0.4.5.dist-info → endoreg_db-0.8.6.3.dist-info/licenses}/LICENSE +0 -0
endoreg_db/queries/get/center.py
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
from endoreg_db.models import Center
|
|
2
|
-
from typing import Optional
|
|
3
|
-
|
|
4
|
-
def get_centers() -> Center:
|
|
5
|
-
"""
|
|
6
|
-
Returns all Center objects from the database.
|
|
7
|
-
"""
|
|
8
|
-
return Center.objects.all()
|
|
9
|
-
|
|
10
|
-
def get_center_by_name(name) -> Optional[Center]:
|
|
11
|
-
"""Retrieve a Center object by its name.
|
|
12
|
-
|
|
13
|
-
Args:
|
|
14
|
-
name (str): The name of the center to retrieve.
|
|
15
|
-
|
|
16
|
-
Returns:
|
|
17
|
-
Optional[Center]: The Center object with the given name, or None if it does not exist.
|
|
18
|
-
"""
|
|
19
|
-
return Center.objects.get(name=name)
|
|
20
|
-
|
|
21
|
-
def get_center_by_id(id) -> Optional[Center]:
|
|
22
|
-
"""Retrieve a Center object by its id.
|
|
23
|
-
|
|
24
|
-
Args:
|
|
25
|
-
id (int): The id of the center to retrieve.
|
|
26
|
-
|
|
27
|
-
Returns:
|
|
28
|
-
Optional[Center]: The Center object with the given id, or None if it does not exist.
|
|
29
|
-
"""
|
|
30
|
-
return Center.objects.get(id=id)
|
|
31
|
-
|
|
32
|
-
def get_center_by_natural_key(name: str) -> Optional[Center]:
|
|
33
|
-
"""
|
|
34
|
-
Retrieve a Center object by its natural key.
|
|
35
|
-
|
|
36
|
-
Args:
|
|
37
|
-
name: The name of the center to retrieve.
|
|
38
|
-
|
|
39
|
-
Returns:
|
|
40
|
-
The Center object with the given name, or None if it does not exist.
|
|
41
|
-
"""
|
|
42
|
-
return Center.objects.get_by_natural_key(name=name)
|
endoreg_db/queries/get/model.py
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
from endoreg_db.models import (
|
|
2
|
-
ModelMeta,
|
|
3
|
-
)
|
|
4
|
-
|
|
5
|
-
def get_latest_model_by_name(model_name):
|
|
6
|
-
"""
|
|
7
|
-
Expects model name. Fetches models by name from database, sorts by version and returns latest version.
|
|
8
|
-
"""
|
|
9
|
-
models = ModelMeta.objects.filter(name=model_name).order_by('-version')
|
|
10
|
-
if len(models) == 0:
|
|
11
|
-
return None
|
|
12
|
-
else:
|
|
13
|
-
return models[0]
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
from endoreg_db.models import Patient
|
|
2
|
-
|
|
3
|
-
def get_patients() -> Patient:
|
|
4
|
-
"""
|
|
5
|
-
Returns all Patient objects from the database.
|
|
6
|
-
"""
|
|
7
|
-
return Patient.objects.all()
|
|
8
|
-
|
|
9
|
-
def get_patients_without_dob() -> Patient:
|
|
10
|
-
"""
|
|
11
|
-
Returns all Patient objects from the database without a date of birth.
|
|
12
|
-
"""
|
|
13
|
-
return Patient.objects.filter(dob__isnull=True)
|
|
14
|
-
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
from endoreg_db.models import PatientExamination
|
|
2
|
-
from typing import Optional
|
|
3
|
-
|
|
4
|
-
def get_patient_examinations() -> PatientExamination:
|
|
5
|
-
"""
|
|
6
|
-
Returns all PatientExamination objects from the database.
|
|
7
|
-
"""
|
|
8
|
-
return PatientExamination.objects.all()
|
|
9
|
-
|
|
10
|
-
def get_patient_examinations_without_report_file() -> PatientExamination:
|
|
11
|
-
"""
|
|
12
|
-
Returns all PatientExamination objects from the database without a report_file.
|
|
13
|
-
"""
|
|
14
|
-
return PatientExamination.objects.filter(report_file__isnull=True)
|
|
15
|
-
|
|
16
|
-
def get_patient_examinations_without_video() -> PatientExamination:
|
|
17
|
-
"""
|
|
18
|
-
Returns all PatientExamination objects from the database without a video.
|
|
19
|
-
"""
|
|
20
|
-
return PatientExamination.objects.filter(video__isnull=True)
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
from endoreg_db.models import ReportFile
|
|
2
|
-
from typing import Optional
|
|
3
|
-
|
|
4
|
-
def get_report_files() -> ReportFile:
|
|
5
|
-
"""
|
|
6
|
-
Returns all ReportFile objects from the database.
|
|
7
|
-
"""
|
|
8
|
-
return ReportFile.objects.all()
|
|
9
|
-
|
|
10
|
-
def get_report_file_by_id(id) -> Optional[ReportFile]:
|
|
11
|
-
"""Retrieve a ReportFile object by its id.
|
|
12
|
-
|
|
13
|
-
Args:
|
|
14
|
-
id (int): The id of the report_file to retrieve.
|
|
15
|
-
|
|
16
|
-
Returns:
|
|
17
|
-
Optional[ReportFile]: The ReportFile object with the given id, or None if it does not exist.
|
|
18
|
-
"""
|
|
19
|
-
return ReportFile.objects.get(id=id)
|
|
20
|
-
|
|
21
|
-
def get_report_files_without_examination() -> ReportFile:
|
|
22
|
-
"""
|
|
23
|
-
Returns all ReportFile objects from the database without an examination.
|
|
24
|
-
"""
|
|
25
|
-
return ReportFile.objects.filter(patient_examination__isnull=True)
|
|
26
|
-
|
|
27
|
-
def get_report_files_without_patient() -> ReportFile:
|
|
28
|
-
"""
|
|
29
|
-
Returns all ReportFile objects from the database without a patient.
|
|
30
|
-
"""
|
|
31
|
-
return ReportFile.objects.filter(patient__isnull=True)
|
|
32
|
-
|
|
33
|
-
|
endoreg_db/queries/get/video.py
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
from endoreg_db.models import Video, PatientExamination
|
|
2
|
-
from typing import Optional
|
|
3
|
-
|
|
4
|
-
def get_videos() -> Video:
|
|
5
|
-
"""
|
|
6
|
-
Returns all Video objects from the database.
|
|
7
|
-
"""
|
|
8
|
-
return Video.objects.all()
|
|
9
|
-
|
|
10
|
-
def get_video_by_id(id) -> Optional[Video]:
|
|
11
|
-
"""Retrieve a Video object by its id.
|
|
12
|
-
|
|
13
|
-
Args:
|
|
14
|
-
id (int): The id of the video to retrieve.
|
|
15
|
-
|
|
16
|
-
Returns:
|
|
17
|
-
Optional[Video]: The Video object with the given id, or None if it does not exist.
|
|
18
|
-
"""
|
|
19
|
-
return Video.objects.get(id=id)
|
|
20
|
-
|
|
21
|
-
def get_video_without_examination() -> Video:
|
|
22
|
-
"""
|
|
23
|
-
Returns all Video objects from the database without an examination.
|
|
24
|
-
"""
|
|
25
|
-
return Video.objects.filter(patient_examination__isnull=True)
|
|
26
|
-
|
|
27
|
-
def get_video_without_patient() -> Video:
|
|
28
|
-
"""
|
|
29
|
-
Returns all Video objects from the database without a patient.
|
|
30
|
-
"""
|
|
31
|
-
return Video.objects.filter(patient__isnull=True)
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
from endoreg_db.models import ModelMeta, ModelType, ActiveModel
|
|
2
|
-
from rest_framework import serializers
|
|
3
|
-
|
|
4
|
-
class ModelMetaSerializer(serializers.ModelSerializer):
|
|
5
|
-
weights = serializers.FileField(use_url=True) # use_url=True will provide the file's URI
|
|
6
|
-
|
|
7
|
-
class Meta:
|
|
8
|
-
model = ModelMeta
|
|
9
|
-
fields = '__all__'
|
|
10
|
-
|
|
11
|
-
class ModelTypeSerializer(serializers.ModelSerializer):
|
|
12
|
-
class Meta:
|
|
13
|
-
model = ModelType
|
|
14
|
-
fields = '__all__'
|
|
15
|
-
|
|
16
|
-
class ActiveModelSerializer(serializers.ModelSerializer):
|
|
17
|
-
class Meta:
|
|
18
|
-
model = ActiveModel
|
|
19
|
-
fields = '__all__'
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
from rest_framework import serializers
|
|
2
|
-
from endoreg_db.models import LegacyBinaryClassificationAnnotationTask, BinaryClassificationAnnotationTask, ImageClassificationAnnotation
|
|
3
|
-
|
|
4
|
-
class LegacyBinaryClassificationAnnotationTaskSerializer(serializers.ModelSerializer):
|
|
5
|
-
class Meta:
|
|
6
|
-
model = LegacyBinaryClassificationAnnotationTask
|
|
7
|
-
fields = '__all__'
|
|
8
|
-
|
|
9
|
-
class BinaryClassificationAnnotationTaskSerializer(serializers.ModelSerializer):
|
|
10
|
-
class Meta:
|
|
11
|
-
model = BinaryClassificationAnnotationTask
|
|
12
|
-
fields = '__all__'
|
|
13
|
-
|
|
14
|
-
class ImageClassificationAnnotationSerializer(serializers.ModelSerializer):
|
|
15
|
-
class Meta:
|
|
16
|
-
model = ImageClassificationAnnotation
|
|
17
|
-
fields = '__all__'
|
endoreg_db/serializers/center.py
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
from rest_framework import serializers
|
|
2
|
-
from endoreg_db.models import (
|
|
3
|
-
Examination,
|
|
4
|
-
ExaminationTimeType,
|
|
5
|
-
ExaminationTime,
|
|
6
|
-
ExaminationType,
|
|
7
|
-
PatientExamination
|
|
8
|
-
)
|
|
9
|
-
|
|
10
|
-
class ExaminationTimeTypeSerializer(serializers.ModelSerializer):
|
|
11
|
-
class Meta:
|
|
12
|
-
model = ExaminationTimeType
|
|
13
|
-
fields = '__all__'
|
|
14
|
-
|
|
15
|
-
class ExaminationTimeSerializer(serializers.ModelSerializer):
|
|
16
|
-
class Meta:
|
|
17
|
-
model = ExaminationTime
|
|
18
|
-
fields = '__all__'
|
|
19
|
-
|
|
20
|
-
class ExaminationTypeSerializer(serializers.ModelSerializer):
|
|
21
|
-
class Meta:
|
|
22
|
-
model = ExaminationType
|
|
23
|
-
fields = '__all__'
|
|
24
|
-
|
|
25
|
-
class ExaminationSerializer(serializers.ModelSerializer):
|
|
26
|
-
class Meta:
|
|
27
|
-
model = Examination
|
|
28
|
-
fields = '__all__'
|
|
29
|
-
|
|
30
|
-
class PatientExaminationSerializer(serializers.ModelSerializer):
|
|
31
|
-
class Meta:
|
|
32
|
-
model = PatientExamination
|
|
33
|
-
fields = '__all__'
|
endoreg_db/serializers/frame.py
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
from rest_framework import serializers
|
|
2
|
-
from endoreg_db.models import Frame, LegacyFrame
|
|
3
|
-
|
|
4
|
-
class FrameSerializer(serializers.ModelSerializer):
|
|
5
|
-
class Meta:
|
|
6
|
-
model = Frame
|
|
7
|
-
fields = '__all__'
|
|
8
|
-
|
|
9
|
-
class LegacyFrameSerializer(serializers.ModelSerializer):
|
|
10
|
-
class Meta:
|
|
11
|
-
model = LegacyFrame
|
|
12
|
-
fields = '__all__'
|
|
13
|
-
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
from rest_framework import serializers
|
|
2
|
-
from endoreg_db.models import (
|
|
3
|
-
Endoscope,
|
|
4
|
-
EndoscopeType,
|
|
5
|
-
EndoscopyProcessor,
|
|
6
|
-
)
|
|
7
|
-
|
|
8
|
-
class EndoscopeSerializer(serializers.ModelSerializer):
|
|
9
|
-
class Meta:
|
|
10
|
-
model = Endoscope
|
|
11
|
-
fields = '__all__'
|
|
12
|
-
|
|
13
|
-
class EndoscopyProcessorSerializer(serializers.ModelSerializer):
|
|
14
|
-
class Meta:
|
|
15
|
-
model = EndoscopyProcessor
|
|
16
|
-
fields = '__all__'
|
|
17
|
-
|
|
18
|
-
class EndoscopeTypeSerializer(serializers.ModelSerializer):
|
|
19
|
-
class Meta:
|
|
20
|
-
model = EndoscopeType
|
|
21
|
-
fields = '__all__'
|
endoreg_db/serializers/label.py
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
from rest_framework import serializers
|
|
2
|
-
from endoreg_db.models import (
|
|
3
|
-
Label,
|
|
4
|
-
LabelSet,
|
|
5
|
-
LabelType,
|
|
6
|
-
)
|
|
7
|
-
|
|
8
|
-
class LabelTypeSerializer(serializers.ModelSerializer):
|
|
9
|
-
class Meta:
|
|
10
|
-
model = LabelType
|
|
11
|
-
fields = '__all__'
|
|
12
|
-
|
|
13
|
-
class LabelSetSerializer(serializers.ModelSerializer):
|
|
14
|
-
class Meta:
|
|
15
|
-
model = LabelSet
|
|
16
|
-
fields = '__all__'
|
|
17
|
-
|
|
18
|
-
class LabelSerializer(serializers.ModelSerializer):
|
|
19
|
-
class Meta:
|
|
20
|
-
model = Label
|
|
21
|
-
fields = '__all__'
|
|
22
|
-
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
from rest_framework import serializers
|
|
2
|
-
from endoreg_db.models import (
|
|
3
|
-
ImageClassificationPrediction,
|
|
4
|
-
LegacyVideoPredictionMeta
|
|
5
|
-
)
|
|
6
|
-
|
|
7
|
-
class ImageClassificationPredictionSerializer(serializers.ModelSerializer):
|
|
8
|
-
class Meta:
|
|
9
|
-
model = ImageClassificationPrediction
|
|
10
|
-
fields = '__all__'
|
|
11
|
-
|
|
12
|
-
class LegacyVideoPredictionMetaSerializer(serializers.ModelSerializer):
|
|
13
|
-
class Meta:
|
|
14
|
-
model = LegacyVideoPredictionMeta
|
|
15
|
-
fields = '__all__'
|
endoreg_db/serializers/video.py
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
from rest_framework import serializers
|
|
2
|
-
from endoreg_db.models import Video, LegacyVideo, VideoImportMeta, LegacyLabelVideoSegment, LabelVideoSegment
|
|
3
|
-
|
|
4
|
-
class VideoSerializer(serializers.ModelSerializer):
|
|
5
|
-
class Meta:
|
|
6
|
-
model = Video
|
|
7
|
-
fields = '__all__'
|
|
8
|
-
|
|
9
|
-
class LegacyVideoSerializer(serializers.ModelSerializer):
|
|
10
|
-
class Meta:
|
|
11
|
-
model = LegacyVideo
|
|
12
|
-
fields = '__all__'
|
|
13
|
-
|
|
14
|
-
class VideoImportMetaSerializer(serializers.ModelSerializer):
|
|
15
|
-
class Meta:
|
|
16
|
-
model = VideoImportMeta
|
|
17
|
-
fields = '__all__'
|
|
18
|
-
|
|
19
|
-
class LabelVideoSegmentSerializer(serializers.ModelSerializer):
|
|
20
|
-
class Meta:
|
|
21
|
-
model = LabelVideoSegment
|
|
22
|
-
fields = '__all__'
|
|
23
|
-
|
|
24
|
-
class LegacyLabelVideoSegmentSerializer(serializers.ModelSerializer):
|
|
25
|
-
class Meta:
|
|
26
|
-
model = LegacyLabelVideoSegment
|
|
27
|
-
fields = '__all__'
|
endoreg_db/tests.py
DELETED
endoreg_db/utils/legacy_ocr.py
DELETED
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
import pytesseract
|
|
2
|
-
# import cv2
|
|
3
|
-
from endoreg_db.models import EndoscopyProcessor
|
|
4
|
-
import os
|
|
5
|
-
from collections import Counter
|
|
6
|
-
from tempfile import TemporaryDirectory
|
|
7
|
-
import re
|
|
8
|
-
from datetime import datetime
|
|
9
|
-
from typing import Dict, List
|
|
10
|
-
import numpy as np
|
|
11
|
-
|
|
12
|
-
N_FRAMES_MEAN_OCR = 2
|
|
13
|
-
|
|
14
|
-
# Helper function to process date strings
|
|
15
|
-
def process_date_text(date_text):
|
|
16
|
-
"""
|
|
17
|
-
Processes a string of text that represents a date and returns a datetime.date object.
|
|
18
|
-
|
|
19
|
-
Args:
|
|
20
|
-
date_text (str): A string of text that represents a date.
|
|
21
|
-
|
|
22
|
-
Returns:
|
|
23
|
-
datetime.date: A datetime.date object representing the parsed date, or None if the text cannot be parsed.
|
|
24
|
-
"""
|
|
25
|
-
try:
|
|
26
|
-
# Remove any non-digit characters
|
|
27
|
-
date_text_clean = re.sub(r'\D', '', date_text)
|
|
28
|
-
# Reformat to 'ddmmyyyy' if necessary
|
|
29
|
-
if len(date_text_clean) == 8:
|
|
30
|
-
return datetime.strptime(date_text_clean, "%d%m%Y").date()
|
|
31
|
-
elif len(date_text_clean) == 14:
|
|
32
|
-
return datetime.strptime(date_text_clean, "%d%m%Y%H%M%S").date()
|
|
33
|
-
except ValueError:
|
|
34
|
-
# Return None if the text cannot be parsed into a date
|
|
35
|
-
# set date to 1/1/1900
|
|
36
|
-
return datetime.strptime("01011900", "%d%m%Y").date()
|
|
37
|
-
|
|
38
|
-
# Helper function to process patient names
|
|
39
|
-
def process_name_text(name_text):
|
|
40
|
-
"""
|
|
41
|
-
Remove all numbers, punctuation, and whitespace from a string of text and return the result.
|
|
42
|
-
"""
|
|
43
|
-
name = re.sub(r'[0-9!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~\s]+', '', name_text).strip()
|
|
44
|
-
# capitalize first letter of each word
|
|
45
|
-
name = ' '.join([word.capitalize() for word in name.split()])
|
|
46
|
-
return name
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
# Helper function to process endoscope type text
|
|
50
|
-
def process_general_text(endoscope_text):
|
|
51
|
-
"""
|
|
52
|
-
This function takes in a string of text from an endoscope and returns a cleaned version of the text.
|
|
53
|
-
"""
|
|
54
|
-
return ' '.join(endoscope_text.split())
|
|
55
|
-
|
|
56
|
-
def roi_values_valid(roi):
|
|
57
|
-
"""
|
|
58
|
-
Check if all values in an ROI dictionary are valid (>=0).
|
|
59
|
-
"""
|
|
60
|
-
return all([value >= 0 for value in roi.values()])
|
|
61
|
-
|
|
62
|
-
# Function to extract text from ROIs
|
|
63
|
-
def extract_text_from_rois(image_path, processor:EndoscopyProcessor):
|
|
64
|
-
"""
|
|
65
|
-
Extracts text from regions of interest (ROIs) in an image using OCR.
|
|
66
|
-
|
|
67
|
-
Args:
|
|
68
|
-
image_path (str): The path to the image file.
|
|
69
|
-
processor (EndoscopyProcessor): An instance of the EndoscopyProcessor class.
|
|
70
|
-
|
|
71
|
-
Returns:
|
|
72
|
-
dict: A dictionary containing the extracted text for each ROI.
|
|
73
|
-
"""
|
|
74
|
-
# Read the image using OpenCV
|
|
75
|
-
image = cv2.imread(image_path)
|
|
76
|
-
|
|
77
|
-
# Initialize the dictionary to hold the extracted text
|
|
78
|
-
extracted_texts = {}
|
|
79
|
-
|
|
80
|
-
# Define your ROIs and their corresponding post-processing functions in tuples
|
|
81
|
-
rois_with_postprocessing = [
|
|
82
|
-
('examination_date', processor.get_roi_examination_date, process_date_text),
|
|
83
|
-
("patient_first_name", processor.get_roi_patient_first_name, process_name_text),
|
|
84
|
-
('patient_last_name', processor.get_roi_patient_last_name, process_name_text),
|
|
85
|
-
('patient_dob', processor.get_roi_patient_dob, process_date_text),
|
|
86
|
-
('endoscope_type', processor.get_roi_endoscope_type, process_general_text),
|
|
87
|
-
('endoscope_sn', processor.get_roi_endoscopy_sn, process_general_text),
|
|
88
|
-
]
|
|
89
|
-
|
|
90
|
-
# Extract and post-process text for each ROI
|
|
91
|
-
for roi_name, roi_function, post_process in rois_with_postprocessing:
|
|
92
|
-
# Get the ROI dictionary
|
|
93
|
-
roi = roi_function()
|
|
94
|
-
|
|
95
|
-
# Check if the ROI has values
|
|
96
|
-
|
|
97
|
-
if roi_values_valid(roi):
|
|
98
|
-
# Crop the image to the ROI
|
|
99
|
-
x, y, w, h = roi['x'], roi['y'], roi['width'], roi['height']
|
|
100
|
-
roi_cropped = image[y:y+h, x:x+w]
|
|
101
|
-
# Convert to grayscale
|
|
102
|
-
gray = cv2.cvtColor(roi_cropped, cv2.COLOR_BGR2GRAY)
|
|
103
|
-
|
|
104
|
-
# Invert colors for white text on black background
|
|
105
|
-
gray = cv2.bitwise_not(gray)
|
|
106
|
-
|
|
107
|
-
# Binarize the image - using Otsu's method
|
|
108
|
-
_, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
|
|
109
|
-
|
|
110
|
-
# Dilate the image to improve the contour of the pixelated text
|
|
111
|
-
kernel = np.ones((2,2), np.uint8)
|
|
112
|
-
dilation = cv2.dilate(binary, kernel, iterations=1)
|
|
113
|
-
|
|
114
|
-
# OCR configuration: Recognize white text on black background without corrections
|
|
115
|
-
config = '--psm 10 -c tessedit_char_whitelist=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-üöäÜÖÄß'
|
|
116
|
-
|
|
117
|
-
# Use pytesseract to do OCR on the preprocessed ROI
|
|
118
|
-
text = pytesseract.image_to_string(dilation, config=config).strip()
|
|
119
|
-
|
|
120
|
-
# Post-process extracted text
|
|
121
|
-
processed_text = post_process(text)
|
|
122
|
-
# processed_text = text
|
|
123
|
-
|
|
124
|
-
# Store the processed text in the dictionary
|
|
125
|
-
extracted_texts[roi_name] = processed_text
|
|
126
|
-
|
|
127
|
-
else:
|
|
128
|
-
pass
|
|
129
|
-
# ic(roi_name)
|
|
130
|
-
# ic(roi)
|
|
131
|
-
# ic("No values for this ROI")
|
|
132
|
-
|
|
133
|
-
return extracted_texts
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
def get_most_frequent_values(rois_texts: Dict[str, List[str]]) -> Dict[str, str]:
|
|
137
|
-
"""
|
|
138
|
-
Given a dictionary of ROIs and their corresponding texts, returns a dictionary of the most frequent text for each ROI.
|
|
139
|
-
|
|
140
|
-
Args:
|
|
141
|
-
rois_texts: A dictionary where the keys are the names of the ROIs and the values are lists of texts.
|
|
142
|
-
|
|
143
|
-
Returns:
|
|
144
|
-
A dictionary where the keys are the names of the ROIs and the values are the most frequent text for each ROI.
|
|
145
|
-
"""
|
|
146
|
-
most_frequent = {}
|
|
147
|
-
for key in rois_texts.keys():
|
|
148
|
-
counter = Counter([text for text in rois_texts[key] if text])
|
|
149
|
-
# ic(key)
|
|
150
|
-
# ic(counter)
|
|
151
|
-
most_frequent[key], _ = counter.most_common(1)[0] if counter else (None, None)
|
|
152
|
-
return most_frequent
|
|
153
|
-
|
|
154
|
-
def process_video(video_path, processor):
|
|
155
|
-
"""
|
|
156
|
-
Processes a video file by extracting text from regions of interest (ROIs) in each frame.
|
|
157
|
-
|
|
158
|
-
Args:
|
|
159
|
-
video_path (str): The path to the video file to process.
|
|
160
|
-
processor (OCRProcessor): An instance of the OCRProcessor class that defines the ROIs to extract text from.
|
|
161
|
-
|
|
162
|
-
Returns:
|
|
163
|
-
dict: A dictionary containing the most frequent text values extracted from each ROI.
|
|
164
|
-
"""
|
|
165
|
-
# Create a temporary directory to store frames
|
|
166
|
-
with TemporaryDirectory() as temp_dir:
|
|
167
|
-
# ic(temp_dir)
|
|
168
|
-
# Capture the video
|
|
169
|
-
video = cv2.VideoCapture(video_path)
|
|
170
|
-
success, frame_number = True, 0
|
|
171
|
-
rois_texts = {roi_name: [] for roi_name in processor.get_rois().keys()}
|
|
172
|
-
frames_for_mean_extraction = 0
|
|
173
|
-
|
|
174
|
-
while success:
|
|
175
|
-
success, frame = video.read()
|
|
176
|
-
|
|
177
|
-
# Check if this is the 200th frame
|
|
178
|
-
if frame_number % 1000 == 0 and success:
|
|
179
|
-
frame_path = os.path.join(temp_dir, f"frame_{frame_number}.jpg")
|
|
180
|
-
cv2.imwrite(frame_path, frame) # Save the frame as a JPEG file
|
|
181
|
-
# cv2.imwrite(f"_tmp/frame_{frame_number}.jpg", frame)
|
|
182
|
-
|
|
183
|
-
# Extract text from ROIs
|
|
184
|
-
extracted_texts = extract_text_from_rois(frame_path, processor)
|
|
185
|
-
# ic(extracted_texts)
|
|
186
|
-
|
|
187
|
-
# Store the extracted text from each ROI
|
|
188
|
-
for key, text in extracted_texts.items():
|
|
189
|
-
rois_texts[key].append(text)
|
|
190
|
-
frames_for_mean_extraction += 1
|
|
191
|
-
|
|
192
|
-
frame_number += 1
|
|
193
|
-
|
|
194
|
-
if frames_for_mean_extraction >= N_FRAMES_MEAN_OCR: break
|
|
195
|
-
|
|
196
|
-
# Release the video capture object
|
|
197
|
-
video.release()
|
|
198
|
-
|
|
199
|
-
# Get the most frequent values for each ROI
|
|
200
|
-
return get_most_frequent_values(rois_texts)
|
|
201
|
-
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
# import cv2
|
|
2
|
-
from pathlib import Path
|
|
3
|
-
import datetime
|
|
4
|
-
|
|
5
|
-
def _extract_metadata_from_filename(filepath:Path, time_format = None): # deprecated
|
|
6
|
-
"""
|
|
7
|
-
Extracts metadata from a video filename.
|
|
8
|
-
|
|
9
|
-
Args:
|
|
10
|
-
filepath (Path): The path to the video file.
|
|
11
|
-
time_format (str, optional): The format of the date in the filename. Defaults to None.
|
|
12
|
-
|
|
13
|
-
Returns:
|
|
14
|
-
dict: A dictionary containing the extracted metadata.
|
|
15
|
-
|
|
16
|
-
Example return value:
|
|
17
|
-
{
|
|
18
|
-
'examination_date': '2021-03-03',
|
|
19
|
-
'patient_last_name': 'Doe',
|
|
20
|
-
'patient_first_name': 'John',
|
|
21
|
-
'patient_dob': '1990-01-01'
|
|
22
|
-
}
|
|
23
|
-
"""
|
|
24
|
-
# get filename without suffix
|
|
25
|
-
filename = filepath.stem
|
|
26
|
-
|
|
27
|
-
if not time_format:
|
|
28
|
-
time_format = "%d.%m.%Y"
|
|
29
|
-
|
|
30
|
-
_info = [_.strip() for _ in filename.split("_")]
|
|
31
|
-
|
|
32
|
-
if len(_info) == 4:
|
|
33
|
-
examination_date, last_name, first_name, birthdate = _info
|
|
34
|
-
|
|
35
|
-
else:
|
|
36
|
-
examination_date, last_name, first_name, birthdate = None, None, None, None
|
|
37
|
-
|
|
38
|
-
metadata = {}
|
|
39
|
-
metadata['examination_date'] = examination_date
|
|
40
|
-
metadata['patient_last_name'] = last_name
|
|
41
|
-
metadata['patient_first_name'] = first_name
|
|
42
|
-
metadata['patient_dob'] = birthdate
|
|
43
|
-
|
|
44
|
-
try:
|
|
45
|
-
metadata['examination_date'] = datetime.datetime.strptime(examination_date, time_format).date()
|
|
46
|
-
metadata['examination_date'] = metadata['examination_date'].strftime("%Y-%m-%d")
|
|
47
|
-
except:
|
|
48
|
-
metadata['examination_date'] = None
|
|
49
|
-
|
|
50
|
-
try:
|
|
51
|
-
metadata['patient_dob'] = datetime.datetime.strptime(birthdate, time_format).date()
|
|
52
|
-
metadata['patient_dob'] = metadata['patient_dob'].strftime("%Y-%m-%d")
|
|
53
|
-
except:
|
|
54
|
-
metadata['patient_dob'] = None
|
|
55
|
-
|
|
56
|
-
return metadata
|
|
57
|
-
|
|
58
|
-
def _get_video_metadata(file_path): # Deprecated
|
|
59
|
-
"""
|
|
60
|
-
Returns the framerate, dimensions, and duration of a video file.
|
|
61
|
-
|
|
62
|
-
Parameters:
|
|
63
|
-
file_path (str): The path to the video file.
|
|
64
|
-
|
|
65
|
-
Returns:
|
|
66
|
-
tuple: A tuple containing the framerate (float), dimensions (tuple of ints), and duration (float) of the video.
|
|
67
|
-
"""
|
|
68
|
-
# Open the video file
|
|
69
|
-
video = cv2.VideoCapture(file_path)
|
|
70
|
-
|
|
71
|
-
# Get the video framerate
|
|
72
|
-
fps = video.get(cv2.CAP_PROP_FPS)
|
|
73
|
-
|
|
74
|
-
# Get the video dimensions
|
|
75
|
-
width = int(video.get(cv2.CAP_PROP_FRAME_WIDTH))
|
|
76
|
-
height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))
|
|
77
|
-
dimensions = (width, height)
|
|
78
|
-
|
|
79
|
-
# Get the video duration
|
|
80
|
-
frame_count = int(video.get(cv2.CAP_PROP_FRAME_COUNT))
|
|
81
|
-
duration = frame_count / fps
|
|
82
|
-
|
|
83
|
-
# Release the video file
|
|
84
|
-
video.release()
|
|
85
|
-
|
|
86
|
-
# Return the metadata
|
|
87
|
-
return fps, dimensions, duration
|