endoreg-db 0.1.0__py3-none-any.whl → 0.2.0__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/data/__init__.py +14 -0
- endoreg_db/data/active_model/data.yaml +3 -0
- endoreg_db/data/center/data.yaml +7 -0
- endoreg_db/data/endoscope_type/data.yaml +11 -0
- endoreg_db/data/endoscopy_processor/data.yaml +45 -0
- endoreg_db/data/examination/examinations/data.yaml +17 -0
- endoreg_db/data/examination/time/data.yaml +48 -0
- endoreg_db/data/examination/time-type/data.yaml +8 -0
- endoreg_db/data/examination/type/data.yaml +5 -0
- endoreg_db/data/information_source/data.yaml +30 -0
- endoreg_db/data/label/label/data.yaml +62 -0
- endoreg_db/data/label/label-set/data.yaml +18 -0
- endoreg_db/data/label/label-type/data.yaml +7 -0
- endoreg_db/data/model_type/data.yaml +7 -0
- endoreg_db/data/profession/data.yaml +70 -0
- endoreg_db/data/unit/data.yaml +17 -0
- endoreg_db/data/unit/length.yaml +31 -0
- endoreg_db/data/unit/volume.yaml +26 -0
- endoreg_db/data/unit/weight.yaml +31 -0
- endoreg_db/forms/__init__.py +2 -0
- endoreg_db/forms/settings/__init__.py +8 -0
- endoreg_db/forms/unit.py +6 -0
- endoreg_db/management/commands/_load_model_template.py +41 -0
- endoreg_db/management/commands/delete_legacy_images.py +19 -0
- endoreg_db/management/commands/delete_legacy_videos.py +17 -0
- endoreg_db/management/commands/extract_legacy_video_frames.py +18 -0
- endoreg_db/management/commands/fetch_legacy_image_dataset.py +32 -0
- endoreg_db/management/commands/import_legacy_images.py +94 -0
- endoreg_db/management/commands/import_legacy_videos.py +76 -0
- endoreg_db/management/commands/load_active_model_data.py +45 -0
- endoreg_db/management/commands/load_ai_model_data.py +45 -0
- endoreg_db/management/commands/load_base_db_data.py +62 -0
- endoreg_db/management/commands/load_center_data.py +43 -0
- endoreg_db/management/commands/load_endoscope_type_data.py +45 -0
- endoreg_db/management/commands/load_endoscopy_processor_data.py +45 -0
- endoreg_db/management/commands/load_examination_data.py +75 -0
- endoreg_db/management/commands/load_information_source.py +45 -0
- endoreg_db/management/commands/load_label_data.py +67 -0
- endoreg_db/management/commands/load_profession_data.py +44 -0
- endoreg_db/management/commands/load_unit_data.py +46 -0
- endoreg_db/management/commands/load_user_groups.py +67 -0
- endoreg_db/management/commands/register_ai_model.py +65 -0
- endoreg_db/migrations/0001_initial.py +582 -0
- endoreg_db/models/__init__.py +53 -0
- endoreg_db/models/ai_model/__init__.py +3 -0
- endoreg_db/models/ai_model/active_model.py +9 -0
- endoreg_db/models/ai_model/model_meta.py +24 -0
- endoreg_db/models/ai_model/model_type.py +26 -0
- endoreg_db/models/ai_model/utils.py +8 -0
- endoreg_db/models/annotation/__init__.py +2 -0
- endoreg_db/models/annotation/binary_classification_annotation_task.py +80 -0
- endoreg_db/models/annotation/image_classification.py +27 -0
- endoreg_db/models/center.py +19 -0
- endoreg_db/models/data_file/__init__.py +4 -0
- endoreg_db/models/data_file/base_classes/__init__.py +3 -0
- endoreg_db/models/data_file/base_classes/abstract_frame.py +51 -0
- endoreg_db/models/data_file/base_classes/abstract_video.py +200 -0
- endoreg_db/models/data_file/frame.py +45 -0
- endoreg_db/models/data_file/report_file.py +88 -0
- endoreg_db/models/data_file/video/__init__.py +7 -0
- endoreg_db/models/data_file/video/import_meta.py +25 -0
- endoreg_db/models/data_file/video/video.py +25 -0
- endoreg_db/models/data_file/video_segment.py +107 -0
- endoreg_db/models/examination/__init__.py +4 -0
- endoreg_db/models/examination/examination.py +26 -0
- endoreg_db/models/examination/examination_time.py +27 -0
- endoreg_db/models/examination/examination_time_type.py +24 -0
- endoreg_db/models/examination/examination_type.py +18 -0
- endoreg_db/models/hardware/__init__.py +2 -0
- endoreg_db/models/hardware/endoscope.py +44 -0
- endoreg_db/models/hardware/endoscopy_processor.py +143 -0
- endoreg_db/models/information_source.py +22 -0
- endoreg_db/models/label/__init__.py +1 -0
- endoreg_db/models/label/label.py +84 -0
- endoreg_db/models/legacy_data/__init__.py +3 -0
- endoreg_db/models/legacy_data/image.py +34 -0
- endoreg_db/models/patient_examination/__init__.py +35 -0
- endoreg_db/models/persons/__init__.py +4 -0
- endoreg_db/models/persons/examiner/__init__.py +2 -0
- endoreg_db/models/persons/examiner/examiner.py +16 -0
- endoreg_db/models/persons/examiner/examiner_type.py +2 -0
- endoreg_db/models/persons/patient.py +58 -0
- endoreg_db/models/persons/person.py +34 -0
- endoreg_db/models/persons/portal_user_information.py +29 -0
- endoreg_db/models/prediction/__init__.py +2 -0
- endoreg_db/models/prediction/image_classification.py +37 -0
- endoreg_db/models/prediction/video_prediction_meta.py +244 -0
- endoreg_db/models/unit.py +20 -0
- endoreg_db/queries/__init__.py +5 -0
- endoreg_db/queries/annotations/__init__.py +3 -0
- endoreg_db/queries/annotations/legacy.py +159 -0
- endoreg_db/queries/get/__init__.py +6 -0
- endoreg_db/queries/get/annotation.py +0 -0
- endoreg_db/queries/get/center.py +42 -0
- endoreg_db/queries/get/model.py +13 -0
- endoreg_db/queries/get/patient.py +14 -0
- endoreg_db/queries/get/patient_examination.py +20 -0
- endoreg_db/queries/get/prediction.py +0 -0
- endoreg_db/queries/get/report_file.py +33 -0
- endoreg_db/queries/get/video.py +31 -0
- endoreg_db/queries/get/video_import_meta.py +0 -0
- endoreg_db/queries/get/video_prediction_meta.py +0 -0
- endoreg_db/queries/sanity/__init_.py +0 -0
- endoreg_db/serializers/__init__.py +10 -0
- endoreg_db/serializers/ai_model.py +19 -0
- endoreg_db/serializers/annotation.py +17 -0
- endoreg_db/serializers/center.py +11 -0
- endoreg_db/serializers/examination.py +33 -0
- endoreg_db/serializers/frame.py +13 -0
- endoreg_db/serializers/hardware.py +21 -0
- endoreg_db/serializers/label.py +22 -0
- endoreg_db/serializers/patient.py +10 -0
- endoreg_db/serializers/prediction.py +15 -0
- endoreg_db/serializers/report_file.py +7 -0
- endoreg_db/serializers/video.py +27 -0
- endoreg_db-0.2.0.dist-info/LICENSE +674 -0
- endoreg_db-0.2.0.dist-info/METADATA +26 -0
- endoreg_db-0.2.0.dist-info/RECORD +126 -0
- endoreg_db-0.1.0.dist-info/METADATA +0 -19
- endoreg_db-0.1.0.dist-info/RECORD +0 -10
- {endoreg_db-0.1.0.dist-info → endoreg_db-0.2.0.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
from django.conf import settings
|
|
2
|
+
from django.core.management.base import BaseCommand
|
|
3
|
+
from ...models import Profession
|
|
4
|
+
from ...utils import load_model_data_from_yaml
|
|
5
|
+
from ...data import PROFESSION_DATA_DIR
|
|
6
|
+
|
|
7
|
+
SOURCE_DIR = PROFESSION_DATA_DIR # e.g. settings.DATA_DIR_INTERVENTION
|
|
8
|
+
|
|
9
|
+
MODEL_0 = Profession
|
|
10
|
+
|
|
11
|
+
IMPORT_MODELS = [ # string as model key, serves as key in IMPORT_METADATA
|
|
12
|
+
MODEL_0.__name__,
|
|
13
|
+
]
|
|
14
|
+
|
|
15
|
+
IMPORT_METADATA = {
|
|
16
|
+
MODEL_0.__name__: {
|
|
17
|
+
"dir": SOURCE_DIR, # e.g. "interventions"
|
|
18
|
+
"model": MODEL_0, # e.g. Intervention
|
|
19
|
+
"foreign_keys": [], # e.g. ["intervention_types"]
|
|
20
|
+
"foreign_key_models": [] # e.g. [InterventionType]
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
class Command(BaseCommand):
|
|
25
|
+
help = """Load all .yaml files in the data/intervention directory
|
|
26
|
+
into the Intervention and InterventionType model"""
|
|
27
|
+
|
|
28
|
+
def add_arguments(self, parser):
|
|
29
|
+
parser.add_argument(
|
|
30
|
+
'--verbose',
|
|
31
|
+
action='store_true',
|
|
32
|
+
help='Display verbose output',
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
def handle(self, *args, **options):
|
|
36
|
+
verbose = options['verbose']
|
|
37
|
+
for model_name in IMPORT_MODELS:
|
|
38
|
+
_metadata = IMPORT_METADATA[model_name]
|
|
39
|
+
load_model_data_from_yaml(
|
|
40
|
+
self,
|
|
41
|
+
model_name,
|
|
42
|
+
_metadata,
|
|
43
|
+
verbose
|
|
44
|
+
)
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
from django.conf import settings
|
|
2
|
+
import os
|
|
3
|
+
from django.core.management.base import BaseCommand
|
|
4
|
+
from ...models import Unit
|
|
5
|
+
import yaml
|
|
6
|
+
from ...utils import load_model_data_from_yaml
|
|
7
|
+
from ...data import UNIT_DATA_DIR
|
|
8
|
+
|
|
9
|
+
SOURCE_DIR = UNIT_DATA_DIR # e.g. settings.DATA_DIR_INTERVENTION
|
|
10
|
+
|
|
11
|
+
MODEL_0 = Unit
|
|
12
|
+
|
|
13
|
+
IMPORT_MODELS = [ # string as model key, serves as key in IMPORT_METADATA
|
|
14
|
+
MODEL_0.__name__,
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
IMPORT_METADATA = {
|
|
18
|
+
MODEL_0.__name__: {
|
|
19
|
+
"dir": SOURCE_DIR, # e.g. "interventions"
|
|
20
|
+
"model": MODEL_0, # e.g. Intervention
|
|
21
|
+
"foreign_keys": [], # e.g. ["intervention_types"]
|
|
22
|
+
"foreign_key_models": [] # e.g. [InterventionType]
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
class Command(BaseCommand):
|
|
27
|
+
help = """Load all .yaml files in the data/intervention directory
|
|
28
|
+
into the Intervention and InterventionType model"""
|
|
29
|
+
|
|
30
|
+
def add_arguments(self, parser):
|
|
31
|
+
parser.add_argument(
|
|
32
|
+
'--verbose',
|
|
33
|
+
action='store_true',
|
|
34
|
+
help='Display verbose output',
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
def handle(self, *args, **options):
|
|
38
|
+
verbose = options['verbose']
|
|
39
|
+
for model_name in IMPORT_MODELS:
|
|
40
|
+
_metadata = IMPORT_METADATA[model_name]
|
|
41
|
+
load_model_data_from_yaml(
|
|
42
|
+
self,
|
|
43
|
+
model_name,
|
|
44
|
+
_metadata,
|
|
45
|
+
verbose
|
|
46
|
+
)
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
|
|
2
|
+
from django.core.management.base import BaseCommand
|
|
3
|
+
from django.contrib.auth.models import Group, Permission
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Command(BaseCommand):
|
|
7
|
+
help = """Create additional user groups"""
|
|
8
|
+
|
|
9
|
+
def add_arguments(self, parser):
|
|
10
|
+
parser.add_argument(
|
|
11
|
+
'--verbose',
|
|
12
|
+
action='store_true',
|
|
13
|
+
help='Display verbose output',
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
def handle(self, *args, **options):
|
|
17
|
+
verbose = options['verbose']
|
|
18
|
+
|
|
19
|
+
permissions = [
|
|
20
|
+
"g_play_production",
|
|
21
|
+
"agl",
|
|
22
|
+
"endo_reg_production",
|
|
23
|
+
"ukw_production"
|
|
24
|
+
]
|
|
25
|
+
|
|
26
|
+
for permission_name in permissions:
|
|
27
|
+
permission, created = Permission.objects.get_or_create(codename=permission_name)
|
|
28
|
+
if verbose:
|
|
29
|
+
if created:
|
|
30
|
+
self.stdout.write(self.style.SUCCESS("Created Permission {}".format(group_name)))
|
|
31
|
+
|
|
32
|
+
groups = ["demo", "verified", "agl", "endo_reg_user", "g_play_user", "ukw_user"]
|
|
33
|
+
for group_name in groups:
|
|
34
|
+
_group, created = Group.objects.get_or_create(name=group_name)
|
|
35
|
+
if verbose:
|
|
36
|
+
if created:
|
|
37
|
+
self.stdout.write(self.style.SUCCESS("Created group {}".format(group_name)))
|
|
38
|
+
|
|
39
|
+
# Add permissions to groups
|
|
40
|
+
# demo has no permissions
|
|
41
|
+
# verified has no permissions
|
|
42
|
+
# agl has all permissions
|
|
43
|
+
# endo_reg_user has endo_reg_user_production permission
|
|
44
|
+
# g_play_user has g_play_production permission
|
|
45
|
+
agl_group = Group.objects.get(name="agl")
|
|
46
|
+
agl_group.permissions.set(Permission.objects.all())
|
|
47
|
+
agl_group.save()
|
|
48
|
+
|
|
49
|
+
endo_reg_user_group = Group.objects.get(name="endo_reg_user")
|
|
50
|
+
_permission = Permission.objects.get(codename="endo_reg_production")
|
|
51
|
+
endo_reg_user_group.permissions.add(_permission)
|
|
52
|
+
endo_reg_user_group.save()
|
|
53
|
+
|
|
54
|
+
g_play_user_group = Group.objects.get(name="g_play_user")
|
|
55
|
+
_permission = Permission.objects.get(codename="g_play_production")
|
|
56
|
+
g_play_user_group.permissions.add(_permission)
|
|
57
|
+
g_play_user_group.save()
|
|
58
|
+
|
|
59
|
+
ukw_user_group = Group.objects.get(name="ukw_user")
|
|
60
|
+
_permission = Permission.objects.get(codename="ukw_production")
|
|
61
|
+
ukw_user_group.permissions.add(_permission)
|
|
62
|
+
ukw_user_group.save()
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# django command to register a new AI model
|
|
2
|
+
# expects path to model_meta.json file
|
|
3
|
+
# example model_meta: {
|
|
4
|
+
# "name": "multilabel_classification",
|
|
5
|
+
# "version": 0,
|
|
6
|
+
# "model_type": "multilabel_classification", # name of modeltype, is unique
|
|
7
|
+
# "labelset": "multilabel_classification", #labelset name, combination of name and version is unique
|
|
8
|
+
# "labelset_version": 0,
|
|
9
|
+
# "weights_path": "weights/multilabel_classification_0.pth", # path to weights file
|
|
10
|
+
#}
|
|
11
|
+
|
|
12
|
+
from django.core.management.base import BaseCommand
|
|
13
|
+
from django.core.files import File
|
|
14
|
+
from endoreg_db.models import ModelMeta, ModelType, LabelSet
|
|
15
|
+
import json
|
|
16
|
+
from pathlib import Path
|
|
17
|
+
from icecream import ic
|
|
18
|
+
|
|
19
|
+
class Command(BaseCommand):
|
|
20
|
+
"""
|
|
21
|
+
Registers a new AI model in the database.
|
|
22
|
+
"""
|
|
23
|
+
help = 'Registers a new AI model in the database.'
|
|
24
|
+
|
|
25
|
+
def add_arguments(self, parser):
|
|
26
|
+
parser.add_argument('model_meta_path', type=str)
|
|
27
|
+
|
|
28
|
+
def handle(self, *args, **options):
|
|
29
|
+
model_meta_path = Path(options['model_meta_path']).resolve()
|
|
30
|
+
|
|
31
|
+
with open(model_meta_path, 'r') as f:
|
|
32
|
+
model_meta = json.load(f)
|
|
33
|
+
|
|
34
|
+
# get or create model type
|
|
35
|
+
model_type = ModelType.objects.get(name=model_meta['model_type'])
|
|
36
|
+
|
|
37
|
+
# get or create labelset
|
|
38
|
+
labelset = LabelSet.objects.get(name=model_meta['labelset'], version=model_meta['labelset_version'])
|
|
39
|
+
|
|
40
|
+
# Handle weights file
|
|
41
|
+
weights_path = model_meta['weights_path']
|
|
42
|
+
# weights path is realative to model_meta_path
|
|
43
|
+
weights_path = model_meta_path.parent / weights_path
|
|
44
|
+
|
|
45
|
+
assert weights_path.exists(), f"weights file at {weights_path} does not exist"
|
|
46
|
+
|
|
47
|
+
# Make sure the path is correct and the file exists
|
|
48
|
+
try:
|
|
49
|
+
with open(weights_path, 'rb') as file:
|
|
50
|
+
model_name_string = f"{model_meta['name']}_{model_meta['version']}"
|
|
51
|
+
weights = File(file, name = model_name_string)
|
|
52
|
+
# Create ModelMeta instance
|
|
53
|
+
model_meta_instance = ModelMeta.objects.create(
|
|
54
|
+
name=model_meta['name'],
|
|
55
|
+
version=model_meta['version'],
|
|
56
|
+
type=model_type,
|
|
57
|
+
labelset=labelset,
|
|
58
|
+
weights=weights,
|
|
59
|
+
description=model_meta.get('description', '') # Assuming description is optional
|
|
60
|
+
)
|
|
61
|
+
print(f"Successfully registered model {model_meta_instance}")
|
|
62
|
+
except IOError:
|
|
63
|
+
print(f"Failed to open weights file at {weights_path}. Make sure the file exists.")
|
|
64
|
+
|
|
65
|
+
|