endoreg-db 0.8.1__py3-none-any.whl → 0.8.2__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.

Files changed (37) hide show
  1. endoreg_db/helpers/download_segmentation_model.py +31 -0
  2. endoreg_db/models/media/video/pipe_1.py +13 -1
  3. endoreg_db/serializers/anonymization.py +3 -0
  4. endoreg_db/services/pdf_import.py +0 -30
  5. endoreg_db/services/video_import.py +301 -98
  6. endoreg_db/urls/__init__.py +0 -2
  7. endoreg_db/urls/media.py +201 -4
  8. endoreg_db/urls/report.py +0 -30
  9. endoreg_db/urls/video.py +30 -88
  10. endoreg_db/views/anonymization/validate.py +5 -2
  11. endoreg_db/views/media/__init__.py +38 -2
  12. endoreg_db/views/media/pdf_media.py +1 -1
  13. endoreg_db/views/media/segments.py +71 -0
  14. endoreg_db/views/media/sensitive_metadata.py +314 -0
  15. endoreg_db/views/media/video_segments.py +596 -0
  16. endoreg_db/views/pdf/reimport.py +18 -8
  17. endoreg_db/views/video/__init__.py +0 -8
  18. endoreg_db/views/video/correction.py +26 -26
  19. endoreg_db/views/video/reimport.py +15 -12
  20. endoreg_db/views/video/video_stream.py +168 -50
  21. {endoreg_db-0.8.1.dist-info → endoreg_db-0.8.2.dist-info}/METADATA +2 -2
  22. {endoreg_db-0.8.1.dist-info → endoreg_db-0.8.2.dist-info}/RECORD +34 -33
  23. endoreg_db/urls/pdf.py +0 -0
  24. endoreg_db/urls/sensitive_meta.py +0 -36
  25. endoreg_db/views/video/media/__init__.py +0 -23
  26. /endoreg_db/views/video/{media/task_status.py → task_status.py} +0 -0
  27. /endoreg_db/views/video/{media/video_analyze.py → video_analyze.py} +0 -0
  28. /endoreg_db/views/video/{media/video_apply_mask.py → video_apply_mask.py} +0 -0
  29. /endoreg_db/views/video/{media/video_correction.py → video_correction.py} +0 -0
  30. /endoreg_db/views/video/{media/video_download_processed.py → video_download_processed.py} +0 -0
  31. /endoreg_db/views/video/{media/video_media.py → video_media.py} +0 -0
  32. /endoreg_db/views/video/{media/video_meta.py → video_meta.py} +0 -0
  33. /endoreg_db/views/video/{media/video_processing_history.py → video_processing_history.py} +0 -0
  34. /endoreg_db/views/video/{media/video_remove_frames.py → video_remove_frames.py} +0 -0
  35. /endoreg_db/views/video/{media/video_reprocess.py → video_reprocess.py} +0 -0
  36. {endoreg_db-0.8.1.dist-info → endoreg_db-0.8.2.dist-info}/WHEEL +0 -0
  37. {endoreg_db-0.8.1.dist-info → endoreg_db-0.8.2.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,31 @@
1
+ import huggingface_hub
2
+ from typing import Optional
3
+
4
+ def download_segmentation_model(
5
+ repo_id: str = "wg-lux/colo_segmentation_RegNetX800MF_base",
6
+ filename: str = "model.safetensors",
7
+ cache_dir: Optional[str] = None
8
+ ) -> str:
9
+ """
10
+ Downloads a segmentation model from Hugging Face and caches it locally.
11
+
12
+ Args:
13
+ repo_id (str): The Hugging Face repository ID (default: wg-lux model).
14
+ filename (str): The specific file to download from the repo (default: model.safetensors).
15
+ cache_dir (str): The directory to cache the downloaded model. If None, uses HF default cache.
16
+
17
+ Returns:
18
+ str: The local path to the downloaded model.
19
+
20
+ Example:
21
+ >>> model_path = download_segmentation_model()
22
+ >>> # Downloads from wg-lux/colo_segmentation_RegNetX800MF_base
23
+ """
24
+ local_path = huggingface_hub.hf_hub_download(
25
+ repo_id=repo_id,
26
+ filename=filename,
27
+ cache_dir=cache_dir,
28
+ force_download=False,
29
+ resume_download=True,
30
+ )
31
+ return local_path
@@ -1,6 +1,7 @@
1
1
  import logging
2
2
  from typing import TYPE_CHECKING, Optional, Dict, List, Tuple
3
3
  from django.db import transaction
4
+ from endoreg_db.helpers.download_segmentation_model import download_segmentation_model
4
5
 
5
6
  # Added imports
6
7
 
@@ -50,6 +51,8 @@ def _pipe_1(
50
51
  if not state.frames_extracted:
51
52
  logger.error("Pipe 1 failed: Frame extraction did not complete successfully.")
52
53
  return False
54
+
55
+
53
56
 
54
57
  # 3. Perform Initial Prediction
55
58
  logger.info(f"Pipe 1: Performing prediction with model '{model_name}'...")
@@ -61,7 +64,16 @@ def _pipe_1(
61
64
  model_meta = ai_model_obj.get_latest_version()
62
65
  except AiModel.DoesNotExist:
63
66
  logger.error(f"Pipe 1 failed: Model '{model_name}' not found.")
64
- return False
67
+ try:
68
+ model_name = download_segmentation_model()
69
+ ai_model_obj = AiModel.objects.get(name=model_name)
70
+ if model_meta_version is not None:
71
+ model_meta = ai_model_obj.metadata_versions.get(version=model_meta_version)
72
+ else:
73
+ model_meta = ai_model_obj.get_latest_version()
74
+ except AiModel.DoesNotExist:
75
+ logger.error(f"Pipe 1 failed: Model '{model_name}' not found.")
76
+ return False
65
77
  except ModelMeta.DoesNotExist:
66
78
  logger.error(
67
79
  f"Pipe 1 failed: ModelMeta version {model_meta_version} for model '{model_name}' not found."
@@ -28,6 +28,9 @@ class SensitiveMetaValidateSerializer(serializers.Serializer):
28
28
  patient_gender = serializers.CharField(required=False, allow_blank=True)
29
29
  center_name = serializers.CharField(required=False, allow_blank=True)
30
30
  is_verified = serializers.BooleanField(required=False, default=True)
31
+ file_type = serializers.ChoiceField(
32
+ choices=['video', 'pdf'], required=False
33
+ ) # Optional: "video" oder "pdf"
31
34
 
32
35
  def validate_patient_dob(self, value):
33
36
  """
@@ -637,36 +637,6 @@ class PdfImportService:
637
637
 
638
638
  except Exception as e:
639
639
  logger.warning("Could not set anonymized file reference: %s", e)
640
-
641
- '''def _apply_anonymized_pdf(self):
642
- """Apply anonymized PDF results."""
643
- if not self.current_pdf:
644
- logger.warning("Cannot apply anonymized PDF - no PDF instance available")
645
- return
646
-
647
- anonymized_pdf_path = self.processing_context.get('anonymized_pdf_path')
648
-
649
- if not anonymized_pdf_path:
650
- return
651
-
652
- anonymized_path = Path(anonymized_pdf_path)
653
- if anonymized_path.exists():
654
- logger.info(f"Anonymized PDF created by ReportReader at: {anonymized_path}")
655
- try:
656
- from django.core.files.base import File
657
- with open(anonymized_path, 'rb') as f:
658
- django_file = File(f)
659
- self.current_pdf.anonymized_file.save(
660
- anonymized_path.name,
661
- django_file,
662
- save=False
663
- )
664
- except Exception as e:
665
- logger.warning(f"Could not set anonymized file reference: {e}")
666
- else:
667
- logger.warning(f"Anonymized PDF path returned but file does not exist: {anonymized_path}")'''
668
-
669
-
670
640
 
671
641
 
672
642
  def _finalize_processing(self):