endoreg-db 0.3.6__py3-none-any.whl → 0.3.7__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 +3 -3
- endoreg_db/apps.py +6 -6
- endoreg_db/data/__init__.py +67 -64
- endoreg_db/data/active_model/data.yaml +2 -2
- endoreg_db/data/case_template/rule/00_patient_lab_sample_add_default_value.yaml +167 -167
- endoreg_db/data/case_template/rule/01_patient-set-age.yaml +7 -7
- endoreg_db/data/case_template/rule/01_patient-set-gender.yaml +8 -8
- endoreg_db/data/case_template/rule/11_create_patient_lab_sample.yaml +22 -22
- endoreg_db/data/case_template/rule/12_create-patient_medication-anticoagulation.yaml +18 -18
- endoreg_db/data/case_template/rule/13_create-patient_medication_schedule-anticoagulation.yaml +18 -18
- endoreg_db/data/case_template/rule/19_create_patient.yaml +16 -16
- endoreg_db/data/case_template/rule_type/base_types.yaml +35 -35
- endoreg_db/data/case_template/rule_value_type/base_types.yaml +58 -58
- endoreg_db/data/case_template/template/base.yaml +7 -7
- endoreg_db/data/case_template/template_type/pre_endoscopy.yaml +2 -2
- endoreg_db/data/case_template/tmp/_rule_value +13 -13
- endoreg_db/data/case_template/tmp/rule/01_atrial_fibrillation.yaml +21 -21
- endoreg_db/data/case_template/tmp/rule/02_create_object.yaml +9 -9
- endoreg_db/data/case_template/tmp/template/atrial_fibrillation_low_risk.yaml +6 -6
- endoreg_db/data/center/data.yaml +59 -59
- endoreg_db/data/center_resource/green_endoscopy_dashboard_CenterResource.yaml +144 -144
- endoreg_db/data/center_waste/green_endoscopy_dashboard_CenterWaste.yaml +48 -48
- endoreg_db/data/disease/cardiovascular.yaml +37 -37
- endoreg_db/data/disease/hepatology.yaml +4 -4
- endoreg_db/data/disease/misc.yaml +5 -5
- endoreg_db/data/disease/renal.yaml +4 -4
- endoreg_db/data/disease_classification/chronic_kidney_disease.yaml +5 -5
- endoreg_db/data/disease_classification/coronary_vessel_disease.yaml +5 -5
- endoreg_db/data/disease_classification_choice/chronic_kidney_disease.yaml +40 -40
- endoreg_db/data/disease_classification_choice/coronary_vessel_disease.yaml +19 -19
- endoreg_db/data/distribution/date/patient.yaml +6 -6
- endoreg_db/data/distribution/single_categorical/patient.yaml +6 -6
- endoreg_db/data/emission_factor/green_endoscopy_dashboard_EmissionFactor.yaml +132 -132
- endoreg_db/data/endoscope_type/data.yaml +10 -10
- endoreg_db/data/endoscopy_processor/data.yaml +45 -45
- endoreg_db/data/event/cardiology.yaml +27 -27
- endoreg_db/data/event/neurology.yaml +13 -13
- endoreg_db/data/event/surgery.yaml +12 -12
- endoreg_db/data/event/thrombembolism.yaml +19 -19
- endoreg_db/data/examination/examinations/data.yaml +65 -65
- endoreg_db/data/examination/time/data.yaml +47 -47
- endoreg_db/data/examination/time-type/data.yaml +7 -7
- endoreg_db/data/examination/type/data.yaml +5 -5
- endoreg_db/data/gender/data.yaml +18 -18
- endoreg_db/data/information_source/data.yaml +30 -30
- endoreg_db/data/information_source/medication.yaml +5 -5
- endoreg_db/data/lab_value/cardiac_enzymes.yaml +30 -30
- endoreg_db/data/lab_value/coagulation.yaml +48 -48
- endoreg_db/data/lab_value/electrolytes.yaml +189 -189
- endoreg_db/data/lab_value/gastrointestinal_function.yaml +121 -121
- endoreg_db/data/lab_value/hematology.yaml +169 -169
- endoreg_db/data/lab_value/hormones.yaml +53 -53
- endoreg_db/data/lab_value/lipids.yaml +44 -44
- endoreg_db/data/lab_value/misc.yaml +30 -30
- endoreg_db/data/lab_value/renal_function.yaml +10 -10
- endoreg_db/data/label/label/data.yaml +62 -62
- endoreg_db/data/label/label-set/data.yaml +17 -17
- endoreg_db/data/label/label-type/data.yaml +6 -6
- endoreg_db/data/medication/anticoagulation.yaml +64 -64
- endoreg_db/data/medication/tah.yaml +69 -69
- endoreg_db/data/medication_indication/anticoagulation.yaml +120 -120
- endoreg_db/data/medication_indication_type/data.yaml +10 -10
- endoreg_db/data/medication_indication_type/thrombembolism.yaml +40 -40
- endoreg_db/data/medication_intake_time/base.yaml +30 -30
- endoreg_db/data/medication_schedule/apixaban.yaml +94 -94
- endoreg_db/data/medication_schedule/ass.yaml +12 -12
- endoreg_db/data/medication_schedule/enoxaparin.yaml +26 -26
- endoreg_db/data/model_type/data.yaml +6 -6
- endoreg_db/data/network_device/data.yaml +17 -0
- endoreg_db/data/network_device_type/data.yaml +8 -0
- endoreg_db/data/patient_lab_sample_type/generic.yaml +5 -5
- endoreg_db/data/pdf_type/data.yaml +28 -28
- endoreg_db/data/product/green_endoscopy_dashboard_Product.yaml +66 -66
- endoreg_db/data/product_group/green_endoscopy_dashboard_ProductGroup.yaml +33 -33
- endoreg_db/data/product_material/green_endoscopy_dashboard_ProductMaterial.yaml +308 -308
- endoreg_db/data/product_weight/green_endoscopy_dashboard_ProductWeight.yaml +88 -88
- endoreg_db/data/profession/data.yaml +70 -70
- endoreg_db/data/reference_product/green_endoscopy_dashboard_ReferenceProduct.yaml +55 -55
- endoreg_db/data/report_reader_flag/ukw-examination-generic.yaml +26 -26
- endoreg_db/data/report_reader_flag/ukw-histology-generic.yaml +19 -19
- endoreg_db/data/resource/green_endoscopy_dashboard_Resource.yaml +15 -15
- endoreg_db/data/transport_route/green_endoscopy_dashboard_TransportRoute.yaml +12 -12
- endoreg_db/data/unit/concentration.yaml +92 -92
- endoreg_db/data/unit/data.yaml +17 -17
- endoreg_db/data/unit/length.yaml +30 -30
- endoreg_db/data/unit/misc.yaml +19 -19
- endoreg_db/data/unit/rate.yaml +5 -5
- endoreg_db/data/unit/time.yaml +12 -12
- endoreg_db/data/unit/volume.yaml +35 -35
- endoreg_db/data/unit/weight.yaml +37 -37
- endoreg_db/data/waste/data.yaml +11 -11
- endoreg_db/forms/__init__.py +2 -2
- endoreg_db/forms/questionnaires/tto_questionnaire.py +23 -23
- endoreg_db/forms/settings/__init__.py +8 -8
- endoreg_db/forms/unit.py +5 -5
- endoreg_db/management/commands/_load_model_template.py +40 -40
- endoreg_db/management/commands/delete_all.py +18 -18
- endoreg_db/management/commands/delete_legacy_images.py +19 -19
- endoreg_db/management/commands/delete_legacy_videos.py +16 -16
- endoreg_db/management/commands/extract_legacy_video_frames.py +18 -18
- endoreg_db/management/commands/fetch_legacy_image_dataset.py +32 -32
- endoreg_db/management/commands/fix_auth_permission.py +20 -20
- endoreg_db/management/commands/import_legacy_images.py +94 -94
- endoreg_db/management/commands/import_legacy_videos.py +76 -76
- endoreg_db/management/commands/load_active_model_data.py +44 -44
- endoreg_db/management/commands/load_ai_model_data.py +44 -44
- endoreg_db/management/commands/load_base_db_data.py +132 -128
- endoreg_db/management/commands/load_center_data.py +42 -42
- endoreg_db/management/commands/load_disease_classification_choices_data.py +40 -40
- endoreg_db/management/commands/load_disease_classification_data.py +40 -40
- endoreg_db/management/commands/load_disease_data.py +39 -39
- endoreg_db/management/commands/load_distribution_data.py +65 -65
- endoreg_db/management/commands/load_endoscope_type_data.py +44 -44
- endoreg_db/management/commands/load_endoscopy_processor_data.py +44 -44
- endoreg_db/management/commands/load_event_data.py +40 -40
- endoreg_db/management/commands/load_examination_data.py +74 -74
- endoreg_db/management/commands/load_g_play_data.py +112 -112
- endoreg_db/management/commands/load_gender_data.py +43 -43
- endoreg_db/management/commands/load_green_endoscopy_wuerzburg_data.py +132 -132
- endoreg_db/management/commands/load_information_source.py +44 -44
- endoreg_db/management/commands/load_lab_value_data.py +49 -49
- endoreg_db/management/commands/load_label_data.py +66 -66
- endoreg_db/management/commands/load_medication_data.py +40 -40
- endoreg_db/management/commands/load_medication_indication_data.py +62 -62
- endoreg_db/management/commands/load_medication_indication_type_data.py +40 -40
- endoreg_db/management/commands/load_medication_intake_time_data.py +40 -40
- endoreg_db/management/commands/load_medication_schedule_data.py +54 -54
- endoreg_db/management/commands/load_network_data.py +49 -0
- endoreg_db/management/commands/load_pdf_type_data.py +60 -60
- endoreg_db/management/commands/load_profession_data.py +43 -43
- endoreg_db/management/commands/load_report_reader_flag.py +45 -45
- endoreg_db/management/commands/load_unit_data.py +45 -45
- endoreg_db/management/commands/load_user_groups.py +28 -28
- endoreg_db/management/commands/register_ai_model.py +65 -65
- endoreg_db/management/commands/reset_celery_schedule.py +9 -9
- endoreg_db/migrations/0001_initial.py +582 -582
- endoreg_db/migrations/0002_rawvideofile.py +26 -26
- endoreg_db/migrations/0003_rawvideofile_frames_required.py +18 -18
- endoreg_db/migrations/0004_rename_hash_rawvideofile_video_hash.py +18 -18
- endoreg_db/migrations/0005_ffmpegmeta_remove_videoimportmeta_center_and_more.py +56 -56
- endoreg_db/migrations/0006_rawvideofile_center_alter_videometa_processor.py +25 -25
- endoreg_db/migrations/0007_rawvideofile_processor.py +19 -19
- endoreg_db/migrations/0008_rename_frames_required_rawvideofile_state_frames_required.py +18 -18
- endoreg_db/migrations/0009_sensitivemeta_rawvideofile_sensitive_meta.py +31 -31
- endoreg_db/migrations/0010_rename_endoscope_serial_number_sensitivemeta_endoscope_sn.py +18 -18
- endoreg_db/migrations/0011_rawvideofile_state_sensitive_data_retrieved.py +18 -18
- endoreg_db/migrations/0012_rawvideofile_prediction_dir_and_more.py +109 -109
- endoreg_db/migrations/0013_rawpdffile.py +31 -31
- endoreg_db/migrations/0014_pdftype_alter_rawpdffile_file_pdfmeta.py +38 -38
- endoreg_db/migrations/0015_rename_report_processed_rawpdffile_state_report_processed_and_more.py +31 -31
- endoreg_db/migrations/0016_rawpdffile_state_report_processing_required.py +18 -18
- endoreg_db/migrations/0017_firstname_lastname_center_first_names_and_more.py +37 -37
- endoreg_db/migrations/0018_reportreaderflag_reportreaderconfig.py +37 -37
- endoreg_db/migrations/0019_pdftype_cut_off_above_lines_and_more.py +42 -42
- endoreg_db/migrations/0020_rename_endoscopy_info_line_pdftype_endoscope_info_line.py +18 -18
- endoreg_db/migrations/0021_alter_pdftype_endoscope_info_line.py +19 -19
- endoreg_db/migrations/0022_alter_pdftype_endoscope_info_line.py +19 -19
- endoreg_db/migrations/0023_ttoquestionnaire_alter_pdftype_endoscope_info_line.py +59 -59
- endoreg_db/migrations/0024_remove_ttoquestionnaire_infections_and_more.py +27 -27
- endoreg_db/migrations/0025_event_alter_rawpdffile_file_patientevent.py +42 -42
- endoreg_db/migrations/0026_disease_diseaseclassification_and_more.py +166 -166
- endoreg_db/migrations/0027_labvalue_abbreviation_labvalue_default_normal_range_and_more.py +38 -38
- endoreg_db/migrations/0028_alter_unit_abbreviation.py +18 -18
- endoreg_db/migrations/0029_medicationintaketime_and_more.py +75 -75
- endoreg_db/migrations/0030_medicationindicationtype_and_more.py +101 -101
- endoreg_db/migrations/0031_rename_adapt_to_liver_function_medication_adapt_to_age_and_more.py +38 -38
- endoreg_db/migrations/0032_alter_medicationschedule_therapy_duration_d.py +18 -18
- endoreg_db/migrations/0033_medicationindication_sources.py +18 -18
- endoreg_db/migrations/0034_alter_rawpdffile_file.py +20 -20
- endoreg_db/migrations/0035_alter_medicationindication_sources.py +18 -18
- endoreg_db/migrations/0036_alter_rawpdffile_file.py +20 -20
- endoreg_db/migrations/0037_alter_medicationindication_sources.py +18 -18
- endoreg_db/migrations/0038_emissionfactor_material_product_productgroup_and_more.py +164 -164
- endoreg_db/migrations/0039_referenceproduct_name.py +19 -19
- endoreg_db/migrations/0040_quizanswertype_quizquestiontype_quizquestion_and_more.py +50 -50
- endoreg_db/migrations/0041_gender_patientmedication_medication_indication_and_more.py +40 -40
- endoreg_db/migrations/0042_casetemplateruletype_casetemplaterulevalue_and_more.py +74 -74
- endoreg_db/migrations/0043_casetemplatetype_name_de_casetemplatetype_name_en.py +23 -23
- endoreg_db/migrations/0044_casetemplateruletype_name_de_and_more.py +23 -23
- endoreg_db/migrations/0045_casetemplaterulevalue_value_type.py +19 -19
- endoreg_db/migrations/0046_casetemplaterulevalue_target_field.py +18 -18
- endoreg_db/migrations/0047_casetemplaterule_target_model.py +18 -18
- endoreg_db/migrations/0048_remove_casetemplaterule_chained_rules_and_more.py +22 -22
- endoreg_db/migrations/0049_remove_casetemplaterule_rule_values.py +17 -17
- endoreg_db/migrations/0050_casetemplaterule_rule_values.py +18 -18
- endoreg_db/migrations/0051_remove_casetemplaterule_calling_rules_and_more.py +27 -27
- endoreg_db/migrations/0052_rename_case_template_type_casetemplate_template_type.py +18 -18
- endoreg_db/migrations/0053_patientlabsampletype_patientlabsample_and_more.py +38 -38
- endoreg_db/migrations/0054_multiplecategoricalvaluedistribution_and_more.py +69 -69
- endoreg_db/migrations/0055_remove_casetemplaterule_rule_values_and_more.py +59 -59
- endoreg_db/migrations/0056_datevaluedistribution_and_more.py +32 -32
- endoreg_db/migrations/0057_remove_datevaluedistribution_max_date_and_more.py +72 -72
- endoreg_db/migrations/0058_datevaluedistribution_description_and_more.py +28 -28
- endoreg_db/migrations/0059_casetemplaterule_rule_values.py +18 -18
- endoreg_db/migrations/0060_labvalue__default_date_value_distribution_and_more.py +44 -44
- endoreg_db/migrations/0061_remove_patientlabvalue_date_patientlabvalue_datetime.py +24 -24
- endoreg_db/migrations/0062_labvalue_numeric_precision.py +18 -18
- endoreg_db/migrations/0063_alter_labvalue_numeric_precision.py +18 -18
- endoreg_db/migrations/0064_casetemplaterule_extra_parameters_and_more.py +23 -23
- endoreg_db/migrations/0065_rename__date_value_distribution_casetemplaterule_date_value_distribution_and_more.py +58 -58
- endoreg_db/migrations/0066_alter_patientlabvalue_patient_and_more.py +29 -29
- endoreg_db/migrations/0067_alter_medicationindication_indication_type.py +19 -19
- endoreg_db/models/__init__.py +75 -74
- endoreg_db/models/ai_model/__init__.py +3 -3
- endoreg_db/models/ai_model/active_model.py +9 -9
- endoreg_db/models/ai_model/model_meta.py +24 -24
- endoreg_db/models/ai_model/model_type.py +25 -25
- endoreg_db/models/ai_model/utils.py +8 -8
- endoreg_db/models/annotation/__init__.py +1 -1
- endoreg_db/models/annotation/binary_classification_annotation_task.py +80 -80
- endoreg_db/models/annotation/image_classification.py +26 -26
- endoreg_db/models/case_template/__init__.py +5 -5
- endoreg_db/models/case_template/case_template.py +81 -81
- endoreg_db/models/case_template/case_template_rule.py +276 -276
- endoreg_db/models/case_template/case_template_rule_value.py +73 -73
- endoreg_db/models/case_template/case_template_type.py +27 -27
- endoreg_db/models/center/__init__.py +4 -4
- endoreg_db/models/center/center.py +24 -24
- endoreg_db/models/center/center_product.py +33 -33
- endoreg_db/models/center/center_resource.py +18 -18
- endoreg_db/models/center/center_waste.py +10 -10
- endoreg_db/models/data_file/__init__.py +5 -5
- endoreg_db/models/data_file/base_classes/__init__.py +2 -2
- endoreg_db/models/data_file/base_classes/abstract_frame.py +50 -50
- endoreg_db/models/data_file/base_classes/abstract_video.py +200 -200
- endoreg_db/models/data_file/frame.py +45 -45
- endoreg_db/models/data_file/import_classes/__init__.py +31 -31
- endoreg_db/models/data_file/import_classes/processing_functions/__init__.py +34 -34
- endoreg_db/models/data_file/import_classes/processing_functions/pdf.py +28 -28
- endoreg_db/models/data_file/import_classes/processing_functions/video.py +260 -260
- endoreg_db/models/data_file/import_classes/raw_pdf.py +188 -188
- endoreg_db/models/data_file/import_classes/raw_video.py +343 -343
- endoreg_db/models/data_file/metadata/__init__.py +3 -3
- endoreg_db/models/data_file/metadata/pdf_meta.py +70 -70
- endoreg_db/models/data_file/metadata/sensitive_meta.py +31 -31
- endoreg_db/models/data_file/metadata/video_meta.py +132 -132
- endoreg_db/models/data_file/report_file.py +89 -89
- endoreg_db/models/data_file/video/__init__.py +6 -6
- endoreg_db/models/data_file/video/import_meta.py +25 -25
- endoreg_db/models/data_file/video/video.py +25 -25
- endoreg_db/models/data_file/video_segment.py +107 -107
- endoreg_db/models/disease.py +55 -55
- endoreg_db/models/emission/emission_factor.py +19 -19
- endoreg_db/models/event.py +21 -21
- endoreg_db/models/examination/__init__.py +3 -3
- endoreg_db/models/examination/examination.py +26 -26
- endoreg_db/models/examination/examination_time.py +27 -27
- endoreg_db/models/examination/examination_time_type.py +24 -24
- endoreg_db/models/examination/examination_type.py +18 -18
- endoreg_db/models/hardware/__init__.py +1 -1
- endoreg_db/models/hardware/endoscope.py +44 -44
- endoreg_db/models/hardware/endoscopy_processor.py +143 -143
- endoreg_db/models/information_source.py +29 -29
- endoreg_db/models/label/label.py +84 -84
- endoreg_db/models/laboratory/lab_value.py +102 -102
- endoreg_db/models/legacy_data/__init__.py +3 -3
- endoreg_db/models/legacy_data/image.py +34 -34
- endoreg_db/models/medication/medication.py +148 -148
- endoreg_db/models/network/__init__.py +2 -0
- endoreg_db/models/network/network_device.py +27 -0
- endoreg_db/models/network/network_device_type.py +23 -0
- endoreg_db/models/other/__init__.py +4 -4
- endoreg_db/models/other/distribution.py +215 -215
- endoreg_db/models/other/material.py +16 -16
- endoreg_db/models/other/resource.py +17 -17
- endoreg_db/models/other/transport_route.py +20 -20
- endoreg_db/models/other/waste.py +20 -20
- endoreg_db/models/patient_examination/__init__.py +35 -35
- endoreg_db/models/permissions/__init__.py +44 -44
- endoreg_db/models/persons/__init__.py +6 -6
- endoreg_db/models/persons/examiner/__init__.py +1 -1
- endoreg_db/models/persons/examiner/examiner.py +15 -15
- endoreg_db/models/persons/examiner/examiner_type.py +1 -1
- endoreg_db/models/persons/first_name.py +17 -17
- endoreg_db/models/persons/gender.py +22 -22
- endoreg_db/models/persons/last_name.py +19 -19
- endoreg_db/models/persons/patient/__init__.py +7 -7
- endoreg_db/models/persons/patient/case/case.py +30 -30
- endoreg_db/models/persons/patient/patient.py +216 -216
- endoreg_db/models/persons/patient/patient_disease.py +16 -16
- endoreg_db/models/persons/patient/patient_event.py +22 -22
- endoreg_db/models/persons/patient/patient_lab_sample.py +106 -106
- endoreg_db/models/persons/patient/patient_lab_value.py +176 -176
- endoreg_db/models/persons/patient/patient_medication.py +43 -43
- endoreg_db/models/persons/patient/patient_medication_schedule.py +27 -27
- endoreg_db/models/persons/person.py +31 -31
- endoreg_db/models/persons/portal_user_information.py +27 -27
- endoreg_db/models/prediction/__init__.py +1 -1
- endoreg_db/models/prediction/image_classification.py +37 -37
- endoreg_db/models/prediction/video_prediction_meta.py +244 -244
- endoreg_db/models/product/__init__.py +4 -4
- endoreg_db/models/product/product.py +97 -97
- endoreg_db/models/product/product_group.py +19 -19
- endoreg_db/models/product/product_material.py +24 -24
- endoreg_db/models/product/product_weight.py +26 -26
- endoreg_db/models/product/reference_product.py +99 -99
- endoreg_db/models/questionnaires/__init__.py +114 -114
- endoreg_db/models/quiz/__init__.py +1 -1
- endoreg_db/models/quiz/quiz_answer.py +41 -41
- endoreg_db/models/quiz/quiz_question.py +54 -54
- endoreg_db/models/report_reader/__init__.py +1 -1
- endoreg_db/models/report_reader/report_reader_config.py +53 -53
- endoreg_db/models/report_reader/report_reader_flag.py +19 -19
- endoreg_db/models/rules/__init__.py +4 -4
- endoreg_db/models/rules/rule.py +23 -23
- endoreg_db/models/rules/rule_applicator.py +224 -224
- endoreg_db/models/rules/rule_attribute_dtype.py +18 -18
- endoreg_db/models/rules/rule_type.py +21 -21
- endoreg_db/models/rules/ruleset.py +19 -19
- endoreg_db/models/unit.py +21 -21
- endoreg_db/queries/__init__.py +4 -4
- endoreg_db/queries/annotations/__init__.py +2 -2
- endoreg_db/queries/annotations/legacy.py +159 -159
- endoreg_db/queries/get/__init__.py +5 -5
- endoreg_db/queries/get/center.py +42 -42
- endoreg_db/queries/get/model.py +13 -13
- endoreg_db/queries/get/patient.py +14 -14
- endoreg_db/queries/get/patient_examination.py +20 -20
- endoreg_db/queries/get/report_file.py +33 -33
- endoreg_db/queries/get/video.py +31 -31
- endoreg_db/serializers/__init__.py +9 -9
- endoreg_db/serializers/ai_model.py +18 -18
- endoreg_db/serializers/annotation.py +17 -17
- endoreg_db/serializers/center.py +11 -11
- endoreg_db/serializers/examination.py +32 -32
- endoreg_db/serializers/frame.py +13 -13
- endoreg_db/serializers/hardware.py +20 -20
- endoreg_db/serializers/label.py +22 -22
- endoreg_db/serializers/patient.py +10 -10
- endoreg_db/serializers/prediction.py +15 -15
- endoreg_db/serializers/report_file.py +7 -7
- endoreg_db/serializers/video.py +27 -27
- endoreg_db/tests.py +3 -3
- endoreg_db/utils/cropping.py +28 -28
- endoreg_db/utils/dataloader.py +92 -92
- endoreg_db/utils/file_operations.py +30 -30
- endoreg_db/utils/hashs.py +33 -33
- endoreg_db/utils/legacy_ocr.py +201 -201
- endoreg_db/utils/ocr.py +197 -197
- endoreg_db/utils/uuid.py +4 -4
- endoreg_db/utils/video_metadata.py +87 -87
- endoreg_db/views.py +3 -3
- {endoreg_db-0.3.6.dist-info → endoreg_db-0.3.7.dist-info}/LICENSE +674 -674
- {endoreg_db-0.3.6.dist-info → endoreg_db-0.3.7.dist-info}/METADATA +2 -2
- endoreg_db-0.3.7.dist-info/RECORD +363 -0
- {endoreg_db-0.3.6.dist-info → endoreg_db-0.3.7.dist-info}/WHEEL +1 -1
- endoreg_db-0.3.6.dist-info/RECORD +0 -357
endoreg_db/models/label/label.py
CHANGED
|
@@ -1,84 +1,84 @@
|
|
|
1
|
-
from django.db import models
|
|
2
|
-
|
|
3
|
-
class LabelTypeManager(models.Manager):
|
|
4
|
-
def get_by_natural_key(self, name):
|
|
5
|
-
return self.get(name=name)
|
|
6
|
-
|
|
7
|
-
class LabelType(models.Model):
|
|
8
|
-
"""
|
|
9
|
-
A class representing a label type.
|
|
10
|
-
|
|
11
|
-
Attributes:
|
|
12
|
-
name (str): The name of the label type.
|
|
13
|
-
description (str): A description of the label type.
|
|
14
|
-
|
|
15
|
-
"""
|
|
16
|
-
name = models.CharField(max_length=255)
|
|
17
|
-
description = models.TextField(blank=True, null=True)
|
|
18
|
-
|
|
19
|
-
objects = LabelTypeManager()
|
|
20
|
-
|
|
21
|
-
def natural_key(self):
|
|
22
|
-
return (self.name,)
|
|
23
|
-
|
|
24
|
-
def __str__(self):
|
|
25
|
-
return self.name
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
class LabelManager(models.Manager):
|
|
29
|
-
def get_by_natural_key(self, name):
|
|
30
|
-
return self.get(name=name)
|
|
31
|
-
|
|
32
|
-
class Label(models.Model):
|
|
33
|
-
"""
|
|
34
|
-
A class representing a label.
|
|
35
|
-
|
|
36
|
-
Attributes:
|
|
37
|
-
name (str): The name of the label.
|
|
38
|
-
label_type (LabelType): The type of the label.
|
|
39
|
-
description (str): A description of the label.
|
|
40
|
-
|
|
41
|
-
"""
|
|
42
|
-
name = models.CharField(max_length=255)
|
|
43
|
-
label_type = models.ForeignKey("LabelType", on_delete=models.CASCADE, related_name="labels")
|
|
44
|
-
description = models.TextField(blank=True, null=True)
|
|
45
|
-
|
|
46
|
-
objects = LabelManager()
|
|
47
|
-
|
|
48
|
-
def natural_key(self):
|
|
49
|
-
return (self.name,)
|
|
50
|
-
|
|
51
|
-
def __str__(self):
|
|
52
|
-
return self.name
|
|
53
|
-
|
|
54
|
-
class LabelSetManager(models.Manager):
|
|
55
|
-
def get_by_natural_key(self, name):
|
|
56
|
-
return self.get(name=name)
|
|
57
|
-
|
|
58
|
-
class LabelSet(models.Model):
|
|
59
|
-
"""
|
|
60
|
-
A class representing a label set.
|
|
61
|
-
|
|
62
|
-
Attributes:
|
|
63
|
-
name (str): The name of the label set.
|
|
64
|
-
description (str): A description of the label set.
|
|
65
|
-
|
|
66
|
-
"""
|
|
67
|
-
name = models.CharField(max_length=255)
|
|
68
|
-
description = models.TextField(blank=True, null=True)
|
|
69
|
-
version = models.IntegerField()
|
|
70
|
-
labels = models.ManyToManyField("Label", related_name="labels")
|
|
71
|
-
|
|
72
|
-
objects = LabelSetManager()
|
|
73
|
-
|
|
74
|
-
def natural_key(self):
|
|
75
|
-
return (self.name,)
|
|
76
|
-
|
|
77
|
-
def __str__(self):
|
|
78
|
-
return self.name
|
|
79
|
-
|
|
80
|
-
def get_labels_in_order(self):
|
|
81
|
-
"""
|
|
82
|
-
Get all labels in this label set as list in the correct order.
|
|
83
|
-
"""
|
|
84
|
-
return list(self.labels.all().order_by('id'))
|
|
1
|
+
from django.db import models
|
|
2
|
+
|
|
3
|
+
class LabelTypeManager(models.Manager):
|
|
4
|
+
def get_by_natural_key(self, name):
|
|
5
|
+
return self.get(name=name)
|
|
6
|
+
|
|
7
|
+
class LabelType(models.Model):
|
|
8
|
+
"""
|
|
9
|
+
A class representing a label type.
|
|
10
|
+
|
|
11
|
+
Attributes:
|
|
12
|
+
name (str): The name of the label type.
|
|
13
|
+
description (str): A description of the label type.
|
|
14
|
+
|
|
15
|
+
"""
|
|
16
|
+
name = models.CharField(max_length=255)
|
|
17
|
+
description = models.TextField(blank=True, null=True)
|
|
18
|
+
|
|
19
|
+
objects = LabelTypeManager()
|
|
20
|
+
|
|
21
|
+
def natural_key(self):
|
|
22
|
+
return (self.name,)
|
|
23
|
+
|
|
24
|
+
def __str__(self):
|
|
25
|
+
return self.name
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class LabelManager(models.Manager):
|
|
29
|
+
def get_by_natural_key(self, name):
|
|
30
|
+
return self.get(name=name)
|
|
31
|
+
|
|
32
|
+
class Label(models.Model):
|
|
33
|
+
"""
|
|
34
|
+
A class representing a label.
|
|
35
|
+
|
|
36
|
+
Attributes:
|
|
37
|
+
name (str): The name of the label.
|
|
38
|
+
label_type (LabelType): The type of the label.
|
|
39
|
+
description (str): A description of the label.
|
|
40
|
+
|
|
41
|
+
"""
|
|
42
|
+
name = models.CharField(max_length=255)
|
|
43
|
+
label_type = models.ForeignKey("LabelType", on_delete=models.CASCADE, related_name="labels")
|
|
44
|
+
description = models.TextField(blank=True, null=True)
|
|
45
|
+
|
|
46
|
+
objects = LabelManager()
|
|
47
|
+
|
|
48
|
+
def natural_key(self):
|
|
49
|
+
return (self.name,)
|
|
50
|
+
|
|
51
|
+
def __str__(self):
|
|
52
|
+
return self.name
|
|
53
|
+
|
|
54
|
+
class LabelSetManager(models.Manager):
|
|
55
|
+
def get_by_natural_key(self, name):
|
|
56
|
+
return self.get(name=name)
|
|
57
|
+
|
|
58
|
+
class LabelSet(models.Model):
|
|
59
|
+
"""
|
|
60
|
+
A class representing a label set.
|
|
61
|
+
|
|
62
|
+
Attributes:
|
|
63
|
+
name (str): The name of the label set.
|
|
64
|
+
description (str): A description of the label set.
|
|
65
|
+
|
|
66
|
+
"""
|
|
67
|
+
name = models.CharField(max_length=255)
|
|
68
|
+
description = models.TextField(blank=True, null=True)
|
|
69
|
+
version = models.IntegerField()
|
|
70
|
+
labels = models.ManyToManyField("Label", related_name="labels")
|
|
71
|
+
|
|
72
|
+
objects = LabelSetManager()
|
|
73
|
+
|
|
74
|
+
def natural_key(self):
|
|
75
|
+
return (self.name,)
|
|
76
|
+
|
|
77
|
+
def __str__(self):
|
|
78
|
+
return self.name
|
|
79
|
+
|
|
80
|
+
def get_labels_in_order(self):
|
|
81
|
+
"""
|
|
82
|
+
Get all labels in this label set as list in the correct order.
|
|
83
|
+
"""
|
|
84
|
+
return list(self.labels.all().order_by('id'))
|
|
@@ -1,102 +1,102 @@
|
|
|
1
|
-
from django.db import models
|
|
2
|
-
import warnings
|
|
3
|
-
|
|
4
|
-
LANG = "de"
|
|
5
|
-
|
|
6
|
-
class LabValueManager(models.Manager):
|
|
7
|
-
def get_by_natural_key(self, name):
|
|
8
|
-
return self.get(name=name)
|
|
9
|
-
|
|
10
|
-
class LabValue(models.Model):
|
|
11
|
-
name = models.CharField(max_length=255, unique=True)
|
|
12
|
-
name_de = models.CharField(max_length=255, blank=True, null=True)
|
|
13
|
-
name_en = models.CharField(max_length=255, blank=True, null=True)
|
|
14
|
-
abbreviation = models.CharField(max_length=10, blank=True, null=True)
|
|
15
|
-
default_unit = models.ForeignKey('Unit', on_delete=models.CASCADE, blank=True, null=True)
|
|
16
|
-
numeric_precision = models.IntegerField(default=3)
|
|
17
|
-
default_single_categorical_value_distribution = models.ForeignKey(
|
|
18
|
-
'SingleCategoricalValueDistribution',
|
|
19
|
-
on_delete=models.CASCADE,
|
|
20
|
-
blank=True, null=True,
|
|
21
|
-
related_name='default_single_categorical_value_distribution'
|
|
22
|
-
)
|
|
23
|
-
default_numerical_value_distribution = models.ForeignKey(
|
|
24
|
-
'NumericValueDistribution',
|
|
25
|
-
on_delete=models.CASCADE,
|
|
26
|
-
blank=True, null=True,
|
|
27
|
-
related_name='default_numerical_value_distribution'
|
|
28
|
-
)
|
|
29
|
-
default_multiple_categorical_value_distribution = models.ForeignKey(
|
|
30
|
-
'MultipleCategoricalValueDistribution',
|
|
31
|
-
on_delete=models.CASCADE,
|
|
32
|
-
blank=True, null=True,
|
|
33
|
-
related_name='default_multiple_categorical_value_distribution'
|
|
34
|
-
)
|
|
35
|
-
default_date_value_distribution = models.ForeignKey(
|
|
36
|
-
'DateValueDistribution',
|
|
37
|
-
on_delete=models.CASCADE,
|
|
38
|
-
blank=True, null=True,
|
|
39
|
-
related_name='default_date_value_distribution'
|
|
40
|
-
)
|
|
41
|
-
default_normal_range = models.JSONField(blank=True, null=True)
|
|
42
|
-
normal_range_age_dependent = models.BooleanField(default=False)
|
|
43
|
-
normal_range_gender_dependent = models.BooleanField(default=False)
|
|
44
|
-
normal_range_special_case = models.BooleanField(default=False)
|
|
45
|
-
objects = LabValueManager()
|
|
46
|
-
|
|
47
|
-
def natural_key(self):
|
|
48
|
-
return (self.name,)
|
|
49
|
-
|
|
50
|
-
def __str__(self):
|
|
51
|
-
return self.name
|
|
52
|
-
|
|
53
|
-
def get_default_default_distribution(self):
|
|
54
|
-
if self.default_single_categorical_value_distribution:
|
|
55
|
-
return self.default_single_categorical_value_distribution
|
|
56
|
-
elif self.default_numerical_value_distribution:
|
|
57
|
-
return self.default_numerical_value_distribution
|
|
58
|
-
elif self.default_multiple_categorical_value_distribution:
|
|
59
|
-
return self.default_multiple_categorical_value_distribution
|
|
60
|
-
elif self.default_date_value_distribution:
|
|
61
|
-
return self.default_date_value_distribution
|
|
62
|
-
else:
|
|
63
|
-
warnings.warn("No default distribution set for lab value")
|
|
64
|
-
return None
|
|
65
|
-
|
|
66
|
-
def get_normal_range(self, age=None, gender=None):
|
|
67
|
-
age_dependent = self.normal_range_age_dependent
|
|
68
|
-
gender_dependent = self.normal_range_gender_dependent
|
|
69
|
-
special_case = self.normal_range_special_case
|
|
70
|
-
|
|
71
|
-
min_value = None
|
|
72
|
-
max_value = None
|
|
73
|
-
|
|
74
|
-
if not age_dependent and \
|
|
75
|
-
not gender_dependent and \
|
|
76
|
-
not special_case:
|
|
77
|
-
min_value = self.default_normal_range.get('min', None)
|
|
78
|
-
max_value = self.default_normal_range.get('max', None)
|
|
79
|
-
|
|
80
|
-
if age_dependent:
|
|
81
|
-
# get normal range for age)
|
|
82
|
-
warnings.warn("Age dependent normal range not implemented yet")
|
|
83
|
-
pass
|
|
84
|
-
|
|
85
|
-
if gender_dependent:
|
|
86
|
-
if not gender:
|
|
87
|
-
warnings.warn("Calling get_normal_range with gender_dependent=True requires gender to be set, choosing by random")
|
|
88
|
-
# set gender to either "male" or "female"
|
|
89
|
-
from random import choice
|
|
90
|
-
choices = ["male", "female"]
|
|
91
|
-
gender = choice(choices)
|
|
92
|
-
|
|
93
|
-
default_range_dict = self.default_normal_range.get(gender, {})
|
|
94
|
-
min_value = default_range_dict.get('min', None)
|
|
95
|
-
max_value = default_range_dict.get('max', None)
|
|
96
|
-
|
|
97
|
-
if special_case:
|
|
98
|
-
# get normal range for special case
|
|
99
|
-
warnings.warn("Special case normal range not implemented yet")
|
|
100
|
-
|
|
101
|
-
return min_value, max_value
|
|
102
|
-
|
|
1
|
+
from django.db import models
|
|
2
|
+
import warnings
|
|
3
|
+
|
|
4
|
+
LANG = "de"
|
|
5
|
+
|
|
6
|
+
class LabValueManager(models.Manager):
|
|
7
|
+
def get_by_natural_key(self, name):
|
|
8
|
+
return self.get(name=name)
|
|
9
|
+
|
|
10
|
+
class LabValue(models.Model):
|
|
11
|
+
name = models.CharField(max_length=255, unique=True)
|
|
12
|
+
name_de = models.CharField(max_length=255, blank=True, null=True)
|
|
13
|
+
name_en = models.CharField(max_length=255, blank=True, null=True)
|
|
14
|
+
abbreviation = models.CharField(max_length=10, blank=True, null=True)
|
|
15
|
+
default_unit = models.ForeignKey('Unit', on_delete=models.CASCADE, blank=True, null=True)
|
|
16
|
+
numeric_precision = models.IntegerField(default=3)
|
|
17
|
+
default_single_categorical_value_distribution = models.ForeignKey(
|
|
18
|
+
'SingleCategoricalValueDistribution',
|
|
19
|
+
on_delete=models.CASCADE,
|
|
20
|
+
blank=True, null=True,
|
|
21
|
+
related_name='default_single_categorical_value_distribution'
|
|
22
|
+
)
|
|
23
|
+
default_numerical_value_distribution = models.ForeignKey(
|
|
24
|
+
'NumericValueDistribution',
|
|
25
|
+
on_delete=models.CASCADE,
|
|
26
|
+
blank=True, null=True,
|
|
27
|
+
related_name='default_numerical_value_distribution'
|
|
28
|
+
)
|
|
29
|
+
default_multiple_categorical_value_distribution = models.ForeignKey(
|
|
30
|
+
'MultipleCategoricalValueDistribution',
|
|
31
|
+
on_delete=models.CASCADE,
|
|
32
|
+
blank=True, null=True,
|
|
33
|
+
related_name='default_multiple_categorical_value_distribution'
|
|
34
|
+
)
|
|
35
|
+
default_date_value_distribution = models.ForeignKey(
|
|
36
|
+
'DateValueDistribution',
|
|
37
|
+
on_delete=models.CASCADE,
|
|
38
|
+
blank=True, null=True,
|
|
39
|
+
related_name='default_date_value_distribution'
|
|
40
|
+
)
|
|
41
|
+
default_normal_range = models.JSONField(blank=True, null=True)
|
|
42
|
+
normal_range_age_dependent = models.BooleanField(default=False)
|
|
43
|
+
normal_range_gender_dependent = models.BooleanField(default=False)
|
|
44
|
+
normal_range_special_case = models.BooleanField(default=False)
|
|
45
|
+
objects = LabValueManager()
|
|
46
|
+
|
|
47
|
+
def natural_key(self):
|
|
48
|
+
return (self.name,)
|
|
49
|
+
|
|
50
|
+
def __str__(self):
|
|
51
|
+
return self.name
|
|
52
|
+
|
|
53
|
+
def get_default_default_distribution(self):
|
|
54
|
+
if self.default_single_categorical_value_distribution:
|
|
55
|
+
return self.default_single_categorical_value_distribution
|
|
56
|
+
elif self.default_numerical_value_distribution:
|
|
57
|
+
return self.default_numerical_value_distribution
|
|
58
|
+
elif self.default_multiple_categorical_value_distribution:
|
|
59
|
+
return self.default_multiple_categorical_value_distribution
|
|
60
|
+
elif self.default_date_value_distribution:
|
|
61
|
+
return self.default_date_value_distribution
|
|
62
|
+
else:
|
|
63
|
+
warnings.warn("No default distribution set for lab value")
|
|
64
|
+
return None
|
|
65
|
+
|
|
66
|
+
def get_normal_range(self, age=None, gender=None):
|
|
67
|
+
age_dependent = self.normal_range_age_dependent
|
|
68
|
+
gender_dependent = self.normal_range_gender_dependent
|
|
69
|
+
special_case = self.normal_range_special_case
|
|
70
|
+
|
|
71
|
+
min_value = None
|
|
72
|
+
max_value = None
|
|
73
|
+
|
|
74
|
+
if not age_dependent and \
|
|
75
|
+
not gender_dependent and \
|
|
76
|
+
not special_case:
|
|
77
|
+
min_value = self.default_normal_range.get('min', None)
|
|
78
|
+
max_value = self.default_normal_range.get('max', None)
|
|
79
|
+
|
|
80
|
+
if age_dependent:
|
|
81
|
+
# get normal range for age)
|
|
82
|
+
warnings.warn("Age dependent normal range not implemented yet")
|
|
83
|
+
pass
|
|
84
|
+
|
|
85
|
+
if gender_dependent:
|
|
86
|
+
if not gender:
|
|
87
|
+
warnings.warn("Calling get_normal_range with gender_dependent=True requires gender to be set, choosing by random")
|
|
88
|
+
# set gender to either "male" or "female"
|
|
89
|
+
from random import choice
|
|
90
|
+
choices = ["male", "female"]
|
|
91
|
+
gender = choice(choices)
|
|
92
|
+
|
|
93
|
+
default_range_dict = self.default_normal_range.get(gender, {})
|
|
94
|
+
min_value = default_range_dict.get('min', None)
|
|
95
|
+
max_value = default_range_dict.get('max', None)
|
|
96
|
+
|
|
97
|
+
if special_case:
|
|
98
|
+
# get normal range for special case
|
|
99
|
+
warnings.warn("Special case normal range not implemented yet")
|
|
100
|
+
|
|
101
|
+
return min_value, max_value
|
|
102
|
+
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
from ..data_file.frame import LegacyFrame
|
|
2
|
-
from .image import LegacyImage
|
|
3
|
-
from ..data_file.video import LegacyVideo
|
|
1
|
+
from ..data_file.frame import LegacyFrame
|
|
2
|
+
from .image import LegacyImage
|
|
3
|
+
from ..data_file.video import LegacyVideo
|
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
from django.db import models
|
|
2
|
-
from ..label.label import Label
|
|
3
|
-
from ..annotation.image_classification import ImageClassificationAnnotation
|
|
4
|
-
|
|
5
|
-
class LegacyImage(models.Model):
|
|
6
|
-
# Add any other fields you need to store frame-related information
|
|
7
|
-
image = models.ImageField(upload_to="legacy_images") # Or some other field type, depending on how you're storing the frame
|
|
8
|
-
suffix = models.CharField(max_length=255)
|
|
9
|
-
# ImageClassificationAnnotation has a foreign key to this model (related name: image_classification_annotations)
|
|
10
|
-
|
|
11
|
-
def get_classification_annotations(self):
|
|
12
|
-
"""
|
|
13
|
-
Get all image classification annotations for this image.
|
|
14
|
-
"""
|
|
15
|
-
return ImageClassificationAnnotation.objects.filter(legacy_image=self)
|
|
16
|
-
|
|
17
|
-
def get_classification_annotations_by_label(self, label:Label):
|
|
18
|
-
"""
|
|
19
|
-
Get all image classification annotations for this image with the given label.
|
|
20
|
-
"""
|
|
21
|
-
return ImageClassificationAnnotation.objects.filter(legacy_image=self, label=label)
|
|
22
|
-
|
|
23
|
-
def get_classification_annotations_by_value(self, value:bool):
|
|
24
|
-
"""
|
|
25
|
-
Get all image classification annotations for this image with the given value.
|
|
26
|
-
"""
|
|
27
|
-
return ImageClassificationAnnotation.objects.filter(legacy_image=self, value=value)
|
|
28
|
-
|
|
29
|
-
def get_classification_annotations_by_label_and_value(self, label:Label, value:bool):
|
|
30
|
-
"""
|
|
31
|
-
Get all image classification annotations for this image with the given label and value.
|
|
32
|
-
"""
|
|
33
|
-
return ImageClassificationAnnotation.objects.filter(legacy_image=self, label=label, value=value)
|
|
34
|
-
|
|
1
|
+
from django.db import models
|
|
2
|
+
from ..label.label import Label
|
|
3
|
+
from ..annotation.image_classification import ImageClassificationAnnotation
|
|
4
|
+
|
|
5
|
+
class LegacyImage(models.Model):
|
|
6
|
+
# Add any other fields you need to store frame-related information
|
|
7
|
+
image = models.ImageField(upload_to="legacy_images") # Or some other field type, depending on how you're storing the frame
|
|
8
|
+
suffix = models.CharField(max_length=255)
|
|
9
|
+
# ImageClassificationAnnotation has a foreign key to this model (related name: image_classification_annotations)
|
|
10
|
+
|
|
11
|
+
def get_classification_annotations(self):
|
|
12
|
+
"""
|
|
13
|
+
Get all image classification annotations for this image.
|
|
14
|
+
"""
|
|
15
|
+
return ImageClassificationAnnotation.objects.filter(legacy_image=self)
|
|
16
|
+
|
|
17
|
+
def get_classification_annotations_by_label(self, label:Label):
|
|
18
|
+
"""
|
|
19
|
+
Get all image classification annotations for this image with the given label.
|
|
20
|
+
"""
|
|
21
|
+
return ImageClassificationAnnotation.objects.filter(legacy_image=self, label=label)
|
|
22
|
+
|
|
23
|
+
def get_classification_annotations_by_value(self, value:bool):
|
|
24
|
+
"""
|
|
25
|
+
Get all image classification annotations for this image with the given value.
|
|
26
|
+
"""
|
|
27
|
+
return ImageClassificationAnnotation.objects.filter(legacy_image=self, value=value)
|
|
28
|
+
|
|
29
|
+
def get_classification_annotations_by_label_and_value(self, label:Label, value:bool):
|
|
30
|
+
"""
|
|
31
|
+
Get all image classification annotations for this image with the given label and value.
|
|
32
|
+
"""
|
|
33
|
+
return ImageClassificationAnnotation.objects.filter(legacy_image=self, label=label, value=value)
|
|
34
|
+
|