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
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
from ..raw_pdf import RawPdfFile
|
|
2
|
-
from logging import getLogger
|
|
3
|
-
#
|
|
4
|
-
# # setup logging to pdf_import.log
|
|
5
|
-
logger = getLogger('examination_pdf_import')
|
|
6
|
-
|
|
7
|
-
def get_pdf_files_scheduled_for_processing():
|
|
8
|
-
reports = RawPdfFile.objects.filter(
|
|
9
|
-
state_report_processing_required=True
|
|
10
|
-
)
|
|
11
|
-
return reports
|
|
12
|
-
|
|
13
|
-
def process_pdf_file(report:RawPdfFile):
|
|
14
|
-
if report.update(save=True, verbose=True):
|
|
15
|
-
logger.info(f"Report {report} processed successfully")
|
|
16
|
-
return True
|
|
17
|
-
else:
|
|
18
|
-
logger.error(f"Report {report} processing failed")
|
|
19
|
-
return False
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
def process_pdf_files():
|
|
23
|
-
reports = get_pdf_files_scheduled_for_processing()
|
|
24
|
-
for report in reports:
|
|
25
|
-
process_pdf_file(report)
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
1
|
+
from ..raw_pdf import RawPdfFile
|
|
2
|
+
from logging import getLogger
|
|
3
|
+
#
|
|
4
|
+
# # setup logging to pdf_import.log
|
|
5
|
+
logger = getLogger('examination_pdf_import')
|
|
6
|
+
|
|
7
|
+
def get_pdf_files_scheduled_for_processing():
|
|
8
|
+
reports = RawPdfFile.objects.filter(
|
|
9
|
+
state_report_processing_required=True
|
|
10
|
+
)
|
|
11
|
+
return reports
|
|
12
|
+
|
|
13
|
+
def process_pdf_file(report:RawPdfFile):
|
|
14
|
+
if report.update(save=True, verbose=True):
|
|
15
|
+
logger.info(f"Report {report} processed successfully")
|
|
16
|
+
return True
|
|
17
|
+
else:
|
|
18
|
+
logger.error(f"Report {report} processing failed")
|
|
19
|
+
return False
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def process_pdf_files():
|
|
23
|
+
reports = get_pdf_files_scheduled_for_processing()
|
|
24
|
+
for report in reports:
|
|
25
|
+
process_pdf_file(report)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
@@ -1,260 +1,260 @@
|
|
|
1
|
-
from ..raw_video import RawVideoFile
|
|
2
|
-
import json
|
|
3
|
-
|
|
4
|
-
# # Starting point
|
|
5
|
-
# Automated tasks generate RawVideoFile objects in our db.
|
|
6
|
-
# Each object has state_{NAME} attributes.
|
|
7
|
-
# We will create functions which query the db for RawVideoFile
|
|
8
|
-
# objects with specific state_{NAME} attributes.
|
|
9
|
-
# Then, we perform the necessary operations on the RawVideoFile and
|
|
10
|
-
# update the state_{NAME} attributes accordingly.
|
|
11
|
-
|
|
12
|
-
# # Step 1 - Frame Extraction
|
|
13
|
-
# function to query for videos scheduled for frame extraction,
|
|
14
|
-
# these have state_frames_required and state_frames_extracted
|
|
15
|
-
def get_videos_scheduled_for_frame_extraction():
|
|
16
|
-
return RawVideoFile.objects.filter(
|
|
17
|
-
state_frames_required=True,
|
|
18
|
-
state_frames_extracted=False
|
|
19
|
-
)
|
|
20
|
-
|
|
21
|
-
def extract_frames_from_video(video:RawVideoFile):
|
|
22
|
-
# extract frames from video
|
|
23
|
-
video.extract_frames()
|
|
24
|
-
|
|
25
|
-
# update state_frames_extracted
|
|
26
|
-
video.state_frames_extracted = True
|
|
27
|
-
video.save()
|
|
28
|
-
|
|
29
|
-
return video
|
|
30
|
-
|
|
31
|
-
def extract_frames_from_videos():
|
|
32
|
-
videos = get_videos_scheduled_for_frame_extraction()
|
|
33
|
-
for video in videos:
|
|
34
|
-
extract_frames_from_video(video)
|
|
35
|
-
|
|
36
|
-
# # Step 2 - OCR
|
|
37
|
-
# function to query for videos scheduled for OCR,
|
|
38
|
-
# these have
|
|
39
|
-
# state_ocr_required = True and state_ocr_completed = False and state_frames_extracted = True
|
|
40
|
-
def get_videos_scheduled_for_ocr():
|
|
41
|
-
return RawVideoFile.objects.filter(
|
|
42
|
-
state_ocr_required=True,
|
|
43
|
-
state_ocr_completed=False,
|
|
44
|
-
state_frames_extracted=True
|
|
45
|
-
)
|
|
46
|
-
|
|
47
|
-
# function to set state_frames_required to True for videos
|
|
48
|
-
# which are scheduled for OCR but have not had frames extracted
|
|
49
|
-
def videos_scheduled_for_ocr_preflight():
|
|
50
|
-
videos = RawVideoFile.objects.filter(
|
|
51
|
-
state_ocr_required=True,
|
|
52
|
-
state_ocr_completed=False,
|
|
53
|
-
state_frames_extracted=False
|
|
54
|
-
)
|
|
55
|
-
for video in videos:
|
|
56
|
-
video.state_frames_required = True
|
|
57
|
-
video.save()
|
|
58
|
-
|
|
59
|
-
def perform_ocr_on_video(video:RawVideoFile):
|
|
60
|
-
# perform OCR on video
|
|
61
|
-
video.update_text_metadata()
|
|
62
|
-
|
|
63
|
-
# update state_ocr_completed
|
|
64
|
-
video.state_ocr_completed = True
|
|
65
|
-
video.save()
|
|
66
|
-
|
|
67
|
-
return video
|
|
68
|
-
|
|
69
|
-
def perform_ocr_on_videos():
|
|
70
|
-
videos = get_videos_scheduled_for_ocr()
|
|
71
|
-
for video in videos:
|
|
72
|
-
perform_ocr_on_video(video)
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
# # Step 3 - initial Prediction
|
|
76
|
-
# function to query for videos scheduled for initial prediction,
|
|
77
|
-
# these have
|
|
78
|
-
# state_initial_prediction_required = True and state_initial_prediction_completed = False and state_frames_extracted = True
|
|
79
|
-
def videos_scheduled_for_initial_prediction_preflight():
|
|
80
|
-
videos = RawVideoFile.objects.filter(
|
|
81
|
-
state_initial_prediction_required=True,
|
|
82
|
-
state_initial_prediction_completed=False,
|
|
83
|
-
state_frames_extracted=False
|
|
84
|
-
)
|
|
85
|
-
for video in videos:
|
|
86
|
-
video.state_frames_required = True
|
|
87
|
-
video.save()
|
|
88
|
-
|
|
89
|
-
def get_videos_scheduled_for_initial_prediction():
|
|
90
|
-
return RawVideoFile.objects.filter(
|
|
91
|
-
state_initial_prediction_required=True,
|
|
92
|
-
state_initial_prediction_completed=False,
|
|
93
|
-
state_frames_extracted=True
|
|
94
|
-
)
|
|
95
|
-
|
|
96
|
-
from pathlib import Path
|
|
97
|
-
def get_multilabel_model(model_path:Path):
|
|
98
|
-
from agl_predict_endo_frame.model_loader import MultiLabelClassificationNet
|
|
99
|
-
model_path_str = model_path.resolve().as_posix()
|
|
100
|
-
model = MultiLabelClassificationNet.load_from_checkpoint(model_path_str)
|
|
101
|
-
model.cuda()
|
|
102
|
-
model.eval()
|
|
103
|
-
return model
|
|
104
|
-
|
|
105
|
-
def get_multilabel_classifier(model, verbose:bool=False):
|
|
106
|
-
from agl_predict_endo_frame.predict import Classifier
|
|
107
|
-
classifier = Classifier(model, verbose = verbose)
|
|
108
|
-
return classifier
|
|
109
|
-
|
|
110
|
-
def get_crops(video, paths):
|
|
111
|
-
endo_roi_dict = video.get_endo_roi()
|
|
112
|
-
# dict with x, y, width height
|
|
113
|
-
# crops is list of touples with (y_min, y_max, x_min, x_max)
|
|
114
|
-
crop_tuple = (
|
|
115
|
-
endo_roi_dict["y"],
|
|
116
|
-
endo_roi_dict["y"] + endo_roi_dict["height"],
|
|
117
|
-
endo_roi_dict["x"],
|
|
118
|
-
endo_roi_dict["x"] + endo_roi_dict["width"],
|
|
119
|
-
)
|
|
120
|
-
crops = [crop_tuple for _ in paths]
|
|
121
|
-
return crops
|
|
122
|
-
|
|
123
|
-
# model = MultiLabelClassificationNet.load_from_checkpoint("model/colo_segmentation_RegNetX800MF_6.ckpt")
|
|
124
|
-
def perform_initial_prediction_on_video(
|
|
125
|
-
video:RawVideoFile, model_path,
|
|
126
|
-
window_size_s, min_seq_len_s
|
|
127
|
-
):
|
|
128
|
-
|
|
129
|
-
model = get_multilabel_model(model_path)
|
|
130
|
-
classifier = get_multilabel_classifier(model, verbose = True)
|
|
131
|
-
|
|
132
|
-
paths = video.get_frame_paths()
|
|
133
|
-
string_paths = [p.resolve().as_posix() for p in paths]
|
|
134
|
-
crops = get_crops(video, string_paths)
|
|
135
|
-
fps = video.get_fps()
|
|
136
|
-
|
|
137
|
-
predictions = classifier.pipe(string_paths, crops)
|
|
138
|
-
readable_predictions = [classifier.readable(p) for p in predictions]
|
|
139
|
-
result_dict = classifier.post_process_predictions_serializable(
|
|
140
|
-
readable_predictions,
|
|
141
|
-
window_size_s = window_size_s,
|
|
142
|
-
min_seq_len_s = min_seq_len_s,
|
|
143
|
-
fps = fps
|
|
144
|
-
)
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
# Predictions
|
|
148
|
-
_path = video.get_predictions_path()
|
|
149
|
-
with open(_path, "w") as f:
|
|
150
|
-
json.dump(result_dict["predictions"], f, indent = 4)
|
|
151
|
-
|
|
152
|
-
# smooth_predictions
|
|
153
|
-
_path = video.get_smooth_predictions_path()
|
|
154
|
-
with open(_path, "w") as f:
|
|
155
|
-
json.dump(result_dict["smooth_predictions"], f, indent = 4)
|
|
156
|
-
|
|
157
|
-
# binary_predictions
|
|
158
|
-
_path = video.get_binary_predictions_path()
|
|
159
|
-
with open(_path, "w") as f:
|
|
160
|
-
json.dump(result_dict["binary_predictions"], f, indent = 4)
|
|
161
|
-
|
|
162
|
-
# Raw Sequences
|
|
163
|
-
_path = video.get_raw_sequences_path()
|
|
164
|
-
with open(_path, "w") as f:
|
|
165
|
-
json.dump(result_dict["raw_sequences"], f, indent = 4)
|
|
166
|
-
|
|
167
|
-
# filtered_sequences
|
|
168
|
-
_path = video.get_filtered_sequences_path()
|
|
169
|
-
with open(_path, "w") as f:
|
|
170
|
-
json.dump(result_dict["filtered_sequences"], f, indent = 4)
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
# update state_initial_prediction_completed
|
|
174
|
-
video.state_initial_prediction_required = False
|
|
175
|
-
video.state_initial_prediction_completed = True
|
|
176
|
-
video.state_initial_prediction_import_required = True
|
|
177
|
-
video.state_initial_prediction_import_completed = False
|
|
178
|
-
video.save()
|
|
179
|
-
|
|
180
|
-
return video
|
|
181
|
-
|
|
182
|
-
def perform_initial_prediction_on_videos(
|
|
183
|
-
model_path,
|
|
184
|
-
window_size_s, min_seq_len_s
|
|
185
|
-
):
|
|
186
|
-
videos = get_videos_scheduled_for_initial_prediction()
|
|
187
|
-
for video in videos:
|
|
188
|
-
perform_initial_prediction_on_video(
|
|
189
|
-
video,
|
|
190
|
-
model_path, window_size_s, min_seq_len_s
|
|
191
|
-
)
|
|
192
|
-
|
|
193
|
-
def videos_scheduled_for_prediction_import_preflight():
|
|
194
|
-
videos = RawVideoFile.objects.filter(
|
|
195
|
-
state_initial_prediction_completed=True,
|
|
196
|
-
state_initial_prediction_import_completed=False
|
|
197
|
-
)
|
|
198
|
-
for video in videos:
|
|
199
|
-
video.state_initial_prediction_required = True
|
|
200
|
-
video.save()
|
|
201
|
-
|
|
202
|
-
def get_videos_scheduled_for_prediction_import():
|
|
203
|
-
return RawVideoFile.objects.filter(
|
|
204
|
-
state_initial_prediction_import_required=True,
|
|
205
|
-
state_initial_prediction_import_completed=False,
|
|
206
|
-
state_initial_prediction_completed=True
|
|
207
|
-
)
|
|
208
|
-
|
|
209
|
-
def import_predictions_for_video(video:RawVideoFile):
|
|
210
|
-
# import predictions for video
|
|
211
|
-
pass
|
|
212
|
-
|
|
213
|
-
# update state_prediction_import_completed
|
|
214
|
-
# video.state_initial_prediction_import_required = False
|
|
215
|
-
# video.state_initial_prediction_import_completed = True
|
|
216
|
-
# video.save()
|
|
217
|
-
|
|
218
|
-
return video
|
|
219
|
-
|
|
220
|
-
def import_predictions_for_videos():
|
|
221
|
-
videos = get_videos_scheduled_for_prediction_import()
|
|
222
|
-
for video in videos:
|
|
223
|
-
import_predictions_for_video(video)
|
|
224
|
-
|
|
225
|
-
# # Step 4 - Delete Frames if not needed anymore
|
|
226
|
-
# function to query for videos scheduled for frame deletion,
|
|
227
|
-
# first we need to set state_frames_required = False for videos with:
|
|
228
|
-
# state_ocr_required = False and state_ocr_completed = True and
|
|
229
|
-
# state_initial_prediction_required = False and state_initial_prediction_completed = True
|
|
230
|
-
def delete_frames_preflight():
|
|
231
|
-
videos = RawVideoFile.objects.filter(
|
|
232
|
-
state_ocr_required=False,
|
|
233
|
-
state_ocr_completed=True,
|
|
234
|
-
state_initial_prediction_required=False,
|
|
235
|
-
state_initial_prediction_completed=True
|
|
236
|
-
)
|
|
237
|
-
for video in videos:
|
|
238
|
-
video.state_frames_required = False
|
|
239
|
-
video.save()
|
|
240
|
-
|
|
241
|
-
# function to query for videos scheduled for frame deletion,
|
|
242
|
-
# frames should be deleted if state_frames_required = False
|
|
243
|
-
def get_videos_scheduled_for_frame_deletion():
|
|
244
|
-
return RawVideoFile.objects.filter(
|
|
245
|
-
state_frames_required=False
|
|
246
|
-
)
|
|
247
|
-
|
|
248
|
-
def delete_frames_for_video(video:RawVideoFile):
|
|
249
|
-
# delete frames for video
|
|
250
|
-
|
|
251
|
-
# update state_frames_deleted
|
|
252
|
-
video.state_frames_extracted = False
|
|
253
|
-
video.save()
|
|
254
|
-
|
|
255
|
-
return video
|
|
256
|
-
|
|
257
|
-
def delete_frames():
|
|
258
|
-
videos = get_videos_scheduled_for_frame_deletion()
|
|
259
|
-
for video in videos:
|
|
260
|
-
delete_frames_for_video(video)
|
|
1
|
+
from ..raw_video import RawVideoFile
|
|
2
|
+
import json
|
|
3
|
+
|
|
4
|
+
# # Starting point
|
|
5
|
+
# Automated tasks generate RawVideoFile objects in our db.
|
|
6
|
+
# Each object has state_{NAME} attributes.
|
|
7
|
+
# We will create functions which query the db for RawVideoFile
|
|
8
|
+
# objects with specific state_{NAME} attributes.
|
|
9
|
+
# Then, we perform the necessary operations on the RawVideoFile and
|
|
10
|
+
# update the state_{NAME} attributes accordingly.
|
|
11
|
+
|
|
12
|
+
# # Step 1 - Frame Extraction
|
|
13
|
+
# function to query for videos scheduled for frame extraction,
|
|
14
|
+
# these have state_frames_required and state_frames_extracted
|
|
15
|
+
def get_videos_scheduled_for_frame_extraction():
|
|
16
|
+
return RawVideoFile.objects.filter(
|
|
17
|
+
state_frames_required=True,
|
|
18
|
+
state_frames_extracted=False
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
def extract_frames_from_video(video:RawVideoFile):
|
|
22
|
+
# extract frames from video
|
|
23
|
+
video.extract_frames()
|
|
24
|
+
|
|
25
|
+
# update state_frames_extracted
|
|
26
|
+
video.state_frames_extracted = True
|
|
27
|
+
video.save()
|
|
28
|
+
|
|
29
|
+
return video
|
|
30
|
+
|
|
31
|
+
def extract_frames_from_videos():
|
|
32
|
+
videos = get_videos_scheduled_for_frame_extraction()
|
|
33
|
+
for video in videos:
|
|
34
|
+
extract_frames_from_video(video)
|
|
35
|
+
|
|
36
|
+
# # Step 2 - OCR
|
|
37
|
+
# function to query for videos scheduled for OCR,
|
|
38
|
+
# these have
|
|
39
|
+
# state_ocr_required = True and state_ocr_completed = False and state_frames_extracted = True
|
|
40
|
+
def get_videos_scheduled_for_ocr():
|
|
41
|
+
return RawVideoFile.objects.filter(
|
|
42
|
+
state_ocr_required=True,
|
|
43
|
+
state_ocr_completed=False,
|
|
44
|
+
state_frames_extracted=True
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
# function to set state_frames_required to True for videos
|
|
48
|
+
# which are scheduled for OCR but have not had frames extracted
|
|
49
|
+
def videos_scheduled_for_ocr_preflight():
|
|
50
|
+
videos = RawVideoFile.objects.filter(
|
|
51
|
+
state_ocr_required=True,
|
|
52
|
+
state_ocr_completed=False,
|
|
53
|
+
state_frames_extracted=False
|
|
54
|
+
)
|
|
55
|
+
for video in videos:
|
|
56
|
+
video.state_frames_required = True
|
|
57
|
+
video.save()
|
|
58
|
+
|
|
59
|
+
def perform_ocr_on_video(video:RawVideoFile):
|
|
60
|
+
# perform OCR on video
|
|
61
|
+
video.update_text_metadata()
|
|
62
|
+
|
|
63
|
+
# update state_ocr_completed
|
|
64
|
+
video.state_ocr_completed = True
|
|
65
|
+
video.save()
|
|
66
|
+
|
|
67
|
+
return video
|
|
68
|
+
|
|
69
|
+
def perform_ocr_on_videos():
|
|
70
|
+
videos = get_videos_scheduled_for_ocr()
|
|
71
|
+
for video in videos:
|
|
72
|
+
perform_ocr_on_video(video)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
# # Step 3 - initial Prediction
|
|
76
|
+
# function to query for videos scheduled for initial prediction,
|
|
77
|
+
# these have
|
|
78
|
+
# state_initial_prediction_required = True and state_initial_prediction_completed = False and state_frames_extracted = True
|
|
79
|
+
def videos_scheduled_for_initial_prediction_preflight():
|
|
80
|
+
videos = RawVideoFile.objects.filter(
|
|
81
|
+
state_initial_prediction_required=True,
|
|
82
|
+
state_initial_prediction_completed=False,
|
|
83
|
+
state_frames_extracted=False
|
|
84
|
+
)
|
|
85
|
+
for video in videos:
|
|
86
|
+
video.state_frames_required = True
|
|
87
|
+
video.save()
|
|
88
|
+
|
|
89
|
+
def get_videos_scheduled_for_initial_prediction():
|
|
90
|
+
return RawVideoFile.objects.filter(
|
|
91
|
+
state_initial_prediction_required=True,
|
|
92
|
+
state_initial_prediction_completed=False,
|
|
93
|
+
state_frames_extracted=True
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
from pathlib import Path
|
|
97
|
+
def get_multilabel_model(model_path:Path):
|
|
98
|
+
from agl_predict_endo_frame.model_loader import MultiLabelClassificationNet
|
|
99
|
+
model_path_str = model_path.resolve().as_posix()
|
|
100
|
+
model = MultiLabelClassificationNet.load_from_checkpoint(model_path_str)
|
|
101
|
+
model.cuda()
|
|
102
|
+
model.eval()
|
|
103
|
+
return model
|
|
104
|
+
|
|
105
|
+
def get_multilabel_classifier(model, verbose:bool=False):
|
|
106
|
+
from agl_predict_endo_frame.predict import Classifier
|
|
107
|
+
classifier = Classifier(model, verbose = verbose)
|
|
108
|
+
return classifier
|
|
109
|
+
|
|
110
|
+
def get_crops(video, paths):
|
|
111
|
+
endo_roi_dict = video.get_endo_roi()
|
|
112
|
+
# dict with x, y, width height
|
|
113
|
+
# crops is list of touples with (y_min, y_max, x_min, x_max)
|
|
114
|
+
crop_tuple = (
|
|
115
|
+
endo_roi_dict["y"],
|
|
116
|
+
endo_roi_dict["y"] + endo_roi_dict["height"],
|
|
117
|
+
endo_roi_dict["x"],
|
|
118
|
+
endo_roi_dict["x"] + endo_roi_dict["width"],
|
|
119
|
+
)
|
|
120
|
+
crops = [crop_tuple for _ in paths]
|
|
121
|
+
return crops
|
|
122
|
+
|
|
123
|
+
# model = MultiLabelClassificationNet.load_from_checkpoint("model/colo_segmentation_RegNetX800MF_6.ckpt")
|
|
124
|
+
def perform_initial_prediction_on_video(
|
|
125
|
+
video:RawVideoFile, model_path,
|
|
126
|
+
window_size_s, min_seq_len_s
|
|
127
|
+
):
|
|
128
|
+
|
|
129
|
+
model = get_multilabel_model(model_path)
|
|
130
|
+
classifier = get_multilabel_classifier(model, verbose = True)
|
|
131
|
+
|
|
132
|
+
paths = video.get_frame_paths()
|
|
133
|
+
string_paths = [p.resolve().as_posix() for p in paths]
|
|
134
|
+
crops = get_crops(video, string_paths)
|
|
135
|
+
fps = video.get_fps()
|
|
136
|
+
|
|
137
|
+
predictions = classifier.pipe(string_paths, crops)
|
|
138
|
+
readable_predictions = [classifier.readable(p) for p in predictions]
|
|
139
|
+
result_dict = classifier.post_process_predictions_serializable(
|
|
140
|
+
readable_predictions,
|
|
141
|
+
window_size_s = window_size_s,
|
|
142
|
+
min_seq_len_s = min_seq_len_s,
|
|
143
|
+
fps = fps
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
# Predictions
|
|
148
|
+
_path = video.get_predictions_path()
|
|
149
|
+
with open(_path, "w") as f:
|
|
150
|
+
json.dump(result_dict["predictions"], f, indent = 4)
|
|
151
|
+
|
|
152
|
+
# smooth_predictions
|
|
153
|
+
_path = video.get_smooth_predictions_path()
|
|
154
|
+
with open(_path, "w") as f:
|
|
155
|
+
json.dump(result_dict["smooth_predictions"], f, indent = 4)
|
|
156
|
+
|
|
157
|
+
# binary_predictions
|
|
158
|
+
_path = video.get_binary_predictions_path()
|
|
159
|
+
with open(_path, "w") as f:
|
|
160
|
+
json.dump(result_dict["binary_predictions"], f, indent = 4)
|
|
161
|
+
|
|
162
|
+
# Raw Sequences
|
|
163
|
+
_path = video.get_raw_sequences_path()
|
|
164
|
+
with open(_path, "w") as f:
|
|
165
|
+
json.dump(result_dict["raw_sequences"], f, indent = 4)
|
|
166
|
+
|
|
167
|
+
# filtered_sequences
|
|
168
|
+
_path = video.get_filtered_sequences_path()
|
|
169
|
+
with open(_path, "w") as f:
|
|
170
|
+
json.dump(result_dict["filtered_sequences"], f, indent = 4)
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
# update state_initial_prediction_completed
|
|
174
|
+
video.state_initial_prediction_required = False
|
|
175
|
+
video.state_initial_prediction_completed = True
|
|
176
|
+
video.state_initial_prediction_import_required = True
|
|
177
|
+
video.state_initial_prediction_import_completed = False
|
|
178
|
+
video.save()
|
|
179
|
+
|
|
180
|
+
return video
|
|
181
|
+
|
|
182
|
+
def perform_initial_prediction_on_videos(
|
|
183
|
+
model_path,
|
|
184
|
+
window_size_s, min_seq_len_s
|
|
185
|
+
):
|
|
186
|
+
videos = get_videos_scheduled_for_initial_prediction()
|
|
187
|
+
for video in videos:
|
|
188
|
+
perform_initial_prediction_on_video(
|
|
189
|
+
video,
|
|
190
|
+
model_path, window_size_s, min_seq_len_s
|
|
191
|
+
)
|
|
192
|
+
|
|
193
|
+
def videos_scheduled_for_prediction_import_preflight():
|
|
194
|
+
videos = RawVideoFile.objects.filter(
|
|
195
|
+
state_initial_prediction_completed=True,
|
|
196
|
+
state_initial_prediction_import_completed=False
|
|
197
|
+
)
|
|
198
|
+
for video in videos:
|
|
199
|
+
video.state_initial_prediction_required = True
|
|
200
|
+
video.save()
|
|
201
|
+
|
|
202
|
+
def get_videos_scheduled_for_prediction_import():
|
|
203
|
+
return RawVideoFile.objects.filter(
|
|
204
|
+
state_initial_prediction_import_required=True,
|
|
205
|
+
state_initial_prediction_import_completed=False,
|
|
206
|
+
state_initial_prediction_completed=True
|
|
207
|
+
)
|
|
208
|
+
|
|
209
|
+
def import_predictions_for_video(video:RawVideoFile):
|
|
210
|
+
# import predictions for video
|
|
211
|
+
pass
|
|
212
|
+
|
|
213
|
+
# update state_prediction_import_completed
|
|
214
|
+
# video.state_initial_prediction_import_required = False
|
|
215
|
+
# video.state_initial_prediction_import_completed = True
|
|
216
|
+
# video.save()
|
|
217
|
+
|
|
218
|
+
return video
|
|
219
|
+
|
|
220
|
+
def import_predictions_for_videos():
|
|
221
|
+
videos = get_videos_scheduled_for_prediction_import()
|
|
222
|
+
for video in videos:
|
|
223
|
+
import_predictions_for_video(video)
|
|
224
|
+
|
|
225
|
+
# # Step 4 - Delete Frames if not needed anymore
|
|
226
|
+
# function to query for videos scheduled for frame deletion,
|
|
227
|
+
# first we need to set state_frames_required = False for videos with:
|
|
228
|
+
# state_ocr_required = False and state_ocr_completed = True and
|
|
229
|
+
# state_initial_prediction_required = False and state_initial_prediction_completed = True
|
|
230
|
+
def delete_frames_preflight():
|
|
231
|
+
videos = RawVideoFile.objects.filter(
|
|
232
|
+
state_ocr_required=False,
|
|
233
|
+
state_ocr_completed=True,
|
|
234
|
+
state_initial_prediction_required=False,
|
|
235
|
+
state_initial_prediction_completed=True
|
|
236
|
+
)
|
|
237
|
+
for video in videos:
|
|
238
|
+
video.state_frames_required = False
|
|
239
|
+
video.save()
|
|
240
|
+
|
|
241
|
+
# function to query for videos scheduled for frame deletion,
|
|
242
|
+
# frames should be deleted if state_frames_required = False
|
|
243
|
+
def get_videos_scheduled_for_frame_deletion():
|
|
244
|
+
return RawVideoFile.objects.filter(
|
|
245
|
+
state_frames_required=False
|
|
246
|
+
)
|
|
247
|
+
|
|
248
|
+
def delete_frames_for_video(video:RawVideoFile):
|
|
249
|
+
# delete frames for video
|
|
250
|
+
|
|
251
|
+
# update state_frames_deleted
|
|
252
|
+
video.state_frames_extracted = False
|
|
253
|
+
video.save()
|
|
254
|
+
|
|
255
|
+
return video
|
|
256
|
+
|
|
257
|
+
def delete_frames():
|
|
258
|
+
videos = get_videos_scheduled_for_frame_deletion()
|
|
259
|
+
for video in videos:
|
|
260
|
+
delete_frames_for_video(video)
|