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.
Files changed (347) hide show
  1. endoreg_db/admin.py +3 -3
  2. endoreg_db/apps.py +6 -6
  3. endoreg_db/data/__init__.py +67 -64
  4. endoreg_db/data/active_model/data.yaml +2 -2
  5. endoreg_db/data/case_template/rule/00_patient_lab_sample_add_default_value.yaml +167 -167
  6. endoreg_db/data/case_template/rule/01_patient-set-age.yaml +7 -7
  7. endoreg_db/data/case_template/rule/01_patient-set-gender.yaml +8 -8
  8. endoreg_db/data/case_template/rule/11_create_patient_lab_sample.yaml +22 -22
  9. endoreg_db/data/case_template/rule/12_create-patient_medication-anticoagulation.yaml +18 -18
  10. endoreg_db/data/case_template/rule/13_create-patient_medication_schedule-anticoagulation.yaml +18 -18
  11. endoreg_db/data/case_template/rule/19_create_patient.yaml +16 -16
  12. endoreg_db/data/case_template/rule_type/base_types.yaml +35 -35
  13. endoreg_db/data/case_template/rule_value_type/base_types.yaml +58 -58
  14. endoreg_db/data/case_template/template/base.yaml +7 -7
  15. endoreg_db/data/case_template/template_type/pre_endoscopy.yaml +2 -2
  16. endoreg_db/data/case_template/tmp/_rule_value +13 -13
  17. endoreg_db/data/case_template/tmp/rule/01_atrial_fibrillation.yaml +21 -21
  18. endoreg_db/data/case_template/tmp/rule/02_create_object.yaml +9 -9
  19. endoreg_db/data/case_template/tmp/template/atrial_fibrillation_low_risk.yaml +6 -6
  20. endoreg_db/data/center/data.yaml +59 -59
  21. endoreg_db/data/center_resource/green_endoscopy_dashboard_CenterResource.yaml +144 -144
  22. endoreg_db/data/center_waste/green_endoscopy_dashboard_CenterWaste.yaml +48 -48
  23. endoreg_db/data/disease/cardiovascular.yaml +37 -37
  24. endoreg_db/data/disease/hepatology.yaml +4 -4
  25. endoreg_db/data/disease/misc.yaml +5 -5
  26. endoreg_db/data/disease/renal.yaml +4 -4
  27. endoreg_db/data/disease_classification/chronic_kidney_disease.yaml +5 -5
  28. endoreg_db/data/disease_classification/coronary_vessel_disease.yaml +5 -5
  29. endoreg_db/data/disease_classification_choice/chronic_kidney_disease.yaml +40 -40
  30. endoreg_db/data/disease_classification_choice/coronary_vessel_disease.yaml +19 -19
  31. endoreg_db/data/distribution/date/patient.yaml +6 -6
  32. endoreg_db/data/distribution/single_categorical/patient.yaml +6 -6
  33. endoreg_db/data/emission_factor/green_endoscopy_dashboard_EmissionFactor.yaml +132 -132
  34. endoreg_db/data/endoscope_type/data.yaml +10 -10
  35. endoreg_db/data/endoscopy_processor/data.yaml +45 -45
  36. endoreg_db/data/event/cardiology.yaml +27 -27
  37. endoreg_db/data/event/neurology.yaml +13 -13
  38. endoreg_db/data/event/surgery.yaml +12 -12
  39. endoreg_db/data/event/thrombembolism.yaml +19 -19
  40. endoreg_db/data/examination/examinations/data.yaml +65 -65
  41. endoreg_db/data/examination/time/data.yaml +47 -47
  42. endoreg_db/data/examination/time-type/data.yaml +7 -7
  43. endoreg_db/data/examination/type/data.yaml +5 -5
  44. endoreg_db/data/gender/data.yaml +18 -18
  45. endoreg_db/data/information_source/data.yaml +30 -30
  46. endoreg_db/data/information_source/medication.yaml +5 -5
  47. endoreg_db/data/lab_value/cardiac_enzymes.yaml +30 -30
  48. endoreg_db/data/lab_value/coagulation.yaml +48 -48
  49. endoreg_db/data/lab_value/electrolytes.yaml +189 -189
  50. endoreg_db/data/lab_value/gastrointestinal_function.yaml +121 -121
  51. endoreg_db/data/lab_value/hematology.yaml +169 -169
  52. endoreg_db/data/lab_value/hormones.yaml +53 -53
  53. endoreg_db/data/lab_value/lipids.yaml +44 -44
  54. endoreg_db/data/lab_value/misc.yaml +30 -30
  55. endoreg_db/data/lab_value/renal_function.yaml +10 -10
  56. endoreg_db/data/label/label/data.yaml +62 -62
  57. endoreg_db/data/label/label-set/data.yaml +17 -17
  58. endoreg_db/data/label/label-type/data.yaml +6 -6
  59. endoreg_db/data/medication/anticoagulation.yaml +64 -64
  60. endoreg_db/data/medication/tah.yaml +69 -69
  61. endoreg_db/data/medication_indication/anticoagulation.yaml +120 -120
  62. endoreg_db/data/medication_indication_type/data.yaml +10 -10
  63. endoreg_db/data/medication_indication_type/thrombembolism.yaml +40 -40
  64. endoreg_db/data/medication_intake_time/base.yaml +30 -30
  65. endoreg_db/data/medication_schedule/apixaban.yaml +94 -94
  66. endoreg_db/data/medication_schedule/ass.yaml +12 -12
  67. endoreg_db/data/medication_schedule/enoxaparin.yaml +26 -26
  68. endoreg_db/data/model_type/data.yaml +6 -6
  69. endoreg_db/data/network_device/data.yaml +17 -0
  70. endoreg_db/data/network_device_type/data.yaml +8 -0
  71. endoreg_db/data/patient_lab_sample_type/generic.yaml +5 -5
  72. endoreg_db/data/pdf_type/data.yaml +28 -28
  73. endoreg_db/data/product/green_endoscopy_dashboard_Product.yaml +66 -66
  74. endoreg_db/data/product_group/green_endoscopy_dashboard_ProductGroup.yaml +33 -33
  75. endoreg_db/data/product_material/green_endoscopy_dashboard_ProductMaterial.yaml +308 -308
  76. endoreg_db/data/product_weight/green_endoscopy_dashboard_ProductWeight.yaml +88 -88
  77. endoreg_db/data/profession/data.yaml +70 -70
  78. endoreg_db/data/reference_product/green_endoscopy_dashboard_ReferenceProduct.yaml +55 -55
  79. endoreg_db/data/report_reader_flag/ukw-examination-generic.yaml +26 -26
  80. endoreg_db/data/report_reader_flag/ukw-histology-generic.yaml +19 -19
  81. endoreg_db/data/resource/green_endoscopy_dashboard_Resource.yaml +15 -15
  82. endoreg_db/data/transport_route/green_endoscopy_dashboard_TransportRoute.yaml +12 -12
  83. endoreg_db/data/unit/concentration.yaml +92 -92
  84. endoreg_db/data/unit/data.yaml +17 -17
  85. endoreg_db/data/unit/length.yaml +30 -30
  86. endoreg_db/data/unit/misc.yaml +19 -19
  87. endoreg_db/data/unit/rate.yaml +5 -5
  88. endoreg_db/data/unit/time.yaml +12 -12
  89. endoreg_db/data/unit/volume.yaml +35 -35
  90. endoreg_db/data/unit/weight.yaml +37 -37
  91. endoreg_db/data/waste/data.yaml +11 -11
  92. endoreg_db/forms/__init__.py +2 -2
  93. endoreg_db/forms/questionnaires/tto_questionnaire.py +23 -23
  94. endoreg_db/forms/settings/__init__.py +8 -8
  95. endoreg_db/forms/unit.py +5 -5
  96. endoreg_db/management/commands/_load_model_template.py +40 -40
  97. endoreg_db/management/commands/delete_all.py +18 -18
  98. endoreg_db/management/commands/delete_legacy_images.py +19 -19
  99. endoreg_db/management/commands/delete_legacy_videos.py +16 -16
  100. endoreg_db/management/commands/extract_legacy_video_frames.py +18 -18
  101. endoreg_db/management/commands/fetch_legacy_image_dataset.py +32 -32
  102. endoreg_db/management/commands/fix_auth_permission.py +20 -20
  103. endoreg_db/management/commands/import_legacy_images.py +94 -94
  104. endoreg_db/management/commands/import_legacy_videos.py +76 -76
  105. endoreg_db/management/commands/load_active_model_data.py +44 -44
  106. endoreg_db/management/commands/load_ai_model_data.py +44 -44
  107. endoreg_db/management/commands/load_base_db_data.py +132 -128
  108. endoreg_db/management/commands/load_center_data.py +42 -42
  109. endoreg_db/management/commands/load_disease_classification_choices_data.py +40 -40
  110. endoreg_db/management/commands/load_disease_classification_data.py +40 -40
  111. endoreg_db/management/commands/load_disease_data.py +39 -39
  112. endoreg_db/management/commands/load_distribution_data.py +65 -65
  113. endoreg_db/management/commands/load_endoscope_type_data.py +44 -44
  114. endoreg_db/management/commands/load_endoscopy_processor_data.py +44 -44
  115. endoreg_db/management/commands/load_event_data.py +40 -40
  116. endoreg_db/management/commands/load_examination_data.py +74 -74
  117. endoreg_db/management/commands/load_g_play_data.py +112 -112
  118. endoreg_db/management/commands/load_gender_data.py +43 -43
  119. endoreg_db/management/commands/load_green_endoscopy_wuerzburg_data.py +132 -132
  120. endoreg_db/management/commands/load_information_source.py +44 -44
  121. endoreg_db/management/commands/load_lab_value_data.py +49 -49
  122. endoreg_db/management/commands/load_label_data.py +66 -66
  123. endoreg_db/management/commands/load_medication_data.py +40 -40
  124. endoreg_db/management/commands/load_medication_indication_data.py +62 -62
  125. endoreg_db/management/commands/load_medication_indication_type_data.py +40 -40
  126. endoreg_db/management/commands/load_medication_intake_time_data.py +40 -40
  127. endoreg_db/management/commands/load_medication_schedule_data.py +54 -54
  128. endoreg_db/management/commands/load_network_data.py +49 -0
  129. endoreg_db/management/commands/load_pdf_type_data.py +60 -60
  130. endoreg_db/management/commands/load_profession_data.py +43 -43
  131. endoreg_db/management/commands/load_report_reader_flag.py +45 -45
  132. endoreg_db/management/commands/load_unit_data.py +45 -45
  133. endoreg_db/management/commands/load_user_groups.py +28 -28
  134. endoreg_db/management/commands/register_ai_model.py +65 -65
  135. endoreg_db/management/commands/reset_celery_schedule.py +9 -9
  136. endoreg_db/migrations/0001_initial.py +582 -582
  137. endoreg_db/migrations/0002_rawvideofile.py +26 -26
  138. endoreg_db/migrations/0003_rawvideofile_frames_required.py +18 -18
  139. endoreg_db/migrations/0004_rename_hash_rawvideofile_video_hash.py +18 -18
  140. endoreg_db/migrations/0005_ffmpegmeta_remove_videoimportmeta_center_and_more.py +56 -56
  141. endoreg_db/migrations/0006_rawvideofile_center_alter_videometa_processor.py +25 -25
  142. endoreg_db/migrations/0007_rawvideofile_processor.py +19 -19
  143. endoreg_db/migrations/0008_rename_frames_required_rawvideofile_state_frames_required.py +18 -18
  144. endoreg_db/migrations/0009_sensitivemeta_rawvideofile_sensitive_meta.py +31 -31
  145. endoreg_db/migrations/0010_rename_endoscope_serial_number_sensitivemeta_endoscope_sn.py +18 -18
  146. endoreg_db/migrations/0011_rawvideofile_state_sensitive_data_retrieved.py +18 -18
  147. endoreg_db/migrations/0012_rawvideofile_prediction_dir_and_more.py +109 -109
  148. endoreg_db/migrations/0013_rawpdffile.py +31 -31
  149. endoreg_db/migrations/0014_pdftype_alter_rawpdffile_file_pdfmeta.py +38 -38
  150. endoreg_db/migrations/0015_rename_report_processed_rawpdffile_state_report_processed_and_more.py +31 -31
  151. endoreg_db/migrations/0016_rawpdffile_state_report_processing_required.py +18 -18
  152. endoreg_db/migrations/0017_firstname_lastname_center_first_names_and_more.py +37 -37
  153. endoreg_db/migrations/0018_reportreaderflag_reportreaderconfig.py +37 -37
  154. endoreg_db/migrations/0019_pdftype_cut_off_above_lines_and_more.py +42 -42
  155. endoreg_db/migrations/0020_rename_endoscopy_info_line_pdftype_endoscope_info_line.py +18 -18
  156. endoreg_db/migrations/0021_alter_pdftype_endoscope_info_line.py +19 -19
  157. endoreg_db/migrations/0022_alter_pdftype_endoscope_info_line.py +19 -19
  158. endoreg_db/migrations/0023_ttoquestionnaire_alter_pdftype_endoscope_info_line.py +59 -59
  159. endoreg_db/migrations/0024_remove_ttoquestionnaire_infections_and_more.py +27 -27
  160. endoreg_db/migrations/0025_event_alter_rawpdffile_file_patientevent.py +42 -42
  161. endoreg_db/migrations/0026_disease_diseaseclassification_and_more.py +166 -166
  162. endoreg_db/migrations/0027_labvalue_abbreviation_labvalue_default_normal_range_and_more.py +38 -38
  163. endoreg_db/migrations/0028_alter_unit_abbreviation.py +18 -18
  164. endoreg_db/migrations/0029_medicationintaketime_and_more.py +75 -75
  165. endoreg_db/migrations/0030_medicationindicationtype_and_more.py +101 -101
  166. endoreg_db/migrations/0031_rename_adapt_to_liver_function_medication_adapt_to_age_and_more.py +38 -38
  167. endoreg_db/migrations/0032_alter_medicationschedule_therapy_duration_d.py +18 -18
  168. endoreg_db/migrations/0033_medicationindication_sources.py +18 -18
  169. endoreg_db/migrations/0034_alter_rawpdffile_file.py +20 -20
  170. endoreg_db/migrations/0035_alter_medicationindication_sources.py +18 -18
  171. endoreg_db/migrations/0036_alter_rawpdffile_file.py +20 -20
  172. endoreg_db/migrations/0037_alter_medicationindication_sources.py +18 -18
  173. endoreg_db/migrations/0038_emissionfactor_material_product_productgroup_and_more.py +164 -164
  174. endoreg_db/migrations/0039_referenceproduct_name.py +19 -19
  175. endoreg_db/migrations/0040_quizanswertype_quizquestiontype_quizquestion_and_more.py +50 -50
  176. endoreg_db/migrations/0041_gender_patientmedication_medication_indication_and_more.py +40 -40
  177. endoreg_db/migrations/0042_casetemplateruletype_casetemplaterulevalue_and_more.py +74 -74
  178. endoreg_db/migrations/0043_casetemplatetype_name_de_casetemplatetype_name_en.py +23 -23
  179. endoreg_db/migrations/0044_casetemplateruletype_name_de_and_more.py +23 -23
  180. endoreg_db/migrations/0045_casetemplaterulevalue_value_type.py +19 -19
  181. endoreg_db/migrations/0046_casetemplaterulevalue_target_field.py +18 -18
  182. endoreg_db/migrations/0047_casetemplaterule_target_model.py +18 -18
  183. endoreg_db/migrations/0048_remove_casetemplaterule_chained_rules_and_more.py +22 -22
  184. endoreg_db/migrations/0049_remove_casetemplaterule_rule_values.py +17 -17
  185. endoreg_db/migrations/0050_casetemplaterule_rule_values.py +18 -18
  186. endoreg_db/migrations/0051_remove_casetemplaterule_calling_rules_and_more.py +27 -27
  187. endoreg_db/migrations/0052_rename_case_template_type_casetemplate_template_type.py +18 -18
  188. endoreg_db/migrations/0053_patientlabsampletype_patientlabsample_and_more.py +38 -38
  189. endoreg_db/migrations/0054_multiplecategoricalvaluedistribution_and_more.py +69 -69
  190. endoreg_db/migrations/0055_remove_casetemplaterule_rule_values_and_more.py +59 -59
  191. endoreg_db/migrations/0056_datevaluedistribution_and_more.py +32 -32
  192. endoreg_db/migrations/0057_remove_datevaluedistribution_max_date_and_more.py +72 -72
  193. endoreg_db/migrations/0058_datevaluedistribution_description_and_more.py +28 -28
  194. endoreg_db/migrations/0059_casetemplaterule_rule_values.py +18 -18
  195. endoreg_db/migrations/0060_labvalue__default_date_value_distribution_and_more.py +44 -44
  196. endoreg_db/migrations/0061_remove_patientlabvalue_date_patientlabvalue_datetime.py +24 -24
  197. endoreg_db/migrations/0062_labvalue_numeric_precision.py +18 -18
  198. endoreg_db/migrations/0063_alter_labvalue_numeric_precision.py +18 -18
  199. endoreg_db/migrations/0064_casetemplaterule_extra_parameters_and_more.py +23 -23
  200. endoreg_db/migrations/0065_rename__date_value_distribution_casetemplaterule_date_value_distribution_and_more.py +58 -58
  201. endoreg_db/migrations/0066_alter_patientlabvalue_patient_and_more.py +29 -29
  202. endoreg_db/migrations/0067_alter_medicationindication_indication_type.py +19 -19
  203. endoreg_db/models/__init__.py +75 -74
  204. endoreg_db/models/ai_model/__init__.py +3 -3
  205. endoreg_db/models/ai_model/active_model.py +9 -9
  206. endoreg_db/models/ai_model/model_meta.py +24 -24
  207. endoreg_db/models/ai_model/model_type.py +25 -25
  208. endoreg_db/models/ai_model/utils.py +8 -8
  209. endoreg_db/models/annotation/__init__.py +1 -1
  210. endoreg_db/models/annotation/binary_classification_annotation_task.py +80 -80
  211. endoreg_db/models/annotation/image_classification.py +26 -26
  212. endoreg_db/models/case_template/__init__.py +5 -5
  213. endoreg_db/models/case_template/case_template.py +81 -81
  214. endoreg_db/models/case_template/case_template_rule.py +276 -276
  215. endoreg_db/models/case_template/case_template_rule_value.py +73 -73
  216. endoreg_db/models/case_template/case_template_type.py +27 -27
  217. endoreg_db/models/center/__init__.py +4 -4
  218. endoreg_db/models/center/center.py +24 -24
  219. endoreg_db/models/center/center_product.py +33 -33
  220. endoreg_db/models/center/center_resource.py +18 -18
  221. endoreg_db/models/center/center_waste.py +10 -10
  222. endoreg_db/models/data_file/__init__.py +5 -5
  223. endoreg_db/models/data_file/base_classes/__init__.py +2 -2
  224. endoreg_db/models/data_file/base_classes/abstract_frame.py +50 -50
  225. endoreg_db/models/data_file/base_classes/abstract_video.py +200 -200
  226. endoreg_db/models/data_file/frame.py +45 -45
  227. endoreg_db/models/data_file/import_classes/__init__.py +31 -31
  228. endoreg_db/models/data_file/import_classes/processing_functions/__init__.py +34 -34
  229. endoreg_db/models/data_file/import_classes/processing_functions/pdf.py +28 -28
  230. endoreg_db/models/data_file/import_classes/processing_functions/video.py +260 -260
  231. endoreg_db/models/data_file/import_classes/raw_pdf.py +188 -188
  232. endoreg_db/models/data_file/import_classes/raw_video.py +343 -343
  233. endoreg_db/models/data_file/metadata/__init__.py +3 -3
  234. endoreg_db/models/data_file/metadata/pdf_meta.py +70 -70
  235. endoreg_db/models/data_file/metadata/sensitive_meta.py +31 -31
  236. endoreg_db/models/data_file/metadata/video_meta.py +132 -132
  237. endoreg_db/models/data_file/report_file.py +89 -89
  238. endoreg_db/models/data_file/video/__init__.py +6 -6
  239. endoreg_db/models/data_file/video/import_meta.py +25 -25
  240. endoreg_db/models/data_file/video/video.py +25 -25
  241. endoreg_db/models/data_file/video_segment.py +107 -107
  242. endoreg_db/models/disease.py +55 -55
  243. endoreg_db/models/emission/emission_factor.py +19 -19
  244. endoreg_db/models/event.py +21 -21
  245. endoreg_db/models/examination/__init__.py +3 -3
  246. endoreg_db/models/examination/examination.py +26 -26
  247. endoreg_db/models/examination/examination_time.py +27 -27
  248. endoreg_db/models/examination/examination_time_type.py +24 -24
  249. endoreg_db/models/examination/examination_type.py +18 -18
  250. endoreg_db/models/hardware/__init__.py +1 -1
  251. endoreg_db/models/hardware/endoscope.py +44 -44
  252. endoreg_db/models/hardware/endoscopy_processor.py +143 -143
  253. endoreg_db/models/information_source.py +29 -29
  254. endoreg_db/models/label/label.py +84 -84
  255. endoreg_db/models/laboratory/lab_value.py +102 -102
  256. endoreg_db/models/legacy_data/__init__.py +3 -3
  257. endoreg_db/models/legacy_data/image.py +34 -34
  258. endoreg_db/models/medication/medication.py +148 -148
  259. endoreg_db/models/network/__init__.py +2 -0
  260. endoreg_db/models/network/network_device.py +27 -0
  261. endoreg_db/models/network/network_device_type.py +23 -0
  262. endoreg_db/models/other/__init__.py +4 -4
  263. endoreg_db/models/other/distribution.py +215 -215
  264. endoreg_db/models/other/material.py +16 -16
  265. endoreg_db/models/other/resource.py +17 -17
  266. endoreg_db/models/other/transport_route.py +20 -20
  267. endoreg_db/models/other/waste.py +20 -20
  268. endoreg_db/models/patient_examination/__init__.py +35 -35
  269. endoreg_db/models/permissions/__init__.py +44 -44
  270. endoreg_db/models/persons/__init__.py +6 -6
  271. endoreg_db/models/persons/examiner/__init__.py +1 -1
  272. endoreg_db/models/persons/examiner/examiner.py +15 -15
  273. endoreg_db/models/persons/examiner/examiner_type.py +1 -1
  274. endoreg_db/models/persons/first_name.py +17 -17
  275. endoreg_db/models/persons/gender.py +22 -22
  276. endoreg_db/models/persons/last_name.py +19 -19
  277. endoreg_db/models/persons/patient/__init__.py +7 -7
  278. endoreg_db/models/persons/patient/case/case.py +30 -30
  279. endoreg_db/models/persons/patient/patient.py +216 -216
  280. endoreg_db/models/persons/patient/patient_disease.py +16 -16
  281. endoreg_db/models/persons/patient/patient_event.py +22 -22
  282. endoreg_db/models/persons/patient/patient_lab_sample.py +106 -106
  283. endoreg_db/models/persons/patient/patient_lab_value.py +176 -176
  284. endoreg_db/models/persons/patient/patient_medication.py +43 -43
  285. endoreg_db/models/persons/patient/patient_medication_schedule.py +27 -27
  286. endoreg_db/models/persons/person.py +31 -31
  287. endoreg_db/models/persons/portal_user_information.py +27 -27
  288. endoreg_db/models/prediction/__init__.py +1 -1
  289. endoreg_db/models/prediction/image_classification.py +37 -37
  290. endoreg_db/models/prediction/video_prediction_meta.py +244 -244
  291. endoreg_db/models/product/__init__.py +4 -4
  292. endoreg_db/models/product/product.py +97 -97
  293. endoreg_db/models/product/product_group.py +19 -19
  294. endoreg_db/models/product/product_material.py +24 -24
  295. endoreg_db/models/product/product_weight.py +26 -26
  296. endoreg_db/models/product/reference_product.py +99 -99
  297. endoreg_db/models/questionnaires/__init__.py +114 -114
  298. endoreg_db/models/quiz/__init__.py +1 -1
  299. endoreg_db/models/quiz/quiz_answer.py +41 -41
  300. endoreg_db/models/quiz/quiz_question.py +54 -54
  301. endoreg_db/models/report_reader/__init__.py +1 -1
  302. endoreg_db/models/report_reader/report_reader_config.py +53 -53
  303. endoreg_db/models/report_reader/report_reader_flag.py +19 -19
  304. endoreg_db/models/rules/__init__.py +4 -4
  305. endoreg_db/models/rules/rule.py +23 -23
  306. endoreg_db/models/rules/rule_applicator.py +224 -224
  307. endoreg_db/models/rules/rule_attribute_dtype.py +18 -18
  308. endoreg_db/models/rules/rule_type.py +21 -21
  309. endoreg_db/models/rules/ruleset.py +19 -19
  310. endoreg_db/models/unit.py +21 -21
  311. endoreg_db/queries/__init__.py +4 -4
  312. endoreg_db/queries/annotations/__init__.py +2 -2
  313. endoreg_db/queries/annotations/legacy.py +159 -159
  314. endoreg_db/queries/get/__init__.py +5 -5
  315. endoreg_db/queries/get/center.py +42 -42
  316. endoreg_db/queries/get/model.py +13 -13
  317. endoreg_db/queries/get/patient.py +14 -14
  318. endoreg_db/queries/get/patient_examination.py +20 -20
  319. endoreg_db/queries/get/report_file.py +33 -33
  320. endoreg_db/queries/get/video.py +31 -31
  321. endoreg_db/serializers/__init__.py +9 -9
  322. endoreg_db/serializers/ai_model.py +18 -18
  323. endoreg_db/serializers/annotation.py +17 -17
  324. endoreg_db/serializers/center.py +11 -11
  325. endoreg_db/serializers/examination.py +32 -32
  326. endoreg_db/serializers/frame.py +13 -13
  327. endoreg_db/serializers/hardware.py +20 -20
  328. endoreg_db/serializers/label.py +22 -22
  329. endoreg_db/serializers/patient.py +10 -10
  330. endoreg_db/serializers/prediction.py +15 -15
  331. endoreg_db/serializers/report_file.py +7 -7
  332. endoreg_db/serializers/video.py +27 -27
  333. endoreg_db/tests.py +3 -3
  334. endoreg_db/utils/cropping.py +28 -28
  335. endoreg_db/utils/dataloader.py +92 -92
  336. endoreg_db/utils/file_operations.py +30 -30
  337. endoreg_db/utils/hashs.py +33 -33
  338. endoreg_db/utils/legacy_ocr.py +201 -201
  339. endoreg_db/utils/ocr.py +197 -197
  340. endoreg_db/utils/uuid.py +4 -4
  341. endoreg_db/utils/video_metadata.py +87 -87
  342. endoreg_db/views.py +3 -3
  343. {endoreg_db-0.3.6.dist-info → endoreg_db-0.3.7.dist-info}/LICENSE +674 -674
  344. {endoreg_db-0.3.6.dist-info → endoreg_db-0.3.7.dist-info}/METADATA +2 -2
  345. endoreg_db-0.3.7.dist-info/RECORD +363 -0
  346. {endoreg_db-0.3.6.dist-info → endoreg_db-0.3.7.dist-info}/WHEEL +1 -1
  347. endoreg_db-0.3.6.dist-info/RECORD +0 -357
