endoreg-db 0.3.5__py3-none-any.whl → 0.3.6__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 +64 -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/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 +128 -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_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 +74 -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/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.5.dist-info → endoreg_db-0.3.6.dist-info}/LICENSE +674 -674
- {endoreg_db-0.3.5.dist-info → endoreg_db-0.3.6.dist-info}/METADATA +2 -2
- endoreg_db-0.3.6.dist-info/RECORD +357 -0
- {endoreg_db-0.3.5.dist-info → endoreg_db-0.3.6.dist-info}/WHEEL +1 -1
- endoreg_db-0.3.5.dist-info/RECORD +0 -357
|
@@ -1,73 +1,73 @@
|
|
|
1
|
-
from django.db import models
|
|
2
|
-
|
|
3
|
-
class CaseTemplateRuleValueTypeManager(models.Manager):
|
|
4
|
-
def get_by_natural_key(self, name):
|
|
5
|
-
return self.get(name=name)
|
|
6
|
-
|
|
7
|
-
class CaseTemplateRuleValueType(models.Model):
|
|
8
|
-
"""
|
|
9
|
-
A class representing a case template rule value type.
|
|
10
|
-
|
|
11
|
-
Attributes:
|
|
12
|
-
name (str): The name of the case template rule value type.
|
|
13
|
-
distribution_type: One of "single_categorical", "multiple_categorical", "numeric"
|
|
14
|
-
description (str): A description of the case template rule value type.
|
|
15
|
-
"""
|
|
16
|
-
DISTRIBUTION_TYPES = [
|
|
17
|
-
("single_categorical", "single_categorical"),
|
|
18
|
-
("multiple_categorical", "multiple_categorical"),
|
|
19
|
-
("numeric", "numeric")
|
|
20
|
-
]
|
|
21
|
-
objects = CaseTemplateRuleValueTypeManager()
|
|
22
|
-
|
|
23
|
-
name = models.CharField(max_length=255)
|
|
24
|
-
name_de = models.CharField(max_length=255, null=True)
|
|
25
|
-
name_en = models.CharField(max_length=255, null=True)
|
|
26
|
-
description = models.TextField(blank=True, null=True)
|
|
27
|
-
|
|
28
|
-
distribution_type = models.CharField(max_length=255, choices=DISTRIBUTION_TYPES)
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
def natural_key(self):
|
|
32
|
-
return (self.name,)
|
|
33
|
-
|
|
34
|
-
def __str__(self):
|
|
35
|
-
return self.name
|
|
36
|
-
|
|
37
|
-
class CaseTemplateRuleValueManager(models.Manager):
|
|
38
|
-
def get_by_natural_key(self, name):
|
|
39
|
-
return self.get(name=name)
|
|
40
|
-
|
|
41
|
-
class CaseTemplateRuleValue(models.Model):
|
|
42
|
-
"""
|
|
43
|
-
A class representing a case template rule value.
|
|
44
|
-
|
|
45
|
-
Attributes:
|
|
46
|
-
value (str): The value of the case template rule value.
|
|
47
|
-
case_template_rule (CaseTemplateRule): The case template rule of the case template rule value.
|
|
48
|
-
case_template (CaseTemplate): The case template of the case template rule value.
|
|
49
|
-
"""
|
|
50
|
-
objects = CaseTemplateRuleValueManager()
|
|
51
|
-
|
|
52
|
-
name = models.CharField(max_length=255)
|
|
53
|
-
description = models.TextField(blank=True, null=True)
|
|
54
|
-
|
|
55
|
-
fk_value = models.CharField(max_length=255, null=True, blank=True)
|
|
56
|
-
numeric_value = models.FloatField(null=True, blank=True)
|
|
57
|
-
text_value = models.CharField(max_length=255, null=True, blank=True)
|
|
58
|
-
|
|
59
|
-
def natural_key(self):
|
|
60
|
-
return (self.name,)
|
|
61
|
-
|
|
62
|
-
def __str__(self):
|
|
63
|
-
return self.name
|
|
64
|
-
|
|
65
|
-
def get_value(self):
|
|
66
|
-
if self.fk_value:
|
|
67
|
-
return self.fk_value
|
|
68
|
-
elif self.numeric_value:
|
|
69
|
-
return self.numeric_value
|
|
70
|
-
elif self.text_value:
|
|
71
|
-
return self.text_value
|
|
72
|
-
else:
|
|
73
|
-
return None
|
|
1
|
+
from django.db import models
|
|
2
|
+
|
|
3
|
+
class CaseTemplateRuleValueTypeManager(models.Manager):
|
|
4
|
+
def get_by_natural_key(self, name):
|
|
5
|
+
return self.get(name=name)
|
|
6
|
+
|
|
7
|
+
class CaseTemplateRuleValueType(models.Model):
|
|
8
|
+
"""
|
|
9
|
+
A class representing a case template rule value type.
|
|
10
|
+
|
|
11
|
+
Attributes:
|
|
12
|
+
name (str): The name of the case template rule value type.
|
|
13
|
+
distribution_type: One of "single_categorical", "multiple_categorical", "numeric"
|
|
14
|
+
description (str): A description of the case template rule value type.
|
|
15
|
+
"""
|
|
16
|
+
DISTRIBUTION_TYPES = [
|
|
17
|
+
("single_categorical", "single_categorical"),
|
|
18
|
+
("multiple_categorical", "multiple_categorical"),
|
|
19
|
+
("numeric", "numeric")
|
|
20
|
+
]
|
|
21
|
+
objects = CaseTemplateRuleValueTypeManager()
|
|
22
|
+
|
|
23
|
+
name = models.CharField(max_length=255)
|
|
24
|
+
name_de = models.CharField(max_length=255, null=True)
|
|
25
|
+
name_en = models.CharField(max_length=255, null=True)
|
|
26
|
+
description = models.TextField(blank=True, null=True)
|
|
27
|
+
|
|
28
|
+
distribution_type = models.CharField(max_length=255, choices=DISTRIBUTION_TYPES)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def natural_key(self):
|
|
32
|
+
return (self.name,)
|
|
33
|
+
|
|
34
|
+
def __str__(self):
|
|
35
|
+
return self.name
|
|
36
|
+
|
|
37
|
+
class CaseTemplateRuleValueManager(models.Manager):
|
|
38
|
+
def get_by_natural_key(self, name):
|
|
39
|
+
return self.get(name=name)
|
|
40
|
+
|
|
41
|
+
class CaseTemplateRuleValue(models.Model):
|
|
42
|
+
"""
|
|
43
|
+
A class representing a case template rule value.
|
|
44
|
+
|
|
45
|
+
Attributes:
|
|
46
|
+
value (str): The value of the case template rule value.
|
|
47
|
+
case_template_rule (CaseTemplateRule): The case template rule of the case template rule value.
|
|
48
|
+
case_template (CaseTemplate): The case template of the case template rule value.
|
|
49
|
+
"""
|
|
50
|
+
objects = CaseTemplateRuleValueManager()
|
|
51
|
+
|
|
52
|
+
name = models.CharField(max_length=255)
|
|
53
|
+
description = models.TextField(blank=True, null=True)
|
|
54
|
+
|
|
55
|
+
fk_value = models.CharField(max_length=255, null=True, blank=True)
|
|
56
|
+
numeric_value = models.FloatField(null=True, blank=True)
|
|
57
|
+
text_value = models.CharField(max_length=255, null=True, blank=True)
|
|
58
|
+
|
|
59
|
+
def natural_key(self):
|
|
60
|
+
return (self.name,)
|
|
61
|
+
|
|
62
|
+
def __str__(self):
|
|
63
|
+
return self.name
|
|
64
|
+
|
|
65
|
+
def get_value(self):
|
|
66
|
+
if self.fk_value:
|
|
67
|
+
return self.fk_value
|
|
68
|
+
elif self.numeric_value:
|
|
69
|
+
return self.numeric_value
|
|
70
|
+
elif self.text_value:
|
|
71
|
+
return self.text_value
|
|
72
|
+
else:
|
|
73
|
+
return None
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
from django.db import models
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
class CaseTemplateTypeManager(models.Manager):
|
|
5
|
-
def get_by_natural_key(self, name):
|
|
6
|
-
return self.get(name=name)
|
|
7
|
-
|
|
8
|
-
class CaseTemplateType(models.Model):
|
|
9
|
-
"""
|
|
10
|
-
A class representing a case template type.
|
|
11
|
-
|
|
12
|
-
Attributes:
|
|
13
|
-
name (str): The name of the case template type.
|
|
14
|
-
description (str): A description of the case template type.
|
|
15
|
-
|
|
16
|
-
"""
|
|
17
|
-
name = models.CharField(max_length=255)
|
|
18
|
-
name_de = models.CharField(max_length=255, null=True)
|
|
19
|
-
name_en = models.CharField(max_length=255, null=True)
|
|
20
|
-
description = models.TextField(blank=True, null=True)
|
|
21
|
-
|
|
22
|
-
objects = CaseTemplateTypeManager()
|
|
23
|
-
|
|
24
|
-
def natural_key(self):
|
|
25
|
-
return (self.name,)
|
|
26
|
-
|
|
27
|
-
def __str__(self):
|
|
1
|
+
from django.db import models
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class CaseTemplateTypeManager(models.Manager):
|
|
5
|
+
def get_by_natural_key(self, name):
|
|
6
|
+
return self.get(name=name)
|
|
7
|
+
|
|
8
|
+
class CaseTemplateType(models.Model):
|
|
9
|
+
"""
|
|
10
|
+
A class representing a case template type.
|
|
11
|
+
|
|
12
|
+
Attributes:
|
|
13
|
+
name (str): The name of the case template type.
|
|
14
|
+
description (str): A description of the case template type.
|
|
15
|
+
|
|
16
|
+
"""
|
|
17
|
+
name = models.CharField(max_length=255)
|
|
18
|
+
name_de = models.CharField(max_length=255, null=True)
|
|
19
|
+
name_en = models.CharField(max_length=255, null=True)
|
|
20
|
+
description = models.TextField(blank=True, null=True)
|
|
21
|
+
|
|
22
|
+
objects = CaseTemplateTypeManager()
|
|
23
|
+
|
|
24
|
+
def natural_key(self):
|
|
25
|
+
return (self.name,)
|
|
26
|
+
|
|
27
|
+
def __str__(self):
|
|
28
28
|
return self.name
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from .center import Center
|
|
2
|
-
from .center_product import CenterProduct
|
|
3
|
-
from .center_resource import CenterResource
|
|
4
|
-
from .center_waste import CenterWaste
|
|
1
|
+
from .center import Center
|
|
2
|
+
from .center_product import CenterProduct
|
|
3
|
+
from .center_resource import CenterResource
|
|
4
|
+
from .center_waste import CenterWaste
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
from django.db import models
|
|
2
|
-
|
|
3
|
-
class CenterManager(models.Manager):
|
|
4
|
-
def get_by_natural_key(self, name):
|
|
5
|
-
return self.get(name=name)
|
|
6
|
-
|
|
7
|
-
class Center(models.Model):
|
|
8
|
-
objects = CenterManager()
|
|
9
|
-
|
|
10
|
-
# import_id = models.IntegerField(primary_key=True)
|
|
11
|
-
name = models.CharField(max_length=255)
|
|
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
|
-
|
|
15
|
-
first_names = models.ManyToManyField(
|
|
16
|
-
'FirstName',
|
|
17
|
-
related_name='centers',
|
|
18
|
-
)
|
|
19
|
-
last_names = models.ManyToManyField('LastName', related_name='centers')
|
|
20
|
-
|
|
21
|
-
def natural_key(self):
|
|
22
|
-
return (self.name,)
|
|
23
|
-
|
|
24
|
-
def __str__(self):
|
|
1
|
+
from django.db import models
|
|
2
|
+
|
|
3
|
+
class CenterManager(models.Manager):
|
|
4
|
+
def get_by_natural_key(self, name):
|
|
5
|
+
return self.get(name=name)
|
|
6
|
+
|
|
7
|
+
class Center(models.Model):
|
|
8
|
+
objects = CenterManager()
|
|
9
|
+
|
|
10
|
+
# import_id = models.IntegerField(primary_key=True)
|
|
11
|
+
name = models.CharField(max_length=255)
|
|
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
|
+
|
|
15
|
+
first_names = models.ManyToManyField(
|
|
16
|
+
'FirstName',
|
|
17
|
+
related_name='centers',
|
|
18
|
+
)
|
|
19
|
+
last_names = models.ManyToManyField('LastName', related_name='centers')
|
|
20
|
+
|
|
21
|
+
def natural_key(self):
|
|
22
|
+
return (self.name,)
|
|
23
|
+
|
|
24
|
+
def __str__(self):
|
|
25
25
|
return self.name
|
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
from itertools import product
|
|
2
|
-
from django.db import models
|
|
3
|
-
|
|
4
|
-
class CenterProduct(models.Model):
|
|
5
|
-
product = models.ForeignKey("Product", on_delete=models.CASCADE)
|
|
6
|
-
date_used = models.DateField()
|
|
7
|
-
center = models.ForeignKey("Center", on_delete=models.CASCADE)
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
def get_product_group(self):
|
|
11
|
-
product = self.product
|
|
12
|
-
product_group = product.product_group
|
|
13
|
-
|
|
14
|
-
return product_group
|
|
15
|
-
|
|
16
|
-
def get_reference_product(self):
|
|
17
|
-
product_group = self.get_product_group()
|
|
18
|
-
reference_product = product_group.reference_product
|
|
19
|
-
|
|
20
|
-
return reference_product
|
|
21
|
-
|
|
22
|
-
def get_product_weight(self):
|
|
23
|
-
product = self.product
|
|
24
|
-
weight, unit = product.get_product_weight()
|
|
25
|
-
|
|
26
|
-
return weight, unit
|
|
27
|
-
|
|
28
|
-
def get_package_weight(self):
|
|
29
|
-
product = self.product
|
|
30
|
-
weight, unit = product.get_package_weight()
|
|
31
|
-
|
|
32
|
-
return weight, unit
|
|
33
|
-
|
|
1
|
+
from itertools import product
|
|
2
|
+
from django.db import models
|
|
3
|
+
|
|
4
|
+
class CenterProduct(models.Model):
|
|
5
|
+
product = models.ForeignKey("Product", on_delete=models.CASCADE)
|
|
6
|
+
date_used = models.DateField()
|
|
7
|
+
center = models.ForeignKey("Center", on_delete=models.CASCADE)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def get_product_group(self):
|
|
11
|
+
product = self.product
|
|
12
|
+
product_group = product.product_group
|
|
13
|
+
|
|
14
|
+
return product_group
|
|
15
|
+
|
|
16
|
+
def get_reference_product(self):
|
|
17
|
+
product_group = self.get_product_group()
|
|
18
|
+
reference_product = product_group.reference_product
|
|
19
|
+
|
|
20
|
+
return reference_product
|
|
21
|
+
|
|
22
|
+
def get_product_weight(self):
|
|
23
|
+
product = self.product
|
|
24
|
+
weight, unit = product.get_product_weight()
|
|
25
|
+
|
|
26
|
+
return weight, unit
|
|
27
|
+
|
|
28
|
+
def get_package_weight(self):
|
|
29
|
+
product = self.product
|
|
30
|
+
weight, unit = product.get_package_weight()
|
|
31
|
+
|
|
32
|
+
return weight, unit
|
|
33
|
+
|
|
34
34
|
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
from os import name
|
|
2
|
-
from django.db import models
|
|
3
|
-
|
|
4
|
-
class CenterResource(models.Model):
|
|
5
|
-
name = models.CharField(max_length=255, null=True)
|
|
6
|
-
center = models.ForeignKey("Center", on_delete=models.CASCADE)
|
|
7
|
-
name_de = models.CharField(max_length=255, null=True)
|
|
8
|
-
name_en = models.CharField(max_length=255, null=True)
|
|
9
|
-
quantity = models.FloatField()
|
|
10
|
-
resource = models.ForeignKey("Resource", on_delete=models.CASCADE)
|
|
11
|
-
transport_emission_factor = models.ForeignKey("EmissionFactor", on_delete=models.SET_NULL, null=True,
|
|
12
|
-
related_name="center_resource_transport_emission_factor")
|
|
13
|
-
use_emission_factor = models.ForeignKey("EmissionFactor", on_delete=models.SET_NULL, null=True,
|
|
14
|
-
related_name="center_resource_use_emission_factor")
|
|
15
|
-
year = models.IntegerField()
|
|
16
|
-
unit = models.ForeignKey("Unit", on_delete=models.SET_NULL, null=True)
|
|
17
|
-
|
|
18
|
-
def __str__(self):
|
|
1
|
+
from os import name
|
|
2
|
+
from django.db import models
|
|
3
|
+
|
|
4
|
+
class CenterResource(models.Model):
|
|
5
|
+
name = models.CharField(max_length=255, null=True)
|
|
6
|
+
center = models.ForeignKey("Center", on_delete=models.CASCADE)
|
|
7
|
+
name_de = models.CharField(max_length=255, null=True)
|
|
8
|
+
name_en = models.CharField(max_length=255, null=True)
|
|
9
|
+
quantity = models.FloatField()
|
|
10
|
+
resource = models.ForeignKey("Resource", on_delete=models.CASCADE)
|
|
11
|
+
transport_emission_factor = models.ForeignKey("EmissionFactor", on_delete=models.SET_NULL, null=True,
|
|
12
|
+
related_name="center_resource_transport_emission_factor")
|
|
13
|
+
use_emission_factor = models.ForeignKey("EmissionFactor", on_delete=models.SET_NULL, null=True,
|
|
14
|
+
related_name="center_resource_use_emission_factor")
|
|
15
|
+
year = models.IntegerField()
|
|
16
|
+
unit = models.ForeignKey("Unit", on_delete=models.SET_NULL, null=True)
|
|
17
|
+
|
|
18
|
+
def __str__(self):
|
|
19
19
|
return self.center.name + " - " + self.resource.name + " (" + str(self.year) + ")"
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
from django.db import models
|
|
2
|
-
|
|
3
|
-
class CenterWaste(models.Model):
|
|
4
|
-
center = models.ForeignKey("Center", on_delete=models.CASCADE)
|
|
5
|
-
year = models.IntegerField()
|
|
6
|
-
waste = models.ForeignKey("Waste", on_delete=models.CASCADE)
|
|
7
|
-
quantity = models.FloatField()
|
|
8
|
-
unit = models.ForeignKey("Unit", on_delete=models.SET_NULL, null=True)
|
|
9
|
-
emission_factor = models.ForeignKey("EmissionFactor", on_delete=models.SET_NULL, null=True)
|
|
10
|
-
|
|
1
|
+
from django.db import models
|
|
2
|
+
|
|
3
|
+
class CenterWaste(models.Model):
|
|
4
|
+
center = models.ForeignKey("Center", on_delete=models.CASCADE)
|
|
5
|
+
year = models.IntegerField()
|
|
6
|
+
waste = models.ForeignKey("Waste", on_delete=models.CASCADE)
|
|
7
|
+
quantity = models.FloatField()
|
|
8
|
+
unit = models.ForeignKey("Unit", on_delete=models.SET_NULL, null=True)
|
|
9
|
+
emission_factor = models.ForeignKey("EmissionFactor", on_delete=models.SET_NULL, null=True)
|
|
10
|
+
|
|
11
11
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
from .frame import Frame, LegacyFrame
|
|
2
|
-
from .report_file import ReportFile
|
|
3
|
-
from .video import Video, LegacyVideo, VideoImportMeta
|
|
4
|
-
from .video_segment import LegacyLabelVideoSegment, LabelVideoSegment
|
|
5
|
-
from .metadata import *
|
|
1
|
+
from .frame import Frame, LegacyFrame
|
|
2
|
+
from .report_file import ReportFile
|
|
3
|
+
from .video import Video, LegacyVideo, VideoImportMeta
|
|
4
|
+
from .video_segment import LegacyLabelVideoSegment, LabelVideoSegment
|
|
5
|
+
from .metadata import *
|
|
6
6
|
from .import_classes import *
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
from .abstract_frame import AbstractFrame
|
|
2
|
-
from .abstract_video import AbstractVideo
|
|
1
|
+
from .abstract_frame import AbstractFrame
|
|
2
|
+
from .abstract_video import AbstractVideo
|
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
from endoreg_db.models.annotation.image_classification import ImageClassificationAnnotation
|
|
2
|
-
from endoreg_db.models.label.label import Label
|
|
3
|
-
|
|
4
|
-
from django.db import models
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
class AbstractFrame(models.Model):
|
|
8
|
-
video = None # Placeholder for the video field, to be defined in derived classes
|
|
9
|
-
frame_number = models.IntegerField()
|
|
10
|
-
# Add any other fields you need to store frame-related information
|
|
11
|
-
image = models.ImageField(upload_to="frames") # Or some other field type, depending on how you're storing the frame
|
|
12
|
-
suffix = models.CharField(max_length=255)
|
|
13
|
-
# ImageClassificationAnnotation has a foreign key to this model (related name: image_classification_annotations)
|
|
14
|
-
|
|
15
|
-
class Meta:
|
|
16
|
-
# Ensure that for each video, the frame_number is unique
|
|
17
|
-
abstract = True
|
|
18
|
-
unique_together = ('video', 'frame_number')
|
|
19
|
-
# Optimize for retrieval in frame_number order
|
|
20
|
-
indexes = [models.Index(fields=['video', 'frame_number'])]
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
def __str__(self):
|
|
24
|
-
return self.video.file.path + " - " + str(self.frame_number)
|
|
25
|
-
|
|
26
|
-
def get_frame_model(self):
|
|
27
|
-
assert 1 == 2, "This method should be overridden in derived classes"
|
|
28
|
-
|
|
29
|
-
def get_classification_annotations(self):
|
|
30
|
-
"""
|
|
31
|
-
Get all image classification annotations for this frame.
|
|
32
|
-
"""
|
|
33
|
-
return ImageClassificationAnnotation.objects.filter(frame=self)
|
|
34
|
-
|
|
35
|
-
def get_classification_annotations_by_label(self, label:Label):
|
|
36
|
-
"""
|
|
37
|
-
Get all image classification annotations for this frame with the given label.
|
|
38
|
-
"""
|
|
39
|
-
return ImageClassificationAnnotation.objects.filter(frame=self, label=label)
|
|
40
|
-
|
|
41
|
-
def get_classification_annotations_by_value(self, value:bool):
|
|
42
|
-
"""
|
|
43
|
-
Get all image classification annotations for this frame with the given value.
|
|
44
|
-
"""
|
|
45
|
-
return ImageClassificationAnnotation.objects.filter(frame=self, value=value)
|
|
46
|
-
|
|
47
|
-
def get_classification_annotations_by_label_and_value(self, label:Label, value:bool):
|
|
48
|
-
"""
|
|
49
|
-
Get all image classification annotations for this frame with the given label and value.
|
|
50
|
-
"""
|
|
1
|
+
from endoreg_db.models.annotation.image_classification import ImageClassificationAnnotation
|
|
2
|
+
from endoreg_db.models.label.label import Label
|
|
3
|
+
|
|
4
|
+
from django.db import models
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class AbstractFrame(models.Model):
|
|
8
|
+
video = None # Placeholder for the video field, to be defined in derived classes
|
|
9
|
+
frame_number = models.IntegerField()
|
|
10
|
+
# Add any other fields you need to store frame-related information
|
|
11
|
+
image = models.ImageField(upload_to="frames") # Or some other field type, depending on how you're storing the frame
|
|
12
|
+
suffix = models.CharField(max_length=255)
|
|
13
|
+
# ImageClassificationAnnotation has a foreign key to this model (related name: image_classification_annotations)
|
|
14
|
+
|
|
15
|
+
class Meta:
|
|
16
|
+
# Ensure that for each video, the frame_number is unique
|
|
17
|
+
abstract = True
|
|
18
|
+
unique_together = ('video', 'frame_number')
|
|
19
|
+
# Optimize for retrieval in frame_number order
|
|
20
|
+
indexes = [models.Index(fields=['video', 'frame_number'])]
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def __str__(self):
|
|
24
|
+
return self.video.file.path + " - " + str(self.frame_number)
|
|
25
|
+
|
|
26
|
+
def get_frame_model(self):
|
|
27
|
+
assert 1 == 2, "This method should be overridden in derived classes"
|
|
28
|
+
|
|
29
|
+
def get_classification_annotations(self):
|
|
30
|
+
"""
|
|
31
|
+
Get all image classification annotations for this frame.
|
|
32
|
+
"""
|
|
33
|
+
return ImageClassificationAnnotation.objects.filter(frame=self)
|
|
34
|
+
|
|
35
|
+
def get_classification_annotations_by_label(self, label:Label):
|
|
36
|
+
"""
|
|
37
|
+
Get all image classification annotations for this frame with the given label.
|
|
38
|
+
"""
|
|
39
|
+
return ImageClassificationAnnotation.objects.filter(frame=self, label=label)
|
|
40
|
+
|
|
41
|
+
def get_classification_annotations_by_value(self, value:bool):
|
|
42
|
+
"""
|
|
43
|
+
Get all image classification annotations for this frame with the given value.
|
|
44
|
+
"""
|
|
45
|
+
return ImageClassificationAnnotation.objects.filter(frame=self, value=value)
|
|
46
|
+
|
|
47
|
+
def get_classification_annotations_by_label_and_value(self, label:Label, value:bool):
|
|
48
|
+
"""
|
|
49
|
+
Get all image classification annotations for this frame with the given label and value.
|
|
50
|
+
"""
|
|
51
51
|
return ImageClassificationAnnotation.objects.filter(frame=self, label=label, value=value)
|