endoreg-db 0.5.3__py3-none-any.whl → 0.6.1__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.
Potentially problematic release.
This version of endoreg-db might be problematic. Click here for more details.
- endoreg_db/admin.py +90 -1
- endoreg_db/case_generator/case_generator.py +159 -0
- endoreg_db/case_generator/lab_sample_factory.py +33 -0
- endoreg_db/case_generator/utils.py +30 -0
- endoreg_db/data/__init__.py +50 -4
- endoreg_db/data/ai_model/data.yaml +7 -0
- endoreg_db/data/{label → ai_model_label}/label/data.yaml +27 -1
- endoreg_db/data/ai_model_label/label-set/data.yaml +21 -0
- endoreg_db/data/ai_model_meta/default_multilabel_classification.yaml +5 -0
- endoreg_db/data/ai_model_video_segmentation_label/base_segmentation.yaml +176 -0
- endoreg_db/data/ai_model_video_segmentation_labelset/data.yaml +20 -0
- endoreg_db/data/center/data.yaml +35 -5
- endoreg_db/data/contraindication/bleeding.yaml +11 -0
- endoreg_db/data/distribution/numeric/data.yaml +14 -0
- endoreg_db/data/endoscope/data.yaml +93 -0
- endoreg_db/data/examination_indication/endoscopy.yaml +8 -0
- endoreg_db/data/examination_indication_classification/endoscopy.yaml +8 -0
- endoreg_db/data/examination_indication_classification_choice/endoscopy.yaml +101 -0
- endoreg_db/data/finding/data.yaml +141 -0
- endoreg_db/data/finding_intervention/endoscopy.yaml +138 -0
- endoreg_db/data/finding_intervention_type/endoscopy.yaml +15 -0
- endoreg_db/data/finding_location_classification/colonoscopy.yaml +46 -0
- endoreg_db/data/finding_location_classification_choice/colonoscopy.yaml +240 -0
- endoreg_db/data/finding_morphology_classification/colonoscopy.yaml +48 -0
- endoreg_db/data/finding_morphology_classification_choice/colon_lesion_circularity_default.yaml +34 -0
- endoreg_db/data/finding_morphology_classification_choice/colon_lesion_nice.yaml +20 -0
- endoreg_db/data/finding_morphology_classification_choice/colon_lesion_paris.yaml +65 -0
- endoreg_db/data/finding_morphology_classification_choice/colon_lesion_planarity_default.yaml +56 -0
- endoreg_db/data/finding_morphology_classification_choice/colon_lesion_surface_intact_default.yaml +39 -0
- endoreg_db/data/finding_morphology_classification_choice/colonoscopy_size.yaml +57 -0
- endoreg_db/data/finding_morphology_classification_type/colonoscopy.yaml +79 -0
- endoreg_db/data/finding_type/data.yaml +30 -0
- endoreg_db/data/gender/data.yaml +17 -0
- endoreg_db/data/lab_value/cardiac_enzymes.yaml +7 -1
- endoreg_db/data/lab_value/coagulation.yaml +6 -1
- endoreg_db/data/lab_value/electrolytes.yaml +39 -1
- endoreg_db/data/lab_value/gastrointestinal_function.yaml +12 -0
- endoreg_db/data/lab_value/hematology.yaml +17 -2
- endoreg_db/data/lab_value/hormones.yaml +6 -0
- endoreg_db/data/lab_value/lipids.yaml +12 -3
- endoreg_db/data/lab_value/misc.yaml +5 -2
- endoreg_db/data/lab_value/renal_function.yaml +2 -1
- endoreg_db/data/lx_client_tag/base.yaml +54 -0
- endoreg_db/data/lx_client_type/base.yaml +30 -0
- endoreg_db/data/lx_permission/base.yaml +24 -0
- endoreg_db/data/lx_permission/endoreg.yaml +52 -0
- endoreg_db/data/medication_indication/anticoagulation.yaml +44 -49
- endoreg_db/data/names_first/first_names.yaml +51 -0
- endoreg_db/data/names_last/last_names.yaml +51 -0
- endoreg_db/data/network_device/data.yaml +30 -0
- endoreg_db/data/organ/data.yaml +29 -0
- endoreg_db/data/pdf_type/data.yaml +2 -1
- endoreg_db/data/report_reader_flag/ukw-examination-generic.yaml +4 -0
- endoreg_db/forms/__init__.py +3 -1
- endoreg_db/forms/examination_form.py +11 -0
- endoreg_db/forms/patient_finding_intervention_form.py +19 -0
- endoreg_db/forms/patient_form.py +26 -0
- endoreg_db/management/commands/__init__.py +0 -0
- endoreg_db/management/commands/load_ai_model_data.py +57 -23
- endoreg_db/management/commands/load_ai_model_label_data.py +59 -0
- endoreg_db/management/commands/load_base_db_data.py +160 -118
- endoreg_db/management/commands/{load_endoscope_type_data.py → load_contraindication_data.py} +3 -7
- endoreg_db/management/commands/load_disease_data.py +29 -7
- endoreg_db/management/commands/load_endoscope_data.py +68 -0
- endoreg_db/management/commands/load_examination_indication_data.py +65 -0
- endoreg_db/management/commands/load_finding_data.py +171 -0
- endoreg_db/management/commands/load_lab_value_data.py +3 -3
- endoreg_db/management/commands/load_lx_data.py +64 -0
- endoreg_db/management/commands/load_medication_data.py +83 -21
- endoreg_db/management/commands/load_name_data.py +37 -0
- endoreg_db/management/commands/{load_endoscopy_processor_data.py → load_organ_data.py} +7 -9
- endoreg_db/migrations/0001_initial.py +1206 -728
- endoreg_db/migrations/0002_alter_frame_image_alter_rawframe_image.py +23 -0
- endoreg_db/migrations/0003_alter_frame_image_alter_rawframe_image.py +23 -0
- endoreg_db/migrations/0004_alter_rawvideofile_file_alter_video_file.py +25 -0
- endoreg_db/migrations/0005_rawvideofile_frame_count_and_more.py +33 -0
- endoreg_db/migrations/0006_frame_extracted_rawframe_extracted.py +23 -0
- endoreg_db/migrations/0007_rename_pseudo_patient_video_patient_and_more.py +24 -0
- endoreg_db/migrations/0008_remove_reportfile_patient_examination_and_more.py +48 -0
- endoreg_db/models/__init__.py +331 -28
- endoreg_db/models/ai_model/__init__.py +1 -0
- endoreg_db/models/ai_model/ai_model.py +103 -0
- endoreg_db/models/ai_model/lightning/__init__.py +3 -0
- endoreg_db/models/ai_model/lightning/inference_dataset.py +53 -0
- endoreg_db/models/ai_model/lightning/multilabel_classification_net.py +155 -0
- endoreg_db/models/ai_model/lightning/postprocess.py +53 -0
- endoreg_db/models/ai_model/lightning/predict.py +172 -0
- endoreg_db/models/ai_model/lightning/prediction_visualizer.py +55 -0
- endoreg_db/models/ai_model/lightning/preprocess.py +68 -0
- endoreg_db/models/ai_model/lightning/run_visualizer.py +21 -0
- endoreg_db/models/ai_model/model_meta.py +232 -6
- endoreg_db/models/ai_model/model_type.py +13 -3
- endoreg_db/models/annotation/__init__.py +31 -2
- endoreg_db/models/annotation/anonymized_image_annotation.py +73 -18
- endoreg_db/models/annotation/binary_classification_annotation_task.py +94 -57
- endoreg_db/models/annotation/image_classification.py +73 -14
- endoreg_db/models/annotation/video_segmentation_annotation.py +52 -0
- endoreg_db/models/annotation/video_segmentation_labelset.py +20 -0
- endoreg_db/models/case/__init__.py +1 -0
- endoreg_db/models/{persons/patient/case → case}/case.py +4 -0
- endoreg_db/models/case_template/__init__.py +10 -1
- endoreg_db/models/case_template/case_template.py +57 -13
- endoreg_db/models/case_template/case_template_rule.py +5 -5
- endoreg_db/models/case_template/case_template_rule_value.py +19 -4
- endoreg_db/models/center/__init__.py +7 -0
- endoreg_db/models/center/center.py +31 -5
- endoreg_db/models/center/center_product.py +0 -1
- endoreg_db/models/center/center_resource.py +16 -2
- endoreg_db/models/center/center_waste.py +6 -1
- endoreg_db/models/contraindication/__init__.py +21 -0
- endoreg_db/models/data_file/__init__.py +38 -5
- endoreg_db/models/data_file/base_classes/__init__.py +6 -1
- endoreg_db/models/data_file/base_classes/abstract_frame.py +64 -15
- endoreg_db/models/data_file/base_classes/abstract_pdf.py +136 -0
- endoreg_db/models/data_file/base_classes/abstract_video.py +744 -138
- endoreg_db/models/data_file/base_classes/frame_helpers.py +17 -0
- endoreg_db/models/data_file/base_classes/prepare_bulk_frames.py +19 -0
- endoreg_db/models/data_file/base_classes/utils.py +80 -0
- endoreg_db/models/data_file/frame.py +22 -38
- endoreg_db/models/data_file/import_classes/__init__.py +4 -18
- endoreg_db/models/data_file/import_classes/raw_pdf.py +162 -90
- endoreg_db/models/data_file/import_classes/raw_video.py +239 -294
- endoreg_db/models/data_file/metadata/__init__.py +10 -0
- endoreg_db/models/data_file/metadata/pdf_meta.py +4 -0
- endoreg_db/models/data_file/metadata/sensitive_meta.py +265 -6
- endoreg_db/models/data_file/metadata/video_meta.py +116 -50
- endoreg_db/models/data_file/report_file.py +30 -63
- endoreg_db/models/data_file/video/__init__.py +6 -2
- endoreg_db/models/data_file/video/video.py +187 -16
- endoreg_db/models/data_file/video_segment.py +162 -55
- endoreg_db/models/disease.py +25 -2
- endoreg_db/models/emission/__init__.py +5 -1
- endoreg_db/models/emission/emission_factor.py +71 -6
- endoreg_db/models/event.py +51 -0
- endoreg_db/models/examination/__init__.py +6 -1
- endoreg_db/models/examination/examination.py +53 -12
- endoreg_db/models/examination/examination_indication.py +170 -0
- endoreg_db/models/examination/examination_time.py +31 -5
- endoreg_db/models/examination/examination_time_type.py +28 -4
- endoreg_db/models/examination/examination_type.py +28 -6
- endoreg_db/models/finding/__init__.py +11 -0
- endoreg_db/models/finding/finding.py +75 -0
- endoreg_db/models/finding/finding_intervention.py +60 -0
- endoreg_db/models/finding/finding_location_classification.py +94 -0
- endoreg_db/models/finding/finding_morphology_classification.py +89 -0
- endoreg_db/models/finding/finding_type.py +22 -0
- endoreg_db/models/hardware/endoscope.py +16 -0
- endoreg_db/models/hardware/endoscopy_processor.py +31 -19
- endoreg_db/models/label/label.py +35 -7
- endoreg_db/models/laboratory/lab_value.py +12 -3
- endoreg_db/models/logging/__init__.py +8 -1
- endoreg_db/models/lx/__init__.py +4 -0
- endoreg_db/models/lx/client.py +57 -0
- endoreg_db/models/lx/identity.py +34 -0
- endoreg_db/models/lx/permission.py +18 -0
- endoreg_db/models/lx/user.py +16 -0
- endoreg_db/models/medication/__init__.py +19 -1
- endoreg_db/models/medication/medication.py +7 -122
- endoreg_db/models/medication/medication_indication.py +50 -0
- endoreg_db/models/medication/medication_indication_type.py +34 -0
- endoreg_db/models/medication/medication_intake_time.py +26 -0
- endoreg_db/models/medication/medication_schedule.py +37 -0
- endoreg_db/models/network/__init__.py +7 -1
- endoreg_db/models/network/network_device.py +13 -8
- endoreg_db/models/organ/__init__.py +38 -0
- endoreg_db/models/other/__init__.py +19 -1
- endoreg_db/models/other/distribution/__init__.py +44 -0
- endoreg_db/models/other/distribution/base_value_distribution.py +20 -0
- endoreg_db/models/other/distribution/date_value_distribution.py +91 -0
- endoreg_db/models/other/distribution/multiple_categorical_value_distribution.py +32 -0
- endoreg_db/models/other/distribution/numeric_value_distribution.py +97 -0
- endoreg_db/models/other/distribution/single_categorical_value_distribution.py +22 -0
- endoreg_db/models/other/distribution.py +1 -211
- endoreg_db/models/other/material.py +4 -0
- endoreg_db/models/other/transport_route.py +2 -1
- endoreg_db/models/patient/__init__.py +24 -0
- endoreg_db/models/patient/patient_examination.py +182 -0
- endoreg_db/models/patient/patient_finding.py +143 -0
- endoreg_db/models/patient/patient_finding_intervention.py +26 -0
- endoreg_db/models/patient/patient_finding_location.py +120 -0
- endoreg_db/models/patient/patient_finding_morphology.py +166 -0
- endoreg_db/models/persons/__init__.py +29 -2
- endoreg_db/models/persons/examiner/examiner.py +48 -4
- endoreg_db/models/persons/patient/__init__.py +1 -1
- endoreg_db/models/persons/patient/patient.py +227 -54
- endoreg_db/models/persons/patient/patient_disease.py +6 -0
- endoreg_db/models/persons/patient/patient_event.py +31 -1
- endoreg_db/models/persons/patient/patient_examination_indication.py +32 -0
- endoreg_db/models/persons/patient/patient_lab_sample.py +4 -2
- endoreg_db/models/persons/patient/patient_lab_value.py +37 -16
- endoreg_db/models/persons/patient/patient_medication.py +27 -12
- endoreg_db/models/persons/patient/patient_medication_schedule.py +62 -2
- endoreg_db/models/prediction/__init__.py +7 -1
- endoreg_db/models/prediction/image_classification.py +20 -6
- endoreg_db/models/prediction/video_prediction_meta.py +151 -89
- endoreg_db/models/product/__init__.py +10 -1
- endoreg_db/models/product/product.py +15 -2
- endoreg_db/models/product/product_group.py +8 -0
- endoreg_db/models/product/product_material.py +4 -0
- endoreg_db/models/product/product_weight.py +12 -0
- endoreg_db/models/product/reference_product.py +19 -3
- endoreg_db/models/quiz/__init__.py +8 -1
- endoreg_db/models/report_reader/__init__.py +6 -1
- endoreg_db/serializers/__init__.py +1 -1
- endoreg_db/serializers/annotation.py +2 -5
- endoreg_db/serializers/frame.py +1 -5
- endoreg_db/serializers/patient.py +26 -3
- endoreg_db/serializers/prediction.py +2 -7
- endoreg_db/serializers/raw_video_meta_validation.py +13 -0
- endoreg_db/serializers/video.py +6 -13
- endoreg_db/serializers/video_segmentation.py +492 -0
- endoreg_db/templates/admin/patient_finding_intervention.html +253 -0
- endoreg_db/templates/admin/start_examination.html +12 -0
- endoreg_db/templates/timeline.html +176 -0
- endoreg_db/urls.py +173 -0
- endoreg_db/utils/__init__.py +36 -1
- endoreg_db/utils/dataloader.py +45 -19
- endoreg_db/utils/dates.py +39 -0
- endoreg_db/utils/hashs.py +122 -4
- endoreg_db/utils/names.py +74 -0
- endoreg_db/utils/parse_and_generate_yaml.py +46 -0
- endoreg_db/utils/pydantic_models/__init__.py +6 -0
- endoreg_db/utils/pydantic_models/db_config.py +57 -0
- endoreg_db/utils/validate_endo_roi.py +19 -0
- endoreg_db/utils/validate_subcategory_dict.py +91 -0
- endoreg_db/utils/video/__init__.py +13 -0
- endoreg_db/utils/video/extract_frames.py +121 -0
- endoreg_db/utils/video/transcode_videofile.py +111 -0
- endoreg_db/views/__init__.py +2 -0
- endoreg_db/views/csrf.py +7 -0
- endoreg_db/views/patient_views.py +90 -0
- endoreg_db/views/raw_video_meta_validation_views.py +38 -0
- endoreg_db/views/report_views.py +96 -0
- endoreg_db/views/video_segmentation_views.py +149 -0
- endoreg_db/views/views_for_timeline.py +46 -0
- endoreg_db/views.py +0 -3
- endoreg_db-0.6.1.dist-info/METADATA +151 -0
- endoreg_db-0.6.1.dist-info/RECORD +420 -0
- {endoreg_db-0.5.3.dist-info → endoreg_db-0.6.1.dist-info}/WHEEL +1 -1
- endoreg_db/data/active_model/data.yaml +0 -3
- endoreg_db/data/label/label-set/data.yaml +0 -18
- endoreg_db/management/commands/delete_legacy_images.py +0 -19
- endoreg_db/management/commands/delete_legacy_videos.py +0 -17
- endoreg_db/management/commands/extract_legacy_video_frames.py +0 -18
- endoreg_db/management/commands/import_legacy_images.py +0 -94
- endoreg_db/management/commands/import_legacy_videos.py +0 -76
- endoreg_db/management/commands/load_label_data.py +0 -67
- endoreg_db/migrations/0002_anonymizedimagelabel_anonymousimageannotation_and_more.py +0 -55
- endoreg_db/migrations/0003_anonymousimageannotation_original_image_url_and_more.py +0 -39
- endoreg_db/migrations/0004_alter_rawpdffile_file.py +0 -20
- endoreg_db/migrations/0005_uploadedfile_alter_rawpdffile_file_anonymizedfile.py +0 -40
- endoreg_db/migrations/0006_alter_rawpdffile_file.py +0 -20
- endoreg_db/migrations/0007_networkdevicelogentry_datetime_and_more.py +0 -43
- endoreg_db/migrations/0008_networkdevicelogentry_aglnet_ip_and_more.py +0 -28
- endoreg_db/migrations/0009_alter_networkdevicelogentry_vpn_service_status.py +0 -18
- endoreg_db/migrations/0010_remove_networkdevicelogentry_hostname.py +0 -17
- endoreg_db/models/legacy_data/__init__.py +0 -3
- endoreg_db/models/legacy_data/image.py +0 -34
- endoreg_db/models/patient_examination/__init__.py +0 -35
- endoreg_db/utils/video_metadata.py +0 -87
- endoreg_db-0.5.3.dist-info/METADATA +0 -28
- endoreg_db-0.5.3.dist-info/RECORD +0 -319
- /endoreg_db/{models/persons/patient/case → case_generator}/__init__.py +0 -0
- /endoreg_db/data/{label → ai_model_label}/label-type/data.yaml +0 -0
- /endoreg_db/data/{model_type → ai_model_type}/data.yaml +0 -0
- /endoreg_db/{data/distribution/numeric/.init → management/__init__.py} +0 -0
- /endoreg_db/management/commands/{load_report_reader_flag.py → load_report_reader_flag_data.py} +0 -0
- {endoreg_db-0.5.3.dist-info → endoreg_db-0.6.1.dist-info}/licenses/LICENSE +0 -0
endoreg_db/admin.py
CHANGED
|
@@ -1,3 +1,92 @@
|
|
|
1
|
+
from django.urls import path
|
|
1
2
|
from django.contrib import admin
|
|
3
|
+
from django.http import JsonResponse
|
|
4
|
+
from endoreg_db.models import (
|
|
5
|
+
Patient,
|
|
6
|
+
Examination,
|
|
7
|
+
PatientExamination,
|
|
8
|
+
Finding,
|
|
9
|
+
FindingLocationClassification,
|
|
10
|
+
FindingMorphologyClassification,
|
|
11
|
+
FindingIntervention, # Import Finding Interventions
|
|
12
|
+
PatientFindingIntervention,
|
|
13
|
+
FindingLocationClassificationChoice,
|
|
14
|
+
FindingMorphologyClassificationChoice,
|
|
15
|
+
)
|
|
16
|
+
from endoreg_db.forms.patient_finding_intervention_form import (
|
|
17
|
+
PatientFindingInterventionForm,
|
|
18
|
+
)
|
|
19
|
+
from endoreg_db.forms.patient_form import PatientForm
|
|
2
20
|
|
|
3
|
-
|
|
21
|
+
|
|
22
|
+
@admin.register(Patient)
|
|
23
|
+
class PatientAdmin(admin.ModelAdmin):
|
|
24
|
+
form = PatientForm
|
|
25
|
+
list_display = ("id", "first_name", "last_name", "dob", "center")
|
|
26
|
+
search_fields = ("first_name", "last_name", "email", "phone")
|
|
27
|
+
list_filter = ("dob", "center")
|
|
28
|
+
ordering = ("last_name",)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
@admin.register(Examination)
|
|
32
|
+
class ExaminationAdmin(admin.ModelAdmin):
|
|
33
|
+
list_display = ("id", "name")
|
|
34
|
+
search_fields = ("name", "name_de", "name_en")
|
|
35
|
+
list_filter = ("name",)
|
|
36
|
+
ordering = ("name",)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class PatientFindingInterventionAdmin(admin.ModelAdmin):
|
|
40
|
+
change_list_template = "admin/patient_finding_intervention.html"
|
|
41
|
+
|
|
42
|
+
def changelist_view(self, request, extra_context=None):
|
|
43
|
+
"""Pass Patients, Examinations, Findings, Locations, Location Choices, Morphologies, Morphology Choices, and Finding Interventions to the template"""
|
|
44
|
+
extra_context = {
|
|
45
|
+
"patients": Patient.objects.all(),
|
|
46
|
+
"examinations": Examination.objects.all(),
|
|
47
|
+
"findings": Finding.objects.all(),
|
|
48
|
+
"locations": FindingLocationClassification.objects.all(),
|
|
49
|
+
"location_choices": FindingLocationClassificationChoice.objects.none(),
|
|
50
|
+
"morphologies": FindingMorphologyClassification.objects.all(),
|
|
51
|
+
"morphology_choices": FindingMorphologyClassificationChoice.objects.all(),
|
|
52
|
+
"finding_interventions": FindingIntervention.objects.all(), # Pass Finding Interventions
|
|
53
|
+
}
|
|
54
|
+
return super().changelist_view(request, extra_context=extra_context)
|
|
55
|
+
|
|
56
|
+
def get_location_choices_json(self, request):
|
|
57
|
+
"""Ensure Django Admin returns JSON response for Location Choices"""
|
|
58
|
+
location_id = request.GET.get("location")
|
|
59
|
+
if not location_id:
|
|
60
|
+
return JsonResponse({"error": "Location ID is required"}, status=400)
|
|
61
|
+
|
|
62
|
+
try:
|
|
63
|
+
choices = list(
|
|
64
|
+
FindingLocationClassificationChoice.objects.filter(
|
|
65
|
+
location_classifications__id=location_id
|
|
66
|
+
).values("id", "name")
|
|
67
|
+
) # Convert QuerySet to List
|
|
68
|
+
|
|
69
|
+
if not choices:
|
|
70
|
+
return JsonResponse(
|
|
71
|
+
[], safe=False
|
|
72
|
+
) # Return an empty list if no data found
|
|
73
|
+
|
|
74
|
+
return JsonResponse(choices, safe=False) # Return valid JSON
|
|
75
|
+
|
|
76
|
+
except Exception as e:
|
|
77
|
+
return JsonResponse({"error": str(e)}, status=500)
|
|
78
|
+
|
|
79
|
+
def get_urls(self):
|
|
80
|
+
"""Register JSON endpoint inside Django Admin"""
|
|
81
|
+
urls = super().get_urls()
|
|
82
|
+
custom_urls = [
|
|
83
|
+
path(
|
|
84
|
+
"ajax/get-location-choices/",
|
|
85
|
+
self.admin_site.admin_view(self.get_location_choices_json),
|
|
86
|
+
name="ajax_get_location_choices",
|
|
87
|
+
),
|
|
88
|
+
]
|
|
89
|
+
return custom_urls + urls
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
admin.site.register(PatientFindingIntervention, PatientFindingInterventionAdmin)
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
from endoreg_db.models import CaseTemplate, CaseTemplateRule, CaseTemplateRuleType
|
|
2
|
+
from endoreg_db.case_generator.lab_sample_factory import LabSampleFactory
|
|
3
|
+
|
|
4
|
+
DEFAULT_CASE_TEMPLATE_NAME = "pre_default_screening_colonoscopy"
|
|
5
|
+
|
|
6
|
+
class CaseGenerator:
|
|
7
|
+
"""
|
|
8
|
+
Provides methods to generate cases based on a template.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
def __init__(self, template: CaseTemplate = None):
|
|
12
|
+
"""
|
|
13
|
+
Initializes the CaseGenerator with a template.
|
|
14
|
+
|
|
15
|
+
Args:
|
|
16
|
+
template (CaseTemplate, optional): The template to use for case generation. Defaults to the predefined template.
|
|
17
|
+
"""
|
|
18
|
+
self.template = template or CaseTemplate.objects.get(name=DEFAULT_CASE_TEMPLATE_NAME)
|
|
19
|
+
self.lab_sample_factory = LabSampleFactory()
|
|
20
|
+
|
|
21
|
+
# Define available rule types
|
|
22
|
+
rule_type_names = [
|
|
23
|
+
"create-object",
|
|
24
|
+
"set-field-default",
|
|
25
|
+
"set-field-by-distribution",
|
|
26
|
+
"set-field-by-value",
|
|
27
|
+
"set-field-single-choice",
|
|
28
|
+
"set-field-multiple-choice",
|
|
29
|
+
]
|
|
30
|
+
self.available_rule_types = CaseTemplateRuleType.objects.filter(name__in=rule_type_names)
|
|
31
|
+
|
|
32
|
+
def _validate_rule_type(self, rule_type: CaseTemplateRuleType):
|
|
33
|
+
"""
|
|
34
|
+
Validates if the rule type is supported.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
rule_type (CaseTemplateRuleType): The rule type to validate.
|
|
38
|
+
|
|
39
|
+
Raises:
|
|
40
|
+
ValueError: If the rule type is not supported.
|
|
41
|
+
"""
|
|
42
|
+
if rule_type not in self.available_rule_types:
|
|
43
|
+
raise ValueError(f"Rule type {rule_type} is not supported.")
|
|
44
|
+
|
|
45
|
+
def _apply_create_object(self, rule: CaseTemplateRule, parent=None):
|
|
46
|
+
"""
|
|
47
|
+
Applies a create-object rule to generate a model instance.
|
|
48
|
+
|
|
49
|
+
Args:
|
|
50
|
+
rule (CaseTemplateRule): The rule to apply.
|
|
51
|
+
parent (Optional[Model]): The parent object for the rule.
|
|
52
|
+
|
|
53
|
+
Returns:
|
|
54
|
+
Model: The created model instance.
|
|
55
|
+
"""
|
|
56
|
+
target_model = rule.get_target_model()
|
|
57
|
+
extra_params = rule.extra_parameters or {}
|
|
58
|
+
create_method_info = extra_params.get("create_method", {})
|
|
59
|
+
|
|
60
|
+
assert create_method_info, "Create method must be set for a create-object rule."
|
|
61
|
+
|
|
62
|
+
create_method = getattr(target_model, create_method_info["name"])
|
|
63
|
+
kwargs = create_method_info.get("kwargs", {})
|
|
64
|
+
|
|
65
|
+
if parent:
|
|
66
|
+
kwargs[rule.parent_field] = parent
|
|
67
|
+
|
|
68
|
+
target_instance = create_method(**kwargs)
|
|
69
|
+
target_instance.save()
|
|
70
|
+
|
|
71
|
+
for action in extra_params.get("actions", []):
|
|
72
|
+
action_method = getattr(target_instance, action["name"])
|
|
73
|
+
action_kwargs = action.get("kwargs", {})
|
|
74
|
+
action_method(**action_kwargs)
|
|
75
|
+
|
|
76
|
+
for chained_rule in rule.chained_rules.all():
|
|
77
|
+
self.apply_rule(chained_rule, parent=target_instance)
|
|
78
|
+
|
|
79
|
+
return target_instance
|
|
80
|
+
|
|
81
|
+
def _apply_set_field_by_distribution(self, rule: CaseTemplateRule, parent):
|
|
82
|
+
"""
|
|
83
|
+
Applies a set-field-by-distribution rule.
|
|
84
|
+
|
|
85
|
+
Args:
|
|
86
|
+
rule (CaseTemplateRule): The rule to apply.
|
|
87
|
+
parent (Model): The parent object for the rule.
|
|
88
|
+
|
|
89
|
+
Returns:
|
|
90
|
+
Model: The updated parent object.
|
|
91
|
+
"""
|
|
92
|
+
assert parent, "Parent must be provided for set-field-by-distribution rules."
|
|
93
|
+
assert rule.target_field, "Target field must be specified for the rule."
|
|
94
|
+
|
|
95
|
+
distribution = rule.get_distribution()
|
|
96
|
+
value = distribution.generate_value()
|
|
97
|
+
|
|
98
|
+
setattr(parent, rule.target_field, value)
|
|
99
|
+
parent.save()
|
|
100
|
+
return parent
|
|
101
|
+
|
|
102
|
+
def apply_rule(self, rule: CaseTemplateRule, parent=None):
|
|
103
|
+
"""
|
|
104
|
+
Applies a rule based on its type to generate a case.
|
|
105
|
+
|
|
106
|
+
Args:
|
|
107
|
+
rule (CaseTemplateRule): The rule to apply.
|
|
108
|
+
parent (Optional[Model]): The parent object for the rule.
|
|
109
|
+
|
|
110
|
+
Returns:
|
|
111
|
+
Model: The case by applying the rule.
|
|
112
|
+
"""
|
|
113
|
+
self._validate_rule_type(rule.rule_type)
|
|
114
|
+
|
|
115
|
+
if rule.rule_type.name == "create-object":
|
|
116
|
+
return self._apply_create_object(rule, parent)
|
|
117
|
+
|
|
118
|
+
if rule.rule_type.name == "set-field-by-distribution":
|
|
119
|
+
return self._apply_set_field_by_distribution(rule, parent)
|
|
120
|
+
|
|
121
|
+
raise ValueError(f"Unsupported rule type: {rule.rule_type.name}")
|
|
122
|
+
|
|
123
|
+
def generate_case(self, case_template: CaseTemplate = None):
|
|
124
|
+
"""
|
|
125
|
+
Generates a case based on the provided or default template.
|
|
126
|
+
|
|
127
|
+
Args:
|
|
128
|
+
case_template (CaseTemplate, optional): The template to use for case generation. Defaults to None.
|
|
129
|
+
|
|
130
|
+
Returns:
|
|
131
|
+
Tuple[Model, Model]: The generated patient and medication schedule.
|
|
132
|
+
"""
|
|
133
|
+
case_template = case_template or CaseTemplate.objects.get(name=DEFAULT_CASE_TEMPLATE_NAME)
|
|
134
|
+
|
|
135
|
+
create_patient_rule = case_template.get_create_patient_rule()
|
|
136
|
+
patient = self.apply_rule(create_patient_rule)
|
|
137
|
+
|
|
138
|
+
medication_schedule_rule = case_template.get_create_patient_medication_schedule_rule()
|
|
139
|
+
medication_schedule = self.apply_rule(medication_schedule_rule, parent=patient)
|
|
140
|
+
|
|
141
|
+
return patient, medication_schedule
|
|
142
|
+
|
|
143
|
+
# if not create_new_patient:
|
|
144
|
+
# raise NotImplementedError("Only new patients are supported at the moment.")
|
|
145
|
+
# else:
|
|
146
|
+
# # TODO Implement patient rules
|
|
147
|
+
# patient_rules = None # all rules of type "create_patient"
|
|
148
|
+
# patient = self.generate_patient(patient_rules)
|
|
149
|
+
|
|
150
|
+
# # Generate case based on template
|
|
151
|
+
# rules = self.template.get_rules()
|
|
152
|
+
# chained_rules = set()
|
|
153
|
+
|
|
154
|
+
# for rule in rules:
|
|
155
|
+
# rule_chain = rule.get_all_downward_chained_rules()
|
|
156
|
+
# chained_rules.add(rule)
|
|
157
|
+
# chained_rules.update(rule_chain)
|
|
158
|
+
|
|
159
|
+
# return chained_rules
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
from datetime import datetime, timezone
|
|
2
|
+
from endoreg_db.models import Patient, PatientLabSample, PatientLabSampleType
|
|
3
|
+
|
|
4
|
+
class LabSampleFactory:
|
|
5
|
+
"""
|
|
6
|
+
Provides methods to generate lab samples.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
def __init__(self):
|
|
10
|
+
"""
|
|
11
|
+
Initializes the LabSampleFactory.
|
|
12
|
+
"""
|
|
13
|
+
pass
|
|
14
|
+
|
|
15
|
+
def create_generic_lab_sample(self, patient: Patient):
|
|
16
|
+
"""
|
|
17
|
+
Generates a generic lab sample for a given patient.
|
|
18
|
+
|
|
19
|
+
Args:
|
|
20
|
+
patient (Patient): The patient for whom the lab sample is generated.
|
|
21
|
+
|
|
22
|
+
Returns:
|
|
23
|
+
PatientLabSample: The created lab sample instance.
|
|
24
|
+
"""
|
|
25
|
+
sample_type = PatientLabSampleType.objects.get(name="generic")
|
|
26
|
+
|
|
27
|
+
lab_sample = PatientLabSample.objects.create(
|
|
28
|
+
patient=patient,
|
|
29
|
+
sample_type=sample_type,
|
|
30
|
+
date=datetime.now(tz=timezone.utc)
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
return lab_sample
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
from endoreg_db.models import CaseTemplate
|
|
2
|
+
from endoreg_db.case_generator.case_generator import CaseGenerator
|
|
3
|
+
|
|
4
|
+
# TEMPLATE_NAME = "pre_endo-anticoagulation-af-low_risk"
|
|
5
|
+
TEMPLATE_NAME = "pre_default_screening_colonoscopy"
|
|
6
|
+
|
|
7
|
+
def fetch_template(template_name: str = DEFAULT_TEMPLATE_NAME) -> CaseTemplate:
|
|
8
|
+
"""
|
|
9
|
+
Fetches a CaseTemplate by name.
|
|
10
|
+
|
|
11
|
+
Args:
|
|
12
|
+
template_name (str): The name of the template to fetch. Defaults to DEFAULT_TEMPLATE_NAME.
|
|
13
|
+
|
|
14
|
+
Returns:
|
|
15
|
+
CaseTemplate: The fetched CaseTemplate instance.
|
|
16
|
+
"""
|
|
17
|
+
return CaseTemplate.objects.get(name=template_name)
|
|
18
|
+
|
|
19
|
+
def initialize_case_generator(template_name: str = DEFAULT_TEMPLATE_NAME) -> CaseGenerator:
|
|
20
|
+
"""
|
|
21
|
+
Initializes a CaseGenerator with the specified template.
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
template_name (str): The name of the template to use. Defaults to DEFAULT_TEMPLATE_NAME.
|
|
25
|
+
|
|
26
|
+
Returns:
|
|
27
|
+
CaseGenerator: An instance of CaseGenerator initialized with the template.
|
|
28
|
+
"""
|
|
29
|
+
template = fetch_template(template_name)
|
|
30
|
+
return CaseGenerator(template)
|
endoreg_db/data/__init__.py
CHANGED
|
@@ -6,16 +6,48 @@ INFORMATION_DATA_DIR = DATA_DIR / "information_source"
|
|
|
6
6
|
UNIT_DATA_DIR = DATA_DIR / "unit"
|
|
7
7
|
CENTER_DATA_DIR = DATA_DIR / "center"
|
|
8
8
|
EXAMINATION_DATA_DIR = DATA_DIR / "examination"
|
|
9
|
-
|
|
10
|
-
MODEL_TYPE_DATA_DIR = DATA_DIR / "model_type"
|
|
9
|
+
MODEL_TYPE_DATA_DIR = DATA_DIR / "ai_model_type"
|
|
11
10
|
ENDOSCOPY_PROCESSOR_DATA_DIR = DATA_DIR / "endoscopy_processor"
|
|
12
11
|
ENDOSCOPE_TYPE_DATA_DIR = DATA_DIR / "endoscope_type"
|
|
12
|
+
ENDOSCOPE_DATA_DIR = DATA_DIR / "endoscope"
|
|
13
13
|
ACTIVE_MODEL_DATA_DIR = DATA_DIR / "active_model"
|
|
14
14
|
PROFESSION_DATA_DIR = DATA_DIR / "profession"
|
|
15
15
|
PDF_TYPE_DATA_DIR = DATA_DIR / "pdf_type"
|
|
16
16
|
REPORT_READER_FLAG_DATA_DIR = DATA_DIR / "report_reader_flag"
|
|
17
17
|
EVENT_DATA_DIR = DATA_DIR / "event"
|
|
18
18
|
GENDER_DATA_DIR = DATA_DIR / "gender"
|
|
19
|
+
ORGAN_DATA_DIR = DATA_DIR / "organ"
|
|
20
|
+
|
|
21
|
+
# Contraindication
|
|
22
|
+
CONTRAINDICATION_DATA_DIR = DATA_DIR / "contraindication"
|
|
23
|
+
|
|
24
|
+
# Examination
|
|
25
|
+
EXAMINATION_INDICATION_DATA_DIR = DATA_DIR / "examination_indication"
|
|
26
|
+
EXAMINATION_INDICATION_CLASSIFICATION_DATA_DIR = (
|
|
27
|
+
DATA_DIR / "examination_indication_classification"
|
|
28
|
+
)
|
|
29
|
+
EXAMINATION_INDICATION_CLASSIFICATION_CHOICE_DATA_DIR = (
|
|
30
|
+
DATA_DIR / "examination_indication_classification_choice"
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
# Finding
|
|
34
|
+
FINDING_TYPE_DATA_DIR = DATA_DIR / "finding_type"
|
|
35
|
+
FINDING_DATA_DIR = DATA_DIR / "finding"
|
|
36
|
+
FINDING_LOCATION_CLASSIFICATION_DATA_DIR = DATA_DIR / "finding_location_classification"
|
|
37
|
+
FINDING_LOCATION_CLASSIFICATION_CHOICE_DATA_DIR = (
|
|
38
|
+
DATA_DIR / "finding_location_classification_choice"
|
|
39
|
+
)
|
|
40
|
+
FINDING_MORPHOLOGY_CLASSIFICATION_DATA_DIR = (
|
|
41
|
+
DATA_DIR / "finding_morphology_classification"
|
|
42
|
+
)
|
|
43
|
+
FINDING_MORPHOLOGY_CLASSIFICATION_CHOICE_DATA_DIR = (
|
|
44
|
+
DATA_DIR / "finding_morphology_classification_choice"
|
|
45
|
+
)
|
|
46
|
+
FINDING_MORPGOLOGY_CLASSIFICATION_TYPE_DATA_DIR = (
|
|
47
|
+
DATA_DIR / "finding_morphology_classification_type"
|
|
48
|
+
)
|
|
49
|
+
FINDING_INTERVETION_DATA_DIR = DATA_DIR / "finding_intervention"
|
|
50
|
+
FINIDNG_INTERVENTION_TYPE_DATA_DIR = DATA_DIR / "finding_intervention_type"
|
|
19
51
|
|
|
20
52
|
# Green Endoscopy Dashboard Stuffs
|
|
21
53
|
CENTER_RESOURCE_DATA_DIR = DATA_DIR / "center_resource"
|
|
@@ -40,7 +72,9 @@ MEDICATION_INDICATION_TYPE_DATA_DIR = DATA_DIR / "medication_indication_type"
|
|
|
40
72
|
DISTRIBUTION_BASE_DIR = DATA_DIR / "distribution"
|
|
41
73
|
DISTRIBUTION_SINGLE_CATEGORICAL_DATA_DIR = DISTRIBUTION_BASE_DIR / "single_categorical"
|
|
42
74
|
DISTRIBUTION_NUMERIC_DATA_DIR = DISTRIBUTION_BASE_DIR / "numeric"
|
|
43
|
-
DISTRIBUTION_MULTIPLE_CATEGORICAL_DATA_DIR =
|
|
75
|
+
DISTRIBUTION_MULTIPLE_CATEGORICAL_DATA_DIR = (
|
|
76
|
+
DISTRIBUTION_BASE_DIR / "multiple_categorical"
|
|
77
|
+
)
|
|
44
78
|
DISTRIBUTION_DATE_DATA_DIR = DISTRIBUTION_BASE_DIR / "date"
|
|
45
79
|
|
|
46
80
|
# G-Play Stuffs
|
|
@@ -60,6 +94,14 @@ AGL_SERVICE_DATA_DIR = DATA_DIR / "agl_service"
|
|
|
60
94
|
# LOGS
|
|
61
95
|
LOG_TYPE_DATA_DIR = DATA_DIR / "log_type"
|
|
62
96
|
|
|
97
|
+
# AI STUFFS
|
|
98
|
+
AI_MODEL_DATA_DIR = DATA_DIR / "ai_model"
|
|
99
|
+
AI_MODEL_TYPE_DATA_DIR = DATA_DIR / "ai_model_type"
|
|
100
|
+
AI_MODEL_META_DATA_DIR = DATA_DIR / "ai_model_meta"
|
|
101
|
+
LABEL_DATA_DIR = DATA_DIR / "ai_model_label"
|
|
102
|
+
VIDEO_SEGMENTATION_LABEL_DATA_DIR = DATA_DIR / "ai_model_video_segmentation_label"
|
|
103
|
+
VIDEO_SEGMENTATION_LABELSET_DATA_DIR = DATA_DIR / "ai_model_video_segmentation_labelset"
|
|
104
|
+
|
|
63
105
|
# To Do
|
|
64
106
|
LAB_VALUE_DATA_DIR = DATA_DIR / "lab_value"
|
|
65
107
|
PATIENT_LAB_SAMPLE_TYPE_DATA_DIR = DATA_DIR / "patient_lab_sample_type"
|
|
@@ -69,4 +111,8 @@ MEDICATION_INTAKE_TIME_DATA_DIR = DATA_DIR / "medication_intake_time"
|
|
|
69
111
|
|
|
70
112
|
RULE_TYPE_DATA_DIR = DATA_DIR / "rule_type"
|
|
71
113
|
RULE_ATTRIBUTE_DTYPE_DATA_DIR = DATA_DIR / "rule_attribute_dtype"
|
|
72
|
-
RULESET_DATA_DIR = DATA_DIR / "ruleset"
|
|
114
|
+
RULESET_DATA_DIR = DATA_DIR / "ruleset"
|
|
115
|
+
|
|
116
|
+
LX_PERMISSION_DATA_DIR = DATA_DIR / "lx_permission"
|
|
117
|
+
LX_CLIENT_TAG_DATA_DIR = DATA_DIR / "lx_client_tag"
|
|
118
|
+
LX_CLIENT_TYPE_DATA_DIR = DATA_DIR / "lx_client_type"
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
- model: endoreg_db.ai_model
|
|
2
|
+
fields:
|
|
3
|
+
name: "image_multilabel_classification_colonoscopy_default"
|
|
4
|
+
description: "Image multilabel classification model"
|
|
5
|
+
model_type: "image"
|
|
6
|
+
model_subtype: "multilabel"
|
|
7
|
+
video_segmentation_labelset: "colonoscopy_video_segmentation_raw"
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
- model: endoreg_db.Label
|
|
9
9
|
fields:
|
|
10
|
-
name: "
|
|
10
|
+
name: "ileocaecalvalve"
|
|
11
11
|
label_type: "classification"
|
|
12
12
|
|
|
13
13
|
- model: endoreg_db.Label
|
|
@@ -60,3 +60,29 @@
|
|
|
60
60
|
name: "outside"
|
|
61
61
|
label_type: "classification"
|
|
62
62
|
|
|
63
|
+
- model: endoreg_db.Label
|
|
64
|
+
fields:
|
|
65
|
+
name: "diverticule"
|
|
66
|
+
label_type: "classification"
|
|
67
|
+
|
|
68
|
+
- model: endoreg_db.Label
|
|
69
|
+
fields:
|
|
70
|
+
name: "grasper"
|
|
71
|
+
label_type: "classification"
|
|
72
|
+
|
|
73
|
+
- model: endoreg_db.Label
|
|
74
|
+
fields:
|
|
75
|
+
name: "nbi"
|
|
76
|
+
label_type: "classification"
|
|
77
|
+
|
|
78
|
+
# needle
|
|
79
|
+
- model: endoreg_db.Label
|
|
80
|
+
fields:
|
|
81
|
+
name: "needle"
|
|
82
|
+
label_type: "classification"
|
|
83
|
+
|
|
84
|
+
# snare
|
|
85
|
+
- model: endoreg_db.Label
|
|
86
|
+
fields:
|
|
87
|
+
name: "snare"
|
|
88
|
+
label_type: "classification"
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
- model: endoreg_db.LabelSet
|
|
2
|
+
fields:
|
|
3
|
+
name: "multilabel_classification_colonoscopy_default"
|
|
4
|
+
version: 1
|
|
5
|
+
labels:
|
|
6
|
+
[
|
|
7
|
+
"appendix",
|
|
8
|
+
"blood",
|
|
9
|
+
"diverticule",
|
|
10
|
+
"grasper",
|
|
11
|
+
"ileocaecalvalve",
|
|
12
|
+
"ileum",
|
|
13
|
+
"low_quality",
|
|
14
|
+
"nbi",
|
|
15
|
+
"needle",
|
|
16
|
+
"outside",
|
|
17
|
+
"polyp",
|
|
18
|
+
"snare",
|
|
19
|
+
"water_jet",
|
|
20
|
+
"wound",
|
|
21
|
+
]
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
- model: endoreg_db.video_segmentation_label
|
|
2
|
+
fields:
|
|
3
|
+
name: "upper_gi"
|
|
4
|
+
name_de: "Oberer GI-Trakt"
|
|
5
|
+
name_en: "Upper GI"
|
|
6
|
+
description: "Upper GI"
|
|
7
|
+
color: "#FF0000"
|
|
8
|
+
|
|
9
|
+
- model: endoreg_db.video_segmentation_label
|
|
10
|
+
fields:
|
|
11
|
+
name: "lower_gi"
|
|
12
|
+
name_de: "Unterer GI-Trakt"
|
|
13
|
+
name_en: "Lower GI"
|
|
14
|
+
description: "Lower GI"
|
|
15
|
+
color: "#00FF00"
|
|
16
|
+
|
|
17
|
+
- model: endoreg_db.video_segmentation_label
|
|
18
|
+
fields:
|
|
19
|
+
name: "esophagus"
|
|
20
|
+
name_de: "Ösophagus"
|
|
21
|
+
name_en: "Esophagus"
|
|
22
|
+
description: "Esophagus"
|
|
23
|
+
color: "#0000FF"
|
|
24
|
+
|
|
25
|
+
- model: endoreg_db.video_segmentation_label
|
|
26
|
+
fields:
|
|
27
|
+
name: "stomach"
|
|
28
|
+
name_de: "Magen"
|
|
29
|
+
name_en: "Stomach"
|
|
30
|
+
description: "Stomach"
|
|
31
|
+
color: "#FFFF00"
|
|
32
|
+
|
|
33
|
+
- model: endoreg_db.video_segmentation_label
|
|
34
|
+
fields:
|
|
35
|
+
name: "duodenum"
|
|
36
|
+
name_de: "Duodenum"
|
|
37
|
+
name_en: "Duodenum"
|
|
38
|
+
description: "Duodenum"
|
|
39
|
+
color: "#FF00FF"
|
|
40
|
+
|
|
41
|
+
- model: endoreg_db.video_segmentation_label
|
|
42
|
+
fields:
|
|
43
|
+
name: "colon"
|
|
44
|
+
name_de: "Kolon"
|
|
45
|
+
name_en: "Colon"
|
|
46
|
+
description: "Colon"
|
|
47
|
+
color: "#00FFFF"
|
|
48
|
+
|
|
49
|
+
- model: endoreg_db.video_segmentation_label
|
|
50
|
+
fields:
|
|
51
|
+
name: "ileum"
|
|
52
|
+
name_de: "Ileum"
|
|
53
|
+
name_en: "Ileum"
|
|
54
|
+
description: "Ileum"
|
|
55
|
+
color: "#800000"
|
|
56
|
+
|
|
57
|
+
- model: endoreg_db.video_segmentation_label
|
|
58
|
+
fields:
|
|
59
|
+
name: "outside"
|
|
60
|
+
name_de: "Außerhalb des Körpers"
|
|
61
|
+
name_en: "Out of Body"
|
|
62
|
+
description: "Out of Body"
|
|
63
|
+
color: "#008000"
|
|
64
|
+
|
|
65
|
+
- model: endoreg_db.video_segmentation_label
|
|
66
|
+
fields:
|
|
67
|
+
name: "bli"
|
|
68
|
+
name_de: "Blau-Licht-Imaging"
|
|
69
|
+
name_en: "Blue Light Imaging"
|
|
70
|
+
description: "Blue Light Imaging (high level for nbi and similar modes)"
|
|
71
|
+
color: "#000080"
|
|
72
|
+
|
|
73
|
+
- model: endoreg_db.video_segmentation_label
|
|
74
|
+
fields:
|
|
75
|
+
name: "low_quality"
|
|
76
|
+
name_de: "Niedrige Qualität"
|
|
77
|
+
name_en: "Low Quality"
|
|
78
|
+
description: "Low Quality"
|
|
79
|
+
color: "#800080"
|
|
80
|
+
|
|
81
|
+
- model: endoreg_db.video_segmentation_label
|
|
82
|
+
fields:
|
|
83
|
+
name: "instrument"
|
|
84
|
+
name_de: "Instrument"
|
|
85
|
+
name_en: "Instrument"
|
|
86
|
+
description: "Instrument"
|
|
87
|
+
color: "#808000"
|
|
88
|
+
|
|
89
|
+
# Appendix
|
|
90
|
+
- model: endoreg_db.video_segmentation_label
|
|
91
|
+
fields:
|
|
92
|
+
name: "appendix"
|
|
93
|
+
name_de: "Appendix"
|
|
94
|
+
name_en: "Appendix"
|
|
95
|
+
description: "Appendix"
|
|
96
|
+
color: "#FF0000"
|
|
97
|
+
# blood, diverticule, grasper, ileocaecalvalve, ileum, low_quality, nbi, needle, polyp, snare, water_jet, wound
|
|
98
|
+
- model: endoreg_db.video_segmentation_label
|
|
99
|
+
fields:
|
|
100
|
+
name: "blood"
|
|
101
|
+
name_de: "Blut"
|
|
102
|
+
name_en: "Blood"
|
|
103
|
+
description: "Blood"
|
|
104
|
+
color: "#00FF00"
|
|
105
|
+
|
|
106
|
+
- model: endoreg_db.video_segmentation_label
|
|
107
|
+
fields:
|
|
108
|
+
name: "diverticule"
|
|
109
|
+
name_de: "Divertikel"
|
|
110
|
+
name_en: "Diverticule"
|
|
111
|
+
description: "Diverticule"
|
|
112
|
+
color: "#0000FF"
|
|
113
|
+
|
|
114
|
+
- model: endoreg_db.video_segmentation_label
|
|
115
|
+
fields:
|
|
116
|
+
name: "grasper"
|
|
117
|
+
name_de: "Grasper"
|
|
118
|
+
name_en: "Grasper"
|
|
119
|
+
description: "Grasper"
|
|
120
|
+
color: "#FFFF00"
|
|
121
|
+
|
|
122
|
+
- model: endoreg_db.video_segmentation_label
|
|
123
|
+
fields:
|
|
124
|
+
name: "ileocaecalvalve"
|
|
125
|
+
name_de: "Ileocaecalvalve"
|
|
126
|
+
name_en: "Ileocaecalvalve"
|
|
127
|
+
description: "Ileocaecalvalve"
|
|
128
|
+
color: "#FF00FF"
|
|
129
|
+
|
|
130
|
+
- model: endoreg_db.video_segmentation_label
|
|
131
|
+
fields:
|
|
132
|
+
name: "nbi"
|
|
133
|
+
name_de: "Narrow Band Imaging"
|
|
134
|
+
name_en: "Narrow Band Imaging"
|
|
135
|
+
description: "Narrow Band Imaging"
|
|
136
|
+
color: "#00FFFF"
|
|
137
|
+
|
|
138
|
+
- model: endoreg_db.video_segmentation_label
|
|
139
|
+
fields:
|
|
140
|
+
name: "needle"
|
|
141
|
+
name_de: "Needle"
|
|
142
|
+
name_en: "Needle"
|
|
143
|
+
description: "Needle"
|
|
144
|
+
color: "#800000"
|
|
145
|
+
|
|
146
|
+
- model: endoreg_db.video_segmentation_label
|
|
147
|
+
fields:
|
|
148
|
+
name: "polyp"
|
|
149
|
+
name_de: "Polyp"
|
|
150
|
+
name_en: "Polyp"
|
|
151
|
+
description: "Polyp"
|
|
152
|
+
color: "#008000"
|
|
153
|
+
|
|
154
|
+
- model: endoreg_db.video_segmentation_label
|
|
155
|
+
fields:
|
|
156
|
+
name: "snare"
|
|
157
|
+
name_de: "Snare"
|
|
158
|
+
name_en: "Snare"
|
|
159
|
+
description: "Snare"
|
|
160
|
+
color: "#000080"
|
|
161
|
+
|
|
162
|
+
- model: endoreg_db.video_segmentation_label
|
|
163
|
+
fields:
|
|
164
|
+
name: "water_jet"
|
|
165
|
+
name_de: "Water Jet"
|
|
166
|
+
name_en: "Water Jet"
|
|
167
|
+
description: "Water Jet"
|
|
168
|
+
color: "#800080"
|
|
169
|
+
|
|
170
|
+
- model: endoreg_db.video_segmentation_label
|
|
171
|
+
fields:
|
|
172
|
+
name: "wound"
|
|
173
|
+
name_de: "Wound"
|
|
174
|
+
name_en: "Wound"
|
|
175
|
+
description: "Wound"
|
|
176
|
+
color: "#808000"
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
- model: endoreg_db.video_segmentation_label_set
|
|
2
|
+
fields:
|
|
3
|
+
name: "colonoscopy_video_segmentation_raw"
|
|
4
|
+
labels:
|
|
5
|
+
[
|
|
6
|
+
"appendix",
|
|
7
|
+
"blood",
|
|
8
|
+
"diverticule",
|
|
9
|
+
"grasper",
|
|
10
|
+
"ileocaecalvalve",
|
|
11
|
+
"ileum",
|
|
12
|
+
"low_quality",
|
|
13
|
+
"nbi",
|
|
14
|
+
"needle",
|
|
15
|
+
"outside",
|
|
16
|
+
"polyp",
|
|
17
|
+
"snare",
|
|
18
|
+
"water_jet",
|
|
19
|
+
"wound",
|
|
20
|
+
]
|