@@ -1,201 +1,201 @@
1
- # import cv2
2
- from PIL import Image
3
- from django.core.files.base import ContentFile
4
- from django.db import models, transaction
5
- from tqdm import tqdm
6
- # import cv2
7
- import io
8
- from datetime import date
9
-
10
- BATCH_SIZE = 1000
11
-
12
- class AbstractVideo(models.Model):
13
- file = models.FileField(upload_to="raw_videos", blank=True, null=True)
14
- video_hash = models.CharField(max_length=255, unique=True)
15
- patient = models.ForeignKey("Patient", on_delete=models.CASCADE, blank=True, null=True)
16
- date = models.DateField(blank=True, null=True)
17
- suffix = models.CharField(max_length=255)
18
- fps = models.FloatField()
19
- duration = models.FloatField()
20
- width = models.IntegerField()
21
- height = models.IntegerField()
22
- endoscope_image_x = models.IntegerField(blank=True, null=True)
23
- endoscope_image_y = models.IntegerField(blank=True, null=True)
24
- endoscope_image_width = models.IntegerField(blank=True, null=True)
25
- endoscope_image_height = models.IntegerField(blank=True, null=True)
26
- center = models.ForeignKey("Center", on_delete=models.CASCADE, blank=True, null=True)
27
- endoscopy_processor = models.ForeignKey("EndoscopyProcessor", on_delete=models.CASCADE, blank=True, null=True)
28
- frames_extracted = models.BooleanField(default=False)
29
-
30
- meta = models.JSONField(blank=True, null=True)
31
-
32
- class Meta:
33
- abstract = True
34
-
35
- def get_roi_endoscope_image(self):
36
- return {
37
- 'x': self.endoscope_image_content_x,
38
- 'y': self.endoscope_image_content_y,
39
- 'width': self.endoscope_image_content_width,
40
- 'height': self.endoscope_image_content_height,
41
- }
42
-
43
- def initialize_metadata_in_db(self, video_meta=None):
44
- if not video_meta:
45
- video_meta = self.meta
46
- self.set_examination_date_from_video_meta(video_meta)
47
- self.patient, created = self.get_or_create_patient(video_meta)
48
- self.save()
49
-
50
- def get_or_create_patient(self, video_meta=None):
51
- from ...persons import Patient
52
- if not video_meta:
53
- video_meta = self.meta
54
-
55
- patient_first_name = video_meta['patient_first_name']
56
- patient_last_name = video_meta['patient_last_name']
57
- patient_dob = video_meta['patient_dob']
58
-
59
- # assert that we got all the necessary information
60
- assert patient_first_name and patient_last_name and patient_dob, "Missing patient information"
61
-
62
- patient, created = Patient.objects.get_or_create(
63
- first_name=patient_first_name,
64
- last_name=patient_last_name,
65
- dob=patient_dob
66
- )
67
-
68
- return patient, created
69
-
70
- def get_frame_model(self):
71
- assert 1 == 2, "This method should be overridden in derived classes"
72
-
73
- def get_video_model(self):
74
- assert 1 == 2, "This method should be overridden in derived classes"
75
-
76
- def get_frame_number(self):
77
- """
78
- Get the number of frames in the video.
79
- """
80
- frame_model = self.get_frame_model()
81
- framecount = frame_model.objects.filter(video=self).count()
82
- return framecount
83
-
84
- def set_frames_extracted(self, value:bool=True):
85
- self.frames_extracted = value
86
- self.save()
87
-
88
- def get_frames(self):
89
- """
90
- Retrieve all frames for this video in the correct order.
91
- """
92
- frame_model = self.get_frame_model()
93
- return frame_model.objects.filter(video=self).order_by('frame_number')
94
-
95
- def get_frame(self, frame_number):
96
- """
97
- Retrieve a specific frame for this video.
98
- """
99
- frame_model = self.get_frame_model()
100
- return frame_model.objects.get(video=self, frame_number=frame_number)
101
-
102
- def get_frame_range(self, start_frame_number:int, end_frame_number:int):
103
- """
104
- Expects numbers of start and stop frame.
105
- Returns all frames of this video within the given range in ascending order.
106
- """
107
- frame_model = self.get_frame_model()
108
- return frame_model.objects.filter(video=self, frame_number__gte=start_frame_number, frame_number__lte=end_frame_number).order_by('frame_number')
109
-
110
- def _create_frame_object(self, frame_number, image_file):
111
- frame_model = self.get_frame_model()
112
- frame = frame_model(
113
- video=self,
114
- frame_number=frame_number,
115
- suffix='jpg',
116
- )
117
- frame.image_file = image_file # Temporary store the file-like object
118
-
119
- return frame
120
-
121
- def _bulk_create_frames(self, frames_to_create):
122
- frame_model = self.get_frame_model()
123
- with transaction.atomic():
124
- frame_model.objects.bulk_create(frames_to_create)
125
-
126
- # After the DB operation, save the ImageField for each object
127
- for frame in frames_to_create:
128
- frame_name = f"video_{self.id}_frame_{str(frame.frame_number).zfill(7)}.jpg"
129
- frame.image.save(frame_name, frame.image_file)
130
-
131
- # Clear the list for the next batch
132
- frames_to_create = []
133
-
134
- def set_examination_date_from_video_meta(self, video_meta=None):
135
- if not video_meta:
136
- video_meta = self.meta
137
- date_str = video_meta['examination_date'] # e.g. 2020-01-01
138
- if date_str:
139
- self.date = date.fromisoformat(date_str)
140
- self.save()
141
-
142
- def extract_all_frames(self):
143
- """
144
- Extract all frames from the video and store them in the database.
145
- Uses Django's bulk_create for more efficient database operations.
146
- """
147
- # Open the video file
148
- video = cv2.VideoCapture(self.file.path)
149
-
150
- # Initialize video properties
151
- self.initialize_video_specs(video)
152
-
153
- # Prepare for batch operation
154
- frames_to_create = []
155
-
156
- # Extract frames
157
- for frame_number in tqdm(range(int(self.duration * self.fps))):
158
- # Read the frame
159
- success, image = video.read()
160
- if not success:
161
- break
162
-
163
- # Convert the numpy array to a PIL Image object
164
- pil_image = Image.fromarray(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
165
-
166
- # Save the PIL Image to a buffer
167
- buffer = io.BytesIO()
168
- pil_image.save(buffer, format='JPEG')
169
-
170
- # Create a file-like object from the byte data in the buffer
171
- image_file = ContentFile(buffer.getvalue())
172
-
173
- # Prepare Frame instance (don't save yet)
174
- frame = self._create_frame_object(frame_number, image_file)
175
- frames_to_create.append(frame)
176
-
177
- # Perform bulk create when reaching BATCH_SIZE
178
- if len(frames_to_create) >= BATCH_SIZE:
179
- self._bulk_create_frames(frames_to_create)
180
- frames_to_create = []
181
-
182
-
183
- # Handle remaining frames
184
- if frames_to_create:
185
- self._bulk_create_frames(frames_to_create)
186
- frames_to_create = []
187
-
188
- # Close the video file
189
- video.release()
190
- self.set_frames_extracted(True)
191
-
192
-
193
- def initialize_video_specs(self, video):
194
- """
195
- Initialize and save video metadata like framerate, dimensions, and duration.
196
- """
197
- self.fps = video.get(cv2.CAP_PROP_FPS)
198
- self.width = int(video.get(cv2.CAP_PROP_FRAME_WIDTH))
199
- self.height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))
200
- self.duration = video.get(cv2.CAP_PROP_FRAME_COUNT) / self.fps
1
+ # import cv2
2
+ from PIL import Image
3
+ from django.core.files.base import ContentFile
4
+ from django.db import models, transaction
5
+ from tqdm import tqdm
6
+ # import cv2
7
+ import io
8
+ from datetime import date
9
+
10
+ BATCH_SIZE = 1000
11
+
12
+ class AbstractVideo(models.Model):
13
+ file = models.FileField(upload_to="raw_videos", blank=True, null=True)
14
+ video_hash = models.CharField(max_length=255, unique=True)
15
+ patient = models.ForeignKey("Patient", on_delete=models.CASCADE, blank=True, null=True)
16
+ date = models.DateField(blank=True, null=True)
17
+ suffix = models.CharField(max_length=255)
18
+ fps = models.FloatField()
19
+ duration = models.FloatField()
20
+ width = models.IntegerField()
21
+ height = models.IntegerField()
22
+ endoscope_image_x = models.IntegerField(blank=True, null=True)
23
+ endoscope_image_y = models.IntegerField(blank=True, null=True)
24
+ endoscope_image_width = models.IntegerField(blank=True, null=True)
25
+ endoscope_image_height = models.IntegerField(blank=True, null=True)
26
+ center = models.ForeignKey("Center", on_delete=models.CASCADE, blank=True, null=True)
27
+ endoscopy_processor = models.ForeignKey("EndoscopyProcessor", on_delete=models.CASCADE, blank=True, null=True)
28
+ frames_extracted = models.BooleanField(default=False)
29
+
30
+ meta = models.JSONField(blank=True, null=True)
31
+
32
+ class Meta:
33
+ abstract = True
34
+
35
+ def get_roi_endoscope_image(self):
36
+ return {
37
+ 'x': self.endoscope_image_content_x,
38
+ 'y': self.endoscope_image_content_y,
39
+ 'width': self.endoscope_image_content_width,
40
+ 'height': self.endoscope_image_content_height,
41
+ }
42
+
43
+ def initialize_metadata_in_db(self, video_meta=None):
44
+ if not video_meta:
45
+ video_meta = self.meta
46
+ self.set_examination_date_from_video_meta(video_meta)
47
+ self.patient, created = self.get_or_create_patient(video_meta)
48
+ self.save()
49
+
50
+ def get_or_create_patient(self, video_meta=None):
51
+ from ...persons import Patient
52
+ if not video_meta:
53
+ video_meta = self.meta
54
+
55
+ patient_first_name = video_meta['patient_first_name']
56
+ patient_last_name = video_meta['patient_last_name']
57
+ patient_dob = video_meta['patient_dob']
58
+
59
+ # assert that we got all the necessary information
60
+ assert patient_first_name and patient_last_name and patient_dob, "Missing patient information"
61
+
62
+ patient, created = Patient.objects.get_or_create(
63
+ first_name=patient_first_name,
64
+ last_name=patient_last_name,
65
+ dob=patient_dob
66
+ )
67
+
68
+ return patient, created
69
+
70
+ def get_frame_model(self):
71
+ assert 1 == 2, "This method should be overridden in derived classes"
72
+
73
+ def get_video_model(self):
74
+ assert 1 == 2, "This method should be overridden in derived classes"
75
+
76
+ def get_frame_number(self):
77
+ """
78
+ Get the number of frames in the video.
79
+ """
80
+ frame_model = self.get_frame_model()
81
+ framecount = frame_model.objects.filter(video=self).count()
82
+ return framecount
83
+
84
+ def set_frames_extracted(self, value:bool=True):
85
+ self.frames_extracted = value
86
+ self.save()
87
+
88
+ def get_frames(self):
89
+ """
90
+ Retrieve all frames for this video in the correct order.
91
+ """
92
+ frame_model = self.get_frame_model()
93
+ return frame_model.objects.filter(video=self).order_by('frame_number')
94
+
95
+ def get_frame(self, frame_number):
96
+ """
97
+ Retrieve a specific frame for this video.
98
+ """
99
+ frame_model = self.get_frame_model()
100
+ return frame_model.objects.get(video=self, frame_number=frame_number)
101
+
102
+ def get_frame_range(self, start_frame_number:int, end_frame_number:int):
103
+ """
104
+ Expects numbers of start and stop frame.
105
+ Returns all frames of this video within the given range in ascending order.
106
+ """
107
+ frame_model = self.get_frame_model()
108
+ return frame_model.objects.filter(video=self, frame_number__gte=start_frame_number, frame_number__lte=end_frame_number).order_by('frame_number')
109
+
110
+ def _create_frame_object(self, frame_number, image_file):
111
+ frame_model = self.get_frame_model()
112
+ frame = frame_model(
113
+ video=self,
114
+ frame_number=frame_number,
115
+ suffix='jpg',
116
+ )
117
+ frame.image_file = image_file # Temporary store the file-like object
118
+
119
+ return frame
120
+
121
+ def _bulk_create_frames(self, frames_to_create):
122
+ frame_model = self.get_frame_model()
123
+ with transaction.atomic():
124
+ frame_model.objects.bulk_create(frames_to_create)
125
+
126
+ # After the DB operation, save the ImageField for each object
127
+ for frame in frames_to_create:
128
+ frame_name = f"video_{self.id}_frame_{str(frame.frame_number).zfill(7)}.jpg"
129
+ frame.image.save(frame_name, frame.image_file)
130
+
131
+ # Clear the list for the next batch
132
+ frames_to_create = []
133
+
134
+ def set_examination_date_from_video_meta(self, video_meta=None):
135
+ if not video_meta:
136
+ video_meta = self.meta
137
+ date_str = video_meta['examination_date'] # e.g. 2020-01-01
138
+ if date_str:
139
+ self.date = date.fromisoformat(date_str)
140
+ self.save()
141
+
142
+ def extract_all_frames(self):
143
+ """
144
+ Extract all frames from the video and store them in the database.
145
+ Uses Django's bulk_create for more efficient database operations.
146
+ """
147
+ # Open the video file
148
+ video = cv2.VideoCapture(self.file.path)
149
+
150
+ # Initialize video properties
151
+ self.initialize_video_specs(video)
152
+
153
+ # Prepare for batch operation
154
+ frames_to_create = []
155
+
156
+ # Extract frames
157
+ for frame_number in tqdm(range(int(self.duration * self.fps))):
158
+ # Read the frame
159
+ success, image = video.read()
160
+ if not success:
161
+ break
162
+
163
+ # Convert the numpy array to a PIL Image object
164
+ pil_image = Image.fromarray(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
165
+
166
+ # Save the PIL Image to a buffer
167
+ buffer = io.BytesIO()
168
+ pil_image.save(buffer, format='JPEG')
169
+
170
+ # Create a file-like object from the byte data in the buffer
171
+ image_file = ContentFile(buffer.getvalue())
172
+
173
+ # Prepare Frame instance (don't save yet)
174
+ frame = self._create_frame_object(frame_number, image_file)
175
+ frames_to_create.append(frame)
176
+
177
+ # Perform bulk create when reaching BATCH_SIZE
178
+ if len(frames_to_create) >= BATCH_SIZE:
179
+ self._bulk_create_frames(frames_to_create)
180
+ frames_to_create = []
181
+
182
+
183
+ # Handle remaining frames
184
+ if frames_to_create:
185
+ self._bulk_create_frames(frames_to_create)
186
+ frames_to_create = []
187
+
188
+ # Close the video file
189
+ video.release()
190
+ self.set_frames_extracted(True)
191
+
192
+
193
+ def initialize_video_specs(self, video):
194
+ """
195
+ Initialize and save video metadata like framerate, dimensions, and duration.
196
+ """
197
+ self.fps = video.get(cv2.CAP_PROP_FPS)
198
+ self.width = int(video.get(cv2.CAP_PROP_FRAME_WIDTH))
199
+ self.height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))
200
+ self.duration = video.get(cv2.CAP_PROP_FRAME_COUNT) / self.fps
201
201
  self.save()
@@ -1,45 +1,45 @@
1
- from endoreg_db.models.annotation.image_classification import ImageClassificationAnnotation
2
- from endoreg_db.models.label.label import Label
3
- from .base_classes import AbstractFrame
4
- from django.db import models
5
-
6
- class Frame(AbstractFrame):
7
- video = models.ForeignKey("Video", on_delete=models.CASCADE, related_name="frames")
8
-
9
- class LegacyFrame(AbstractFrame):
10
- video = models.ForeignKey("LegacyVideo", on_delete=models.CASCADE, related_name='frames')
11
- image = models.ImageField(upload_to="legacy_frames", blank=True, null=True)
12
- suffix = models.CharField(max_length=255)
13
- # ImageClassificationAnnotation has a foreign key to this model (related name: image_classification_annotations)
14
-
15
- class Meta:
16
- unique_together = ('video', 'frame_number')
17
- indexes = [
18
- models.Index(fields=['video', 'frame_number']),
19
- ]
20
-
21
- def get_classification_annotations(self):
22
- """
23
- Get all image classification annotations for this frame.
24
- """
25
- return ImageClassificationAnnotation.objects.filter(legacy_frame=self)
26
-
27
- def get_classification_annotations_by_label(self, label:Label):
28
- """
29
- Get all image classification annotations for this frame with the given label.
30
- """
31
- return ImageClassificationAnnotation.objects.filter(legacy_frame=self, label=label)
32
-
33
- def get_classification_annotations_by_value(self, value:bool):
34
- """
35
- Get all image classification annotations for this frame with the given value.
36
- """
37
- return ImageClassificationAnnotation.objects.filter(legacy_frame=self, value=value)
38
-
39
- def get_classification_annotations_by_label_and_value(self, label:Label, value:bool):
40
- """
41
- Get all image classification annotations for this frame with the given label and value.
42
- """
43
- return ImageClassificationAnnotation.objects.filter(legacy_frame=self, label=label, value=value)
44
-
45
-
1
+ from endoreg_db.models.annotation.image_classification import ImageClassificationAnnotation
2
+ from endoreg_db.models.label.label import Label
3
+ from .base_classes import AbstractFrame
4
+ from django.db import models
5
+
6
+ class Frame(AbstractFrame):
7
+ video = models.ForeignKey("Video", on_delete=models.CASCADE, related_name="frames")
8
+
9
+ class LegacyFrame(AbstractFrame):
10
+ video = models.ForeignKey("LegacyVideo", on_delete=models.CASCADE, related_name='frames')
11
+ image = models.ImageField(upload_to="legacy_frames", blank=True, null=True)
12
+ suffix = models.CharField(max_length=255)
13
+ # ImageClassificationAnnotation has a foreign key to this model (related name: image_classification_annotations)
14
+
15
+ class Meta:
16
+ unique_together = ('video', 'frame_number')
17
+ indexes = [
18
+ models.Index(fields=['video', 'frame_number']),
19
+ ]
20
+
21
+ def get_classification_annotations(self):
22
+ """
23
+ Get all image classification annotations for this frame.
24
+ """
25
+ return ImageClassificationAnnotation.objects.filter(legacy_frame=self)
26
+
27
+ def get_classification_annotations_by_label(self, label:Label):
28
+ """
29
+ Get all image classification annotations for this frame with the given label.
30
+ """
31
+ return ImageClassificationAnnotation.objects.filter(legacy_frame=self, label=label)
32
+
33
+ def get_classification_annotations_by_value(self, value:bool):
34
+ """
35
+ Get all image classification annotations for this frame with the given value.
36
+ """
37
+ return ImageClassificationAnnotation.objects.filter(legacy_frame=self, value=value)
38
+
39
+ def get_classification_annotations_by_label_and_value(self, label:Label, value:bool):
40
+ """
41
+ Get all image classification annotations for this frame with the given label and value.
42
+ """
43
+ return ImageClassificationAnnotation.objects.filter(legacy_frame=self, label=label, value=value)
44
+
45
+
@@ -1,32 +1,32 @@
1
- import os
2
- from pathlib import Path
3
-
4
- from .raw_video import RawVideoFile
5
- from .raw_pdf import RawPdfFile
6
-
7
- # FileImporter class
8
- # This class is used to import data from a file into the database.
9
- # Expects a directory containing files to import.
10
- # creates correct import file object depending on file type
11
-
12
- # FileImporter class
13
- # This class is used to import data from a file into the database by creating objects for the files.
14
- # main method is import_files which expects a path to a directory containing files to import.
15
- # creates correct import file object depending on file type by checking the file extension
16
-
17
- class FileImporter:
18
- def __init__(self, directory):
19
- self.directory = directory
20
-
21
- def import_files(self):
22
- directory_path = Path(self.directory)
23
- for file in directory_path.iterdir():
24
- if file.is_file():
25
- if file.suffix.lower() in ['.mov', '.mp4']:
26
- RawVideoFile.create_from_file(file)
27
- else:
28
- raise ValueError(f"File type {file.suffix} not supported")
29
- else:
30
- raise ValueError(f"{file} is not a file")
31
-
1
+ import os
2
+ from pathlib import Path
3
+
4
+ from .raw_video import RawVideoFile
5
+ from .raw_pdf import RawPdfFile
6
+
7
+ # FileImporter class
8
+ # This class is used to import data from a file into the database.
9
+ # Expects a directory containing files to import.
10
+ # creates correct import file object depending on file type
11
+
12
+ # FileImporter class
13
+ # This class is used to import data from a file into the database by creating objects for the files.
14
+ # main method is import_files which expects a path to a directory containing files to import.
15
+ # creates correct import file object depending on file type by checking the file extension
16
+
17
+ class FileImporter:
18
+ def __init__(self, directory):
19
+ self.directory = directory
20
+
21
+ def import_files(self):
22
+ directory_path = Path(self.directory)
23
+ for file in directory_path.iterdir():
24
+ if file.is_file():
25
+ if file.suffix.lower() in ['.mov', '.mp4']:
26
+ RawVideoFile.create_from_file(file)
27
+ else:
28
+ raise ValueError(f"File type {file.suffix} not supported")
29
+ else:
30
+ raise ValueError(f"{file} is not a file")
31
+
32
32
 
@@ -1,35 +1,35 @@
1
- from .video import (
2
- get_videos_scheduled_for_frame_extraction,
3
- extract_frames_from_video,
4
- extract_frames_from_videos,
5
-
6
- get_videos_scheduled_for_ocr,
7
- videos_scheduled_for_ocr_preflight,
8
- perform_ocr_on_video,
9
- perform_ocr_on_videos,
10
-
11
- videos_scheduled_for_initial_prediction_preflight,
12
- get_videos_scheduled_for_initial_prediction,
13
- get_multilabel_model,
14
- get_multilabel_classifier,
15
- get_crops,
16
- perform_initial_prediction_on_video,
17
- perform_initial_prediction_on_videos,
18
-
19
- videos_scheduled_for_prediction_import_preflight,
20
- get_videos_scheduled_for_prediction_import,
21
- import_predictions_for_video,
22
- import_predictions_for_videos,
23
-
24
-
25
- delete_frames_preflight,
26
- get_videos_scheduled_for_frame_deletion,
27
- delete_frames_for_video,
28
- delete_frames,
29
- )
30
-
31
- from .pdf import (
32
- get_pdf_files_scheduled_for_processing,
33
- process_pdf_file,
34
- process_pdf_files,
1
+ from .video import (
2
+ get_videos_scheduled_for_frame_extraction,
3
+ extract_frames_from_video,
4
+ extract_frames_from_videos,
5
+
6
+ get_videos_scheduled_for_ocr,
7
+ videos_scheduled_for_ocr_preflight,
8
+ perform_ocr_on_video,
9
+ perform_ocr_on_videos,
10
+
11
+ videos_scheduled_for_initial_prediction_preflight,
12
+ get_videos_scheduled_for_initial_prediction,
13
+ get_multilabel_model,
14
+ get_multilabel_classifier,
15
+ get_crops,
16
+ perform_initial_prediction_on_video,
17
+ perform_initial_prediction_on_videos,
18
+
19
+ videos_scheduled_for_prediction_import_preflight,
20
+ get_videos_scheduled_for_prediction_import,
21
+ import_predictions_for_video,
22
+ import_predictions_for_videos,
23
+
24
+
25
+ delete_frames_preflight,
26
+ get_videos_scheduled_for_frame_deletion,
27
+ delete_frames_for_video,
28
+ delete_frames,
29
+ )
30
+
31
+ from .pdf import (
32
+ get_pdf_files_scheduled_for_processing,
33
+ process_pdf_file,
34
+ process_pdf_files,
35
35
  )