endoreg-db 0.8.2.3__py3-none-any.whl → 0.8.2.5__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/helpers/default_objects.py +48 -29
- endoreg_db/management/commands/import_video.py +5 -4
- endoreg_db/models/__init__.py +4 -4
- endoreg_db/models/media/__init__.py +3 -1
- endoreg_db/models/media/video/__init__.py +4 -0
- endoreg_db/models/media/video/video_file.py +53 -44
- endoreg_db/models/{video_metadata.py → media/video/video_metadata.py} +1 -2
- endoreg_db/models/{video_processing.py → media/video/video_processing.py} +1 -2
- endoreg_db/models/medical/hardware/endoscopy_processor.py +28 -10
- endoreg_db/models/metadata/sensitive_meta.py +8 -8
- endoreg_db/serializers/video/video_metadata.py +1 -1
- endoreg_db/services/pseudonym_service.py +1 -1
- endoreg_db/services/video_import.py +275 -410
- endoreg_db/urls/media.py +6 -9
- endoreg_db/utils/paths.py +15 -16
- endoreg_db/views/__init__.py +3 -13
- endoreg_db/views/video/__init__.py +2 -5
- endoreg_db/views/video/correction.py +35 -179
- endoreg_db/views/video/video_correction.py +1 -1
- {endoreg_db-0.8.2.3.dist-info → endoreg_db-0.8.2.5.dist-info}/METADATA +2 -2
- {endoreg_db-0.8.2.3.dist-info → endoreg_db-0.8.2.5.dist-info}/RECORD +23 -26
- endoreg_db/models/media/video/video_file_meta.py +0 -11
- endoreg_db/services/ollama_api_docs.py +0 -1528
- endoreg_db/views/video/video_reprocess.py +0 -40
- {endoreg_db-0.8.2.3.dist-info → endoreg_db-0.8.2.5.dist-info}/WHEEL +0 -0
- {endoreg_db-0.8.2.3.dist-info → endoreg_db-0.8.2.5.dist-info}/licenses/LICENSE +0 -0
endoreg_db/urls/media.py
CHANGED
|
@@ -24,12 +24,11 @@ from endoreg_db.views import (
|
|
|
24
24
|
from endoreg_db.views.pdf.reimport import PdfReimportView
|
|
25
25
|
from endoreg_db.views.video.reimport import VideoReimportView
|
|
26
26
|
from endoreg_db.views.video.correction import (
|
|
27
|
-
VideoReprocessView,
|
|
28
27
|
VideoMetadataView,
|
|
29
28
|
VideoProcessingHistoryView,
|
|
30
|
-
VideoAnalyzeView,
|
|
31
29
|
VideoApplyMaskView,
|
|
32
30
|
VideoRemoveFramesView,
|
|
31
|
+
VideoCorrectionView,
|
|
33
32
|
)
|
|
34
33
|
# ---------------------------------------------------------------------------------------
|
|
35
34
|
# ANNOTATION API ENDPOINTS
|
|
@@ -66,6 +65,10 @@ urlpatterns = [
|
|
|
66
65
|
# - History: Track all correction operations
|
|
67
66
|
# ---------------------------------------------------------------------------------------
|
|
68
67
|
|
|
68
|
+
# Video Correction API
|
|
69
|
+
# GET /api/media/videos/video-correction/{id}/ - Get video details for correction
|
|
70
|
+
path("media/videos/video-correction/<int:pk>", VideoCorrectionView.as_view(), name="video-correction"),
|
|
71
|
+
|
|
69
72
|
# Video Metadata API
|
|
70
73
|
# GET /api/media/videos/<int:pk>/metadata/
|
|
71
74
|
# Returns analysis results (sensitive frame count, ratio, frame IDs)
|
|
@@ -80,7 +83,6 @@ urlpatterns = [
|
|
|
80
83
|
# POST /api/media/videos/<int:pk>/analyze/
|
|
81
84
|
# Analyzes video for sensitive frames using MiniCPM-o 2.6 or OCR+LLM
|
|
82
85
|
# Body: { detection_method: 'minicpm'|'ocr_llm'|'hybrid', sample_interval: 30 }
|
|
83
|
-
path("media/videos/<int:pk>/analyze/", VideoAnalyzeView.as_view(), name="video-analyze"),
|
|
84
86
|
|
|
85
87
|
# Video Masking API
|
|
86
88
|
# POST /api/media/videos/<int:pk>/apply-mask/
|
|
@@ -93,12 +95,7 @@ urlpatterns = [
|
|
|
93
95
|
# Removes specified frames from video
|
|
94
96
|
# Body: { frame_list: [10,20,30] OR frame_ranges: '10-20,30' OR detection_method: 'automatic' }
|
|
95
97
|
path("media/videos/<int:pk>/remove-frames/", VideoRemoveFramesView.as_view(), name="video-remove-frames"),
|
|
96
|
-
|
|
97
|
-
# Video Reprocess API endpoint (modern media framework)
|
|
98
|
-
# POST /api/media/videos/<int:pk>/reprocess/
|
|
99
|
-
# Re-runs entire anonymization pipeline for a video (correction workflow)
|
|
100
|
-
path("media/videos/<int:pk>/reprocess/", VideoReprocessView.as_view(), name="video-reprocess"),
|
|
101
|
-
|
|
98
|
+
|
|
102
99
|
# ---------------------------------------------------------------------------------------
|
|
103
100
|
# VIDEO SEGMENT API ENDPOINTS (Modern Media Framework - October 14, 2025)
|
|
104
101
|
#
|
endoreg_db/utils/paths.py
CHANGED
|
@@ -6,27 +6,25 @@ It provides a unified dictionary 'data_paths' for accessing all path objects.
|
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
8
|
from logging import getLogger
|
|
9
|
+
|
|
10
|
+
from sphinx.search import no
|
|
9
11
|
logger = getLogger(__name__)
|
|
10
12
|
|
|
11
13
|
from pathlib import Path
|
|
12
14
|
from typing import Dict
|
|
13
|
-
|
|
14
15
|
import os
|
|
16
|
+
# Alternative approach using env_path helper, deprecated since monorepo setup. Alright for single install, env is always preferred.
|
|
17
|
+
#from endoreg_db.config.env import env_path
|
|
15
18
|
|
|
16
19
|
STORAGE_DIR = Path(os.getenv("STORAGE_DIR", "storage"))
|
|
17
20
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
# # Fall back to a local storage directory under the repo.
|
|
26
|
-
# return (BASE_DIR / "storage").resolve()
|
|
27
|
-
|
|
28
|
-
# STORAGE_DIR = _resolve_storage_dir()
|
|
29
|
-
STORAGE_DIR.mkdir(parents=True, exist_ok=True)
|
|
21
|
+
storage_dir_env = os.getenv("STORAGE_DIR")
|
|
22
|
+
if storage_dir_env is None:
|
|
23
|
+
raise RuntimeError("STORAGE_DIR environment variable is not set.")
|
|
24
|
+
storage_dir_str = Path(storage_dir_env)
|
|
25
|
+
STORAGE_DIR = storage_dir_str
|
|
26
|
+
if not STORAGE_DIR.exists():
|
|
27
|
+
STORAGE_DIR.mkdir(parents=True, exist_ok=True)
|
|
30
28
|
|
|
31
29
|
PREFIX_RAW = "raw_"
|
|
32
30
|
IMPORT_DIR_NAME = "import"
|
|
@@ -91,6 +89,7 @@ data_paths:Dict[str,Path] = {
|
|
|
91
89
|
logger.info(f"Storage directory: {STORAGE_DIR.resolve()}")
|
|
92
90
|
logger.info(f"Export directory: {EXPORT_DIR.resolve()}")
|
|
93
91
|
|
|
94
|
-
for key, path in data_paths.items():
|
|
95
|
-
|
|
96
|
-
|
|
92
|
+
# for key, path in data_paths.items():
|
|
93
|
+
# path.mkdir(parents=True, exist_ok=True)
|
|
94
|
+
|
|
95
|
+
# logger.info(f"{key.capitalize()} directory: {path.resolve()}")
|
endoreg_db/views/__init__.py
CHANGED
|
@@ -127,19 +127,8 @@ from .video import (
|
|
|
127
127
|
# Video Correction (Phase 1.1) - Implemented
|
|
128
128
|
VideoMetadataView,
|
|
129
129
|
VideoProcessingHistoryView,
|
|
130
|
-
VideoAnalyzeView,
|
|
131
130
|
VideoApplyMaskView,
|
|
132
131
|
VideoRemoveFramesView,
|
|
133
|
-
VideoReprocessView,
|
|
134
|
-
|
|
135
|
-
# Phase 1.2: Media Management Views ✅ IMPLEMENTED
|
|
136
|
-
# VideoMediaView, # Imported via video module
|
|
137
|
-
# PDFMediaView, # Legacy view still in pdf module
|
|
138
|
-
|
|
139
|
-
# TODO Phase 1.2+: Future views
|
|
140
|
-
# VideoCorrectionView,
|
|
141
|
-
# TaskStatusView,
|
|
142
|
-
# VideoDownloadProcessedView,
|
|
143
132
|
|
|
144
133
|
# Existing views
|
|
145
134
|
VideoReimportView,
|
|
@@ -150,6 +139,7 @@ from .video import (
|
|
|
150
139
|
rerun_segmentation,
|
|
151
140
|
video_timeline_view,
|
|
152
141
|
VideoExaminationViewSet,
|
|
142
|
+
VideoCorrectionView,
|
|
153
143
|
)
|
|
154
144
|
|
|
155
145
|
__all__ = [
|
|
@@ -265,10 +255,10 @@ __all__ = [
|
|
|
265
255
|
# Video Views (Phase 1.1 - Implemented)
|
|
266
256
|
'VideoMetadataView',
|
|
267
257
|
'VideoProcessingHistoryView',
|
|
268
|
-
'VideoAnalyzeView',
|
|
269
258
|
'VideoApplyMaskView',
|
|
270
259
|
'VideoRemoveFramesView',
|
|
271
|
-
|
|
260
|
+
|
|
261
|
+
'VideoCorrectionView',
|
|
272
262
|
|
|
273
263
|
# Video Views (Existing)
|
|
274
264
|
'VideoReimportView',
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
from .correction import (
|
|
2
2
|
VideoMetadataView,
|
|
3
3
|
VideoProcessingHistoryView,
|
|
4
|
-
VideoAnalyzeView,
|
|
5
4
|
VideoApplyMaskView,
|
|
6
5
|
VideoRemoveFramesView,
|
|
7
|
-
|
|
6
|
+
VideoCorrectionView,
|
|
8
7
|
)
|
|
9
8
|
|
|
10
9
|
from ..media.video_media import VideoMediaView
|
|
@@ -33,16 +32,14 @@ __all__ = [
|
|
|
33
32
|
# Video Correction (Phase 1.1) - Implemented
|
|
34
33
|
'VideoMetadataView',
|
|
35
34
|
'VideoProcessingHistoryView',
|
|
36
|
-
'VideoAnalyzeView',
|
|
37
35
|
'VideoApplyMaskView',
|
|
38
36
|
'VideoRemoveFramesView',
|
|
39
|
-
'VideoReprocessView',
|
|
40
37
|
|
|
41
38
|
# Phase 1.2: Media Management Views ✅ IMPLEMENTED
|
|
42
39
|
'VideoMediaView',
|
|
43
40
|
|
|
44
41
|
# TODO Phase 1.2+: Future views
|
|
45
|
-
|
|
42
|
+
'VideoCorrectionView',
|
|
46
43
|
# 'TaskStatusView',
|
|
47
44
|
# 'VideoDownloadProcessedView',
|
|
48
45
|
|
|
@@ -24,8 +24,33 @@ from endoreg_db.models import VideoFile, VideoMetadata, VideoProcessingHistory,
|
|
|
24
24
|
from endoreg_db.serializers import VideoMetadataSerializer, VideoProcessingHistorySerializer
|
|
25
25
|
from lx_anonymizer import FrameCleaner
|
|
26
26
|
|
|
27
|
+
from endoreg_db.models import VideoFile
|
|
28
|
+
from endoreg_db.serializers.video.video_file_detail import VideoDetailSerializer
|
|
29
|
+
from endoreg_db.utils.permissions import EnvironmentAwarePermission
|
|
30
|
+
|
|
27
31
|
logger = logging.getLogger(__name__)
|
|
28
32
|
|
|
33
|
+
def update_processed_file(video, output_path: Path):
|
|
34
|
+
from endoreg_db.utils import data_paths
|
|
35
|
+
storage_root = Path(data_paths["storage"])
|
|
36
|
+
try:
|
|
37
|
+
rel_path = output_path.relative_to(storage_root)
|
|
38
|
+
except ValueError:
|
|
39
|
+
rel_path = output_path.relative_to(Path(settings.MEDIA_ROOT))
|
|
40
|
+
video.processed_file.name = str(rel_path)
|
|
41
|
+
video.save(update_fields=["processed_file"])
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class VideoCorrectionView(APIView):
|
|
45
|
+
"""
|
|
46
|
+
GET /api/video/media/video-correction/{id}/ - Get video details for correction
|
|
47
|
+
"""
|
|
48
|
+
permission_classes = [EnvironmentAwarePermission]
|
|
49
|
+
|
|
50
|
+
def get(self, request, pk):
|
|
51
|
+
video = get_object_or_404(VideoFile, pk=pk)
|
|
52
|
+
ser = VideoDetailSerializer(video, context={"request": request})
|
|
53
|
+
return Response(ser.data, status=status.HTTP_200_OK)
|
|
29
54
|
|
|
30
55
|
def update_segments_after_frame_removal(video: VideoFile, removed_frames: list) -> dict:
|
|
31
56
|
"""
|
|
@@ -198,113 +223,6 @@ class VideoProcessingHistoryView(APIView):
|
|
|
198
223
|
return Response(serializer.data)
|
|
199
224
|
|
|
200
225
|
|
|
201
|
-
class VideoAnalyzeView(APIView):
|
|
202
|
-
"""
|
|
203
|
-
POST /api/media/videos/{pk}/analyze/
|
|
204
|
-
|
|
205
|
-
Analyze video for sensitive frames using MiniCPM-o 2.6 or OCR+LLM.
|
|
206
|
-
|
|
207
|
-
Request body (optional):
|
|
208
|
-
{
|
|
209
|
-
"detection_method": "minicpm", // or "ocr_llm", "hybrid"
|
|
210
|
-
"sample_interval": 30 // analyze every Nth frame (default: adaptive)
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
Returns:
|
|
214
|
-
{
|
|
215
|
-
"sensitive_frame_count": 42,
|
|
216
|
-
"total_frames": 840,
|
|
217
|
-
"sensitive_ratio": 0.05,
|
|
218
|
-
"sensitive_frame_ids": [10, 15, 20, ...],
|
|
219
|
-
"sensitive_percentage": 5.0,
|
|
220
|
-
"detection_method": "minicpm",
|
|
221
|
-
"message": "Analysis complete"
|
|
222
|
-
}
|
|
223
|
-
"""
|
|
224
|
-
|
|
225
|
-
def post(self, request, pk):
|
|
226
|
-
"""Analyze video for sensitive content."""
|
|
227
|
-
video = get_object_or_404(VideoFile, pk=pk)
|
|
228
|
-
|
|
229
|
-
# Extract parameters
|
|
230
|
-
detection_method = request.data.get('detection_method', 'minicpm')
|
|
231
|
-
sample_interval = request.data.get('sample_interval', None)
|
|
232
|
-
|
|
233
|
-
try:
|
|
234
|
-
# Initialize FrameCleaner with appropriate detection method
|
|
235
|
-
use_minicpm = detection_method in ['minicpm', 'hybrid']
|
|
236
|
-
frame_cleaner = FrameCleaner(use_minicpm=use_minicpm)
|
|
237
|
-
|
|
238
|
-
# Get video path
|
|
239
|
-
video_path = video.raw_file.path if hasattr(video.raw_file, 'path') else str(video.raw_file)
|
|
240
|
-
|
|
241
|
-
# Run analysis (uses existing FrameCleaner.analyze_video_sensitivity)
|
|
242
|
-
analysis_result = frame_cleaner.analyze_video_sensitivity(
|
|
243
|
-
video_path=video_path,
|
|
244
|
-
sample_interval=sample_interval
|
|
245
|
-
)
|
|
246
|
-
|
|
247
|
-
# Extract results
|
|
248
|
-
sensitive_frame_ids = analysis_result.get('sensitive_frame_ids', [])
|
|
249
|
-
total_frames = analysis_result.get('total_frames', 0)
|
|
250
|
-
sensitive_count = len(sensitive_frame_ids)
|
|
251
|
-
sensitive_ratio = sensitive_count / total_frames if total_frames > 0 else 0.0
|
|
252
|
-
|
|
253
|
-
# Update or create metadata
|
|
254
|
-
metadata, created = VideoMetadata.objects.update_or_create(
|
|
255
|
-
video=video,
|
|
256
|
-
defaults={
|
|
257
|
-
'sensitive_frame_count': sensitive_count,
|
|
258
|
-
'sensitive_ratio': sensitive_ratio,
|
|
259
|
-
'sensitive_frame_ids': json.dumps(sensitive_frame_ids)
|
|
260
|
-
}
|
|
261
|
-
)
|
|
262
|
-
|
|
263
|
-
# Create processing history record
|
|
264
|
-
VideoProcessingHistory.objects.create(
|
|
265
|
-
video=video,
|
|
266
|
-
operation=VideoProcessingHistory.OPERATION_ANALYSIS,
|
|
267
|
-
status=VideoProcessingHistory.STATUS_SUCCESS,
|
|
268
|
-
config={
|
|
269
|
-
'detection_method': detection_method,
|
|
270
|
-
'sample_interval': sample_interval
|
|
271
|
-
},
|
|
272
|
-
details=f"Found {sensitive_count} sensitive frames out of {total_frames} total frames"
|
|
273
|
-
)
|
|
274
|
-
|
|
275
|
-
logger.info(f"Video {pk} analyzed: {sensitive_count}/{total_frames} sensitive frames")
|
|
276
|
-
|
|
277
|
-
return Response({
|
|
278
|
-
'sensitive_frame_count': sensitive_count,
|
|
279
|
-
'total_frames': total_frames,
|
|
280
|
-
'sensitive_ratio': sensitive_ratio,
|
|
281
|
-
'sensitive_frame_ids': sensitive_frame_ids,
|
|
282
|
-
'sensitive_percentage': sensitive_ratio * 100,
|
|
283
|
-
'detection_method': detection_method,
|
|
284
|
-
'message': 'Analysis complete'
|
|
285
|
-
})
|
|
286
|
-
|
|
287
|
-
except Exception as e:
|
|
288
|
-
logger.error(f"Video analysis failed for {pk}: {str(e)}", exc_info=True)
|
|
289
|
-
|
|
290
|
-
# Create failure record
|
|
291
|
-
VideoProcessingHistory.objects.create(
|
|
292
|
-
video=video,
|
|
293
|
-
operation=VideoProcessingHistory.OPERATION_ANALYSIS,
|
|
294
|
-
status=VideoProcessingHistory.STATUS_FAILURE,
|
|
295
|
-
config={
|
|
296
|
-
'detection_method': detection_method,
|
|
297
|
-
'sample_interval': sample_interval
|
|
298
|
-
},
|
|
299
|
-
details=str(e)
|
|
300
|
-
)
|
|
301
|
-
|
|
302
|
-
return Response(
|
|
303
|
-
{'error': f'Analysis failed: {str(e)}'},
|
|
304
|
-
status=status.HTTP_500_INTERNAL_SERVER_ERROR
|
|
305
|
-
)
|
|
306
|
-
|
|
307
|
-
|
|
308
226
|
class VideoApplyMaskView(APIView):
|
|
309
227
|
"""
|
|
310
228
|
POST /api/media/videos/{pk}/apply-mask/
|
|
@@ -378,7 +296,7 @@ class VideoApplyMaskView(APIView):
|
|
|
378
296
|
frame_cleaner = FrameCleaner()
|
|
379
297
|
|
|
380
298
|
# Get video paths
|
|
381
|
-
video_path = video.raw_file.path if hasattr(video.raw_file, 'path') else str(video.raw_file)
|
|
299
|
+
video_path = Path(video.raw_file.path) if hasattr(video.raw_file, 'path') else Path(str(video.raw_file))
|
|
382
300
|
output_path = Path(settings.MEDIA_ROOT) / 'anonym_videos' / f"{video.uuid}_masked.mp4"
|
|
383
301
|
output_path.parent.mkdir(parents=True, exist_ok=True)
|
|
384
302
|
|
|
@@ -390,7 +308,6 @@ class VideoApplyMaskView(APIView):
|
|
|
390
308
|
# Convert ROI to mask config
|
|
391
309
|
mask_config = frame_cleaner._create_mask_config_from_roi(
|
|
392
310
|
endoscope_roi=roi,
|
|
393
|
-
processor_rois=None
|
|
394
311
|
)
|
|
395
312
|
|
|
396
313
|
# Apply mask (uses existing FrameCleaner._mask_video)
|
|
@@ -400,16 +317,16 @@ class VideoApplyMaskView(APIView):
|
|
|
400
317
|
success = frame_cleaner._mask_video(
|
|
401
318
|
input_video=video_path,
|
|
402
319
|
mask_config=mask_config,
|
|
403
|
-
output_video=
|
|
320
|
+
output_video=output_path
|
|
404
321
|
)
|
|
405
322
|
|
|
406
323
|
processing_time = time.time() - start_time
|
|
407
324
|
|
|
408
325
|
if success:
|
|
409
326
|
# Update video record with anonymized file
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
327
|
+
from django.core.files import File
|
|
328
|
+
processed_file_path = output_path
|
|
329
|
+
update_processed_file(video, processed_file_path)
|
|
413
330
|
# Mark history as success
|
|
414
331
|
history.mark_success(
|
|
415
332
|
output_file=str(output_path),
|
|
@@ -531,7 +448,7 @@ class VideoRemoveFramesView(APIView):
|
|
|
531
448
|
frame_cleaner = FrameCleaner()
|
|
532
449
|
|
|
533
450
|
# Get video paths
|
|
534
|
-
video_path = video.raw_file.path if hasattr(video.raw_file, 'path') else str(video.raw_file)
|
|
451
|
+
video_path = Path(video.raw_file.path) if hasattr(video.raw_file, 'path') else Path(str(video.raw_file))
|
|
535
452
|
output_path = Path(settings.MEDIA_ROOT) / 'anonym_videos' / f"{video.uuid}_cleaned.mp4"
|
|
536
453
|
output_path.parent.mkdir(parents=True, exist_ok=True)
|
|
537
454
|
|
|
@@ -542,15 +459,15 @@ class VideoRemoveFramesView(APIView):
|
|
|
542
459
|
success = frame_cleaner.remove_frames_from_video(
|
|
543
460
|
original_video=video_path,
|
|
544
461
|
frames_to_remove=frames_to_remove,
|
|
545
|
-
output_video=
|
|
462
|
+
output_video=output_path
|
|
546
463
|
)
|
|
547
464
|
|
|
548
465
|
processing_time = time.time() - start_time
|
|
549
466
|
|
|
550
467
|
if success:
|
|
551
468
|
# Update video record
|
|
552
|
-
video
|
|
553
|
-
|
|
469
|
+
update_processed_file(video, output_path)
|
|
470
|
+
|
|
554
471
|
|
|
555
472
|
# Phase 1.4: Update LabelVideoSegments (shift frame numbers)
|
|
556
473
|
segment_update_result = update_segments_after_frame_removal(video, frames_to_remove)
|
|
@@ -610,65 +527,4 @@ class VideoRemoveFramesView(APIView):
|
|
|
610
527
|
frames.extend(range(start, end + 1))
|
|
611
528
|
else:
|
|
612
529
|
frames.append(int(part))
|
|
613
|
-
return sorted(set(frames)) # Remove duplicates and sort
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
class VideoReprocessView(APIView):
|
|
617
|
-
"""
|
|
618
|
-
POST /api/media/videos/{pk}/reprocess/
|
|
619
|
-
|
|
620
|
-
Re-run entire anonymization pipeline for a video.
|
|
621
|
-
|
|
622
|
-
Request body: {} (empty)
|
|
623
|
-
|
|
624
|
-
Returns:
|
|
625
|
-
{
|
|
626
|
-
"message": "Reprocessing started",
|
|
627
|
-
"status": "processing_anonymization"
|
|
628
|
-
}
|
|
629
|
-
|
|
630
|
-
Note: This resets VideoState and triggers video_import service.
|
|
631
|
-
"""
|
|
632
|
-
|
|
633
|
-
def post(self, request, pk):
|
|
634
|
-
"""Reprocess video through entire anonymization pipeline."""
|
|
635
|
-
video = get_object_or_404(VideoFile, pk=pk)
|
|
636
|
-
|
|
637
|
-
try:
|
|
638
|
-
# Create processing history record
|
|
639
|
-
history = VideoProcessingHistory.objects.create(
|
|
640
|
-
video=video,
|
|
641
|
-
operation=VideoProcessingHistory.OPERATION_REPROCESSING,
|
|
642
|
-
status=VideoProcessingHistory.STATUS_PENDING,
|
|
643
|
-
config={}
|
|
644
|
-
)
|
|
645
|
-
|
|
646
|
-
# Reset video state to trigger re-processing
|
|
647
|
-
if hasattr(video, 'state') and video.state:
|
|
648
|
-
video.state.anonymization_status = 'processing_anonymization'
|
|
649
|
-
video.state.save()
|
|
650
|
-
|
|
651
|
-
# Clear previous metadata
|
|
652
|
-
VideoMetadata.objects.filter(video=video).delete()
|
|
653
|
-
|
|
654
|
-
# TODO Phase 1.2: Trigger Celery task for async reprocessing
|
|
655
|
-
# task = reprocess_video_task.delay(video.id)
|
|
656
|
-
# history.task_id = task.id
|
|
657
|
-
# history.save()
|
|
658
|
-
|
|
659
|
-
history.mark_success(details="Reprocessing initiated")
|
|
660
|
-
|
|
661
|
-
logger.info(f"Video {pk} reprocessing started")
|
|
662
|
-
|
|
663
|
-
return Response({
|
|
664
|
-
'message': 'Reprocessing started',
|
|
665
|
-
'status': 'processing_anonymization'
|
|
666
|
-
})
|
|
667
|
-
|
|
668
|
-
except Exception as e:
|
|
669
|
-
logger.error(f"Reprocessing failed for {pk}: {str(e)}", exc_info=True)
|
|
670
|
-
|
|
671
|
-
return Response(
|
|
672
|
-
{'error': f'Reprocessing failed: {str(e)}'},
|
|
673
|
-
status=status.HTTP_500_INTERNAL_SERVER_ERROR
|
|
674
|
-
)
|
|
530
|
+
return sorted(set(frames)) # Remove duplicates and sort
|
|
@@ -11,7 +11,7 @@ from rest_framework.views import APIView
|
|
|
11
11
|
|
|
12
12
|
class VideoCorrectionView(APIView):
|
|
13
13
|
"""
|
|
14
|
-
GET /api/video-correction/{id}/ - Get video details for correction
|
|
14
|
+
GET /api/video/media/video-correction/{id}/ - Get video details for correction
|
|
15
15
|
"""
|
|
16
16
|
permission_classes = [EnvironmentAwarePermission]
|
|
17
17
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: endoreg-db
|
|
3
|
-
Version: 0.8.2.
|
|
3
|
+
Version: 0.8.2.5
|
|
4
4
|
Summary: EndoReg Db Django App
|
|
5
5
|
Project-URL: Homepage, https://info.coloreg.de
|
|
6
6
|
Project-URL: Repository, https://github.com/wg-lux/endoreg-db
|
|
@@ -33,7 +33,7 @@ Requires-Dist: gunicorn>=23.0.0
|
|
|
33
33
|
Requires-Dist: icecream>=2.1.4
|
|
34
34
|
Requires-Dist: librosa==0.11.0
|
|
35
35
|
Requires-Dist: llvmlite>=0.44.0
|
|
36
|
-
Requires-Dist: lx-anonymizer[llm,ocr]>=0.8.
|
|
36
|
+
Requires-Dist: lx-anonymizer[llm,ocr]>=0.8.3
|
|
37
37
|
Requires-Dist: moviepy==2.2.1
|
|
38
38
|
Requires-Dist: mypy>=1.16.0
|
|
39
39
|
Requires-Dist: numpy>=2.2.3
|
|
@@ -240,7 +240,7 @@ endoreg_db/forms/settings/__init__.py,sha256=xKCYyRS1tEAWsm5C9OrG0Btqgitzuh_s31O
|
|
|
240
240
|
endoreg_db/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
241
241
|
endoreg_db/helpers/count_db.py,sha256=IkdgvDPM5xq7DgFn8Bp1rgpXOtmLzPfLpZy-5cFTEPg,1951
|
|
242
242
|
endoreg_db/helpers/data_loader.py,sha256=Kn5MyRRuul-bDtLtqg2gn4E2OKt1-5HkjjD3QcwWyPM,6324
|
|
243
|
-
endoreg_db/helpers/default_objects.py,sha256
|
|
243
|
+
endoreg_db/helpers/default_objects.py,sha256=g1ZeSsqEEp9kbeMpCUr7MyNXVvcqnhdj3wWtgtJY5Cs,13928
|
|
244
244
|
endoreg_db/helpers/download_segmentation_model.py,sha256=VZ8BU7QkYpZkr8kpkUrnuvDBkirmLhuf2rHC2jRBILM,1053
|
|
245
245
|
endoreg_db/helpers/interact.py,sha256=EAiUP_5CXCauKcYYEoUo-Ot3FqE5n1Rm4UX6mkC06IY,174
|
|
246
246
|
endoreg_db/helpers/test_video_helper.py,sha256=4iIjH3Xe-5krhLffQLJO16XtxKJpM9wplpWUocmwWeg,4695
|
|
@@ -253,7 +253,7 @@ endoreg_db/management/commands/fix_missing_patient_data.py,sha256=5TPUTOQwI2fVh3
|
|
|
253
253
|
endoreg_db/management/commands/fix_video_paths.py,sha256=7LLwc38oX3B_tYWbLJA43Li_KBO3m5Lyw0CF6YqN5rU,7145
|
|
254
254
|
endoreg_db/management/commands/import_fallback_video.py,sha256=PhSBqyHevGgOZieZsj3NBfPJ656wqEkdCWrp2NSb538,9590
|
|
255
255
|
endoreg_db/management/commands/import_report.py,sha256=vFst-NeQdL-w62yoH4kDamq-2Hos5GW90vLTO2-hfYI,13168
|
|
256
|
-
endoreg_db/management/commands/import_video.py,sha256=
|
|
256
|
+
endoreg_db/management/commands/import_video.py,sha256=AMvgi1eN0F_hjhgnNNYIFkJtHfjalBfh2lfDxw6VTzE,17980
|
|
257
257
|
endoreg_db/management/commands/import_video_with_classification.py,sha256=ulZH5jvAWu_pJ1kI9B3hbIO1-p_BReY0zbIQDS_d9OI,14726
|
|
258
258
|
endoreg_db/management/commands/init_default_ai_model.py,sha256=98yBigGZ5gkA-b1LPcvzS5x2jAms3pX58fU-TEAcjKw,4669
|
|
259
259
|
endoreg_db/management/commands/load_ai_model_data.py,sha256=QDyWPjIC1ga13Ou67_mnE8HUGTAK0uF2LLQ12sE-95E,2747
|
|
@@ -310,11 +310,9 @@ endoreg_db/migrations/0001_initial.py,sha256=xfdlddGyRGvwKbm77E4gPRWsgJWZvXs6aw_
|
|
|
310
310
|
endoreg_db/migrations/0002_add_video_correction_models.py,sha256=EFnABa4FClf6DwytRiG15Ws-aZwZ1ZgACnl6r2dNUxs,3691
|
|
311
311
|
endoreg_db/migrations/0003_add_center_display_name.py,sha256=F13-IUe1q6XjVzE5-oMTAVx4oo_jvMcLpDiHtrTfQL4,873
|
|
312
312
|
endoreg_db/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
313
|
-
endoreg_db/models/__init__.py,sha256=
|
|
313
|
+
endoreg_db/models/__init__.py,sha256=UeaNymydlkhJbplbVlnv7MjCACnDQ4e09yzZj6NCZ_Y,7042
|
|
314
314
|
endoreg_db/models/upload_job.py,sha256=lSsyv2d5jZxI8jAKlBU7dXi4jhEIKYjJKt8gZlwRz94,3000
|
|
315
315
|
endoreg_db/models/utils.py,sha256=G2W-QzPEKLDqbBuE4Z0srlkUageW0ZRuIIF8sQCXp2w,4451
|
|
316
|
-
endoreg_db/models/video_metadata.py,sha256=aULgRXCwIsB7pZ3uj3nI9Z26Bkj0fJCgpS4dJep4IfM,2007
|
|
317
|
-
endoreg_db/models/video_processing.py,sha256=00ClmeN-nLO3k1F5u86gMjH8AHSccBpDlxtRJ9D5O_Y,4746
|
|
318
316
|
endoreg_db/models/administration/__init__.py,sha256=T1dgcMsnYlz6peK7ThskJF6EFigw12lYZie34t301yw,1717
|
|
319
317
|
endoreg_db/models/administration/ai/__init__.py,sha256=AYnrzvWkLYsySnlryfZ35_wgJ5egIdIpgmxW3DzO4OY,168
|
|
320
318
|
endoreg_db/models/administration/ai/active_model.py,sha256=c0Ps5ObhEIoWCgf2T4SbDz8pf92rA10Cx594-Cj-lX4,1453
|
|
@@ -375,7 +373,7 @@ endoreg_db/models/label/annotation/video_segmentation_annotation.py,sha256=KccKV
|
|
|
375
373
|
endoreg_db/models/label/label_video_segment/__init__.py,sha256=MLFkJvmLm8IZccn2IOMg9C9kZyKUviZtAZpbGdev_nw,84
|
|
376
374
|
endoreg_db/models/label/label_video_segment/_create_from_video.py,sha256=Rp9OzIxuPhOye3efmP60yagz7bp5gIXizAu5PFbX8AY,1205
|
|
377
375
|
endoreg_db/models/label/label_video_segment/label_video_segment.py,sha256=chOgGhevzFWJWpuS879bdQ4hT1_nfnqlyEmMZAd2XD4,21807
|
|
378
|
-
endoreg_db/models/media/__init__.py,sha256=
|
|
376
|
+
endoreg_db/models/media/__init__.py,sha256=WuomOKk-3kNGDLKoLO_ltnXbo028JDVlCCScdJMMQI4,465
|
|
379
377
|
endoreg_db/models/media/frame/__init__.py,sha256=25WriZHocR82rbHr_IMIgBt5z-mkV2O0LVWUpJRnQ5E,45
|
|
380
378
|
endoreg_db/models/media/frame/frame.py,sha256=6BvNKTAGsC_Q0S27nrvZ2cySDy3LSu5HCxrNcZwIEsA,4408
|
|
381
379
|
endoreg_db/models/media/pdf/__init__.py,sha256=1fimtZK5LUuP_yqETN6pMj0hxKXuQqeLb1DP5wPmtT4,343
|
|
@@ -384,18 +382,19 @@ endoreg_db/models/media/pdf/report_file.py,sha256=6Vt_TJSB3qaF26qXbyjRSn-s_zN5y4
|
|
|
384
382
|
endoreg_db/models/media/pdf/report_reader/__init__.py,sha256=LiMooVstXRay5qcB-uZW0wxbcdUvPrfAs_xBwWiuuWc,166
|
|
385
383
|
endoreg_db/models/media/pdf/report_reader/report_reader_config.py,sha256=wYVDmPSmNIuCTpaaWqoLVgVZFYW-dqGpnAyVBqRLqXE,3445
|
|
386
384
|
endoreg_db/models/media/pdf/report_reader/report_reader_flag.py,sha256=j9tjbLRenxpWfeaseALl8rV2Dqem9YaM_duS1iJkARU,536
|
|
387
|
-
endoreg_db/models/media/video/__init__.py,sha256=
|
|
385
|
+
endoreg_db/models/media/video/__init__.py,sha256=ifW4SXXN2q6wAuFwSP7XlYskpX7UX6uy0py5mpCCOCM,211
|
|
388
386
|
endoreg_db/models/media/video/create_from_file.py,sha256=3n4bbzFteEOFDUuEikP0x-StCKI5R5IhyKC7o3kLZ6Y,15128
|
|
389
387
|
endoreg_db/models/media/video/pipe_1.py,sha256=hOII3BCiMpxgpDKpV5h52-O2XTqKlb4YArxuH2fWyck,9402
|
|
390
388
|
endoreg_db/models/media/video/pipe_2.py,sha256=DnMxW0uOqSsf7-0n9Rlvn7u89U4Jpkv7n6hFpQfUjkQ,4964
|
|
391
389
|
endoreg_db/models/media/video/refactor_plan.md,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
392
|
-
endoreg_db/models/media/video/video_file.py,sha256=
|
|
390
|
+
endoreg_db/models/media/video/video_file.py,sha256=txlxR8d1OBgt3UEkWvLcGSyLarh0jXLw-z0SAV5KOok,26789
|
|
393
391
|
endoreg_db/models/media/video/video_file_ai.py,sha256=3ABea52FOF1qlrlxHdYhz_M3Kmqfzqtgq7M0prl-FAo,18819
|
|
394
392
|
endoreg_db/models/media/video/video_file_anonymize.py,sha256=pet1UfSsbSHJJZxq6gDPifAfBWpGyEpD1jEQuSQi0Gg,16027
|
|
395
393
|
endoreg_db/models/media/video/video_file_frames.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
396
394
|
endoreg_db/models/media/video/video_file_io.py,sha256=9y3jBiIHA3Rw5pWczGbf13u-EcKiZQIuDserq2vOwuk,7921
|
|
397
|
-
endoreg_db/models/media/video/video_file_meta.py,sha256=H0DvZ6pt5XUdkgDmHcBFCSsjOeW5q7McE1Zo3ArBF6s,443
|
|
398
395
|
endoreg_db/models/media/video/video_file_segments.py,sha256=42oc2go3VWtNY1gsjp4kLbfQb5Qtl-aMbnAuKN3vum4,8647
|
|
396
|
+
endoreg_db/models/media/video/video_metadata.py,sha256=cM7COVZu7RMNr1uR_oDBpTU91YW-xToyyWJR50RlxjY,1994
|
|
397
|
+
endoreg_db/models/media/video/video_processing.py,sha256=_Hg_LMLj4JoJQUdVBcQj8yXEYs-rI1elaMVaAVrS93Y,4733
|
|
399
398
|
endoreg_db/models/media/video/video_file_frames/__init__.py,sha256=X1eX1o5X8PVaWwdejtQcSdkG_mvYGXXvlnzF8tE7Lck,2060
|
|
400
399
|
endoreg_db/models/media/video/video_file_frames/_bulk_create_frames.py,sha256=9kihorJQZQvoJK669mNBPGzdnNaiPG1cZMnPmox95kg,702
|
|
401
400
|
endoreg_db/models/media/video/video_file_frames/_create_frame_object.py,sha256=5nf69epDRRFZuTaGJxQS5co0tvNeb0dnTEfo1o5YV7M,539
|
|
@@ -434,7 +433,7 @@ endoreg_db/models/medical/finding/finding_intervention.py,sha256=FBwjI15yitMpTXk
|
|
|
434
433
|
endoreg_db/models/medical/finding/finding_type.py,sha256=ohDEmLcgEpYjG5q0uhCaq2xQS8jH_rj4qyKQ2DUumqQ,1117
|
|
435
434
|
endoreg_db/models/medical/hardware/__init__.py,sha256=uX2-UpBzX2chpZEeCyqbv2BSrv3OZNG9PrB8sHEWpHQ,178
|
|
436
435
|
endoreg_db/models/medical/hardware/endoscope.py,sha256=8T8R2Bo2T29psQ3C_HTrhBogN8hiysuZkJOxUefqGoI,1657
|
|
437
|
-
endoreg_db/models/medical/hardware/endoscopy_processor.py,sha256=
|
|
436
|
+
endoreg_db/models/medical/hardware/endoscopy_processor.py,sha256=DLKMXPWValfJCf4rZ1u6PdpeBa2ST0WTjkcuruFlzG0,6201
|
|
438
437
|
endoreg_db/models/medical/laboratory/__init__.py,sha256=595XF1ikkwzQWbUsyasU23v1kDRugrgTp3eUfrMd0UQ,62
|
|
439
438
|
endoreg_db/models/medical/laboratory/lab_value.py,sha256=uw4mjguVrqvsxQ-NzGO0DoNlSCaydI8KaJgUhuM16wo,20258
|
|
440
439
|
endoreg_db/models/medical/medication/__init__.py,sha256=BHh6ARvm2uVNswN12EQAEMFPnoGBiVwl7RCjKrW6C2I,761
|
|
@@ -465,7 +464,7 @@ endoreg_db/models/metadata/frame_ocr_result.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQe
|
|
|
465
464
|
endoreg_db/models/metadata/model_meta.py,sha256=aZH6Bz5Ss874Knvg1b3Kgq6gU8kVzPHXneunZJNF4yw,7111
|
|
466
465
|
endoreg_db/models/metadata/model_meta_logic.py,sha256=yiIWbxxykUp6VB_7imRqSXcO0RS5GuoYP83O48TyKws,8987
|
|
467
466
|
endoreg_db/models/metadata/pdf_meta.py,sha256=BTmpSgqxmPKi0apcNjyrZAS4AFKCPXVdBd6VBeyyv6E,3174
|
|
468
|
-
endoreg_db/models/metadata/sensitive_meta.py,sha256=
|
|
467
|
+
endoreg_db/models/metadata/sensitive_meta.py,sha256=ekLHrW-b5uYcjfkRd0EW5ncx5ef8Bu-K6msDkpWCAbk,13034
|
|
469
468
|
endoreg_db/models/metadata/sensitive_meta_logic.py,sha256=Oh7ssZQEPfKGfRMF5nXKJpOIxXx-Xibd3rpOu-bQilk,29988
|
|
470
469
|
endoreg_db/models/metadata/video_meta.py,sha256=c6xWdLW3uNqJ5VPJXHCxXA3mbXw-b0uR54-TOS3qL2Q,14966
|
|
471
470
|
endoreg_db/models/metadata/video_prediction_logic.py,sha256=j5N82mHtiomeeIaf1HA65kT5d0htQfJmbI2bJb8mpxQ,7677
|
|
@@ -587,7 +586,7 @@ endoreg_db/serializers/video/segmentation.py,sha256=TrWNLGilp2prs7bD7G3S1Y0CVO9H
|
|
|
587
586
|
endoreg_db/serializers/video/video_file_brief.py,sha256=9g5njY0rI64kLO-Kt8J220M_y5ObYUHaNw9bf3-8lK8,272
|
|
588
587
|
endoreg_db/serializers/video/video_file_detail.py,sha256=NqhziTHtoJM_gTEPEe086eAn5tvEMJknQAKa1zY6ENo,3639
|
|
589
588
|
endoreg_db/serializers/video/video_file_list.py,sha256=FGG33V-oKo86fqXYLMgrCPCD49IOngEHSTAud00wwsw,2255
|
|
590
|
-
endoreg_db/serializers/video/video_metadata.py,sha256=
|
|
589
|
+
endoreg_db/serializers/video/video_metadata.py,sha256=ghB2iLc1nZCACq4i1zGqv1S29HXhx35lKJRheIQyw7Q,3177
|
|
591
590
|
endoreg_db/serializers/video/video_processing_history.py,sha256=pJD4LltXCKlCQYsG119bhMHEhv7NslG6vlxJgS4Avg4,5281
|
|
592
591
|
endoreg_db/services/__init__.py,sha256=CMLgpzemgjXvKN5HGFD_UVtRAg9XeMIfXvoSu-aUaRE,136
|
|
593
592
|
endoreg_db/services/anonymization.py,sha256=iM-xW1aJm99G3PmkfZtMJmvoaj99c8OASP5-abBNcy0,8986
|
|
@@ -595,14 +594,13 @@ endoreg_db/services/examination_evaluation.py,sha256=jx9IL2PIoBzjiITzs00c1XucE7A
|
|
|
595
594
|
endoreg_db/services/finding_description_service.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
596
595
|
endoreg_db/services/lookup_service.py,sha256=A2t07-qlQhFEeNvOhez0GU0sxi7mnN0MIlhYzxj4W1U,10581
|
|
597
596
|
endoreg_db/services/lookup_store.py,sha256=8sB2HmJQrnzq5Vfqt-UdaJLHYMRZCxnui9BCCXscnJE,4856
|
|
598
|
-
endoreg_db/services/ollama_api_docs.py,sha256=6uyep2jqjrvx87By_teEW8BX0cm14Pt2b-Hht-rrelQ,47259
|
|
599
597
|
endoreg_db/services/pdf_import.py,sha256=_ll_Vng1SpI7mEKxNRYuNttVnehuJFpKjQGDB8OX7no,47133
|
|
600
598
|
endoreg_db/services/polling_coordinator.py,sha256=alnPB-kdMyxbYaxQN9fki9dKrwmAsY3s68bUHWDSNeI,10662
|
|
601
|
-
endoreg_db/services/pseudonym_service.py,sha256=
|
|
599
|
+
endoreg_db/services/pseudonym_service.py,sha256=CJhbtRa6K6SPbphgCZgEMi8AFQtB18CUoBDttFnxEoM,3126
|
|
602
600
|
endoreg_db/services/requirements_object.py,sha256=290zf8AEbVtCoHhW4Jr7_ud-RvrqYmb1Nz9UBHtTnc0,6164
|
|
603
601
|
endoreg_db/services/segment_sync.py,sha256=YgHvIHkbW4mqCu0ACf3zjRSZnNfxWwt4gh5syUVXuE0,6400
|
|
604
602
|
endoreg_db/services/storage_aware_video_processor.py,sha256=kKFK64vXLeBSVkp1YJonU3gFDTeXZ8C4qb9QZZB99SE,13420
|
|
605
|
-
endoreg_db/services/video_import.py,sha256=
|
|
603
|
+
endoreg_db/services/video_import.py,sha256=X20FQkEO5QGcfuacAz8jX1_LW1GhwbF33JGPpmypEyk,50161
|
|
606
604
|
endoreg_db/tasks/upload_tasks.py,sha256=OJq7DhNwcbWdXzHY8jz5c51BCVkPN5gSWOz-6Fx6W5M,7799
|
|
607
605
|
endoreg_db/tasks/video_ingest.py,sha256=kxFuYkHijINV0VabQKCFVpJRv6eCAw07tviONurDgg8,5265
|
|
608
606
|
endoreg_db/tasks/video_processing_tasks.py,sha256=KjcERRJ1TZzmavBpvr6OsvSTUViU0PR1ECWnEdzu2Js,14140
|
|
@@ -617,7 +615,7 @@ endoreg_db/urls/examination.py,sha256=IWNIR-hsWKD3nfL27EzMMazcZnOa_imjgk8RL0mql2
|
|
|
617
615
|
endoreg_db/urls/files.py,sha256=qfa8mPDNF9SW4z66B26SCtX7WHyoAo1muS1DR2QwST8,192
|
|
618
616
|
endoreg_db/urls/label_video_segment_validate.py,sha256=bGWacxIG4pHnGRbnHL_L91ShKWfKCn5X-YXsHGs6i-I,1044
|
|
619
617
|
endoreg_db/urls/label_video_segments.py,sha256=Hjc__HjohZnNE-oudqBc_uOIHqiSbQ_zpN4aHzGYRuE,1142
|
|
620
|
-
endoreg_db/urls/media.py,sha256=
|
|
618
|
+
endoreg_db/urls/media.py,sha256=ufFP3GL3fpxYUSlFJfIfg1L6pmUcC_Blao46G3PsEPQ,10699
|
|
621
619
|
endoreg_db/urls/patient.py,sha256=VLKFbEiNgpfYLWFisbHidyoUnoQuEzj1U0SgZDpdPDM,588
|
|
622
620
|
endoreg_db/urls/report.py,sha256=9i3sOSofB7_PHGByr3DMghZFtcbjKf_U5PVSlxu9d4I,1917
|
|
623
621
|
endoreg_db/urls/requirements.py,sha256=5d-SD_7nsTA9YXlBeWdZuh-mXh26BkgH29fFBaTLjU8,455
|
|
@@ -641,7 +639,7 @@ endoreg_db/utils/mime_types.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuF
|
|
|
641
639
|
endoreg_db/utils/names.py,sha256=6OKOSmXeAKv5XVs86_IjlQ7klyF3zLkvVQz9Bl7Lf0o,2745
|
|
642
640
|
endoreg_db/utils/ocr.py,sha256=LvyABxX5OZhIeXw2pI6af8_xTj7nHQQoKGh5kNsrv7o,7136
|
|
643
641
|
endoreg_db/utils/parse_and_generate_yaml.py,sha256=k7y0fl9Jbb_LNryeJYd6tebklRlu1-P70dJ-4sxvEZs,1626
|
|
644
|
-
endoreg_db/utils/paths.py,sha256=
|
|
642
|
+
endoreg_db/utils/paths.py,sha256=ncXtB_l6FBVXXdk59U7v4FhSvLO7Yb0DQ-GQMcOqiTw,3398
|
|
645
643
|
endoreg_db/utils/permissions.py,sha256=IqxG9IqJBSZuxvT1ItVgGS8fMzkA2OLdDV6y8mKHSuo,5096
|
|
646
644
|
endoreg_db/utils/requirement_helpers.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
647
645
|
endoreg_db/utils/translation.py,sha256=77Xel12pAGo0rQ0NxB7nfejvMb0GBjEmhC3I7mcU91I,1256
|
|
@@ -680,7 +678,7 @@ endoreg_db/utils/video/names.py,sha256=m268j2Ynt94OYH6dYxeL8gzU5ODtFJD4OmzS7l0nB
|
|
|
680
678
|
endoreg_db/utils/video/streaming_processor.py,sha256=C-39DtxhSnL7B2cObFE5k829VLXl_Fl0KQFrFP368JA,13747
|
|
681
679
|
endoreg_db/utils/video/video_splitter.py,sha256=EZEnhNjaUva_9VxjcjScgRSrxsEuifhBjlwIMLX1qaA,3698
|
|
682
680
|
endoreg_db/views/Frames_NICE_and_PARIS_classifications_views.py,sha256=Lu1JuUD44B6yUAR9pcYLlQ-3g66VTktmzStuO0uGIj4,8752
|
|
683
|
-
endoreg_db/views/__init__.py,sha256=
|
|
681
|
+
endoreg_db/views/__init__.py,sha256=L1xXouAYYqIK7zXDvA6qhcEv7gs5b7wc3g8HeFCVFWU,6553
|
|
684
682
|
endoreg_db/views/anonymization/__init__.py,sha256=s1_r9j0jPJsKHy1-isjFAlRF3Cw0o8EXxyUP7Xv1Kqo,698
|
|
685
683
|
endoreg_db/views/anonymization/media_management.py,sha256=ObiXjPa-KsSGs3IfmABE-TVzQZ2U6yJioFh64T7TtKY,16799
|
|
686
684
|
endoreg_db/views/anonymization/overview.py,sha256=fA4a4tZ4tbnWf3BUP6heAtqmHvinixUnDoI3dqPjTE0,8320
|
|
@@ -770,24 +768,23 @@ endoreg_db/views/requirement_lookup/lookup.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
|
|
|
770
768
|
endoreg_db/views/requirement_lookup/lookup_store.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
771
769
|
endoreg_db/views/stats/__init__.py,sha256=VHxrW0-RAWYki_89jWWJ0TrD7Nb0D3m-VjYV6bvP2k4,259
|
|
772
770
|
endoreg_db/views/stats/stats_views.py,sha256=v9ue1BKXdcApOgyolgNiT3hazx1xSVVvo26r91IozWY,8656
|
|
773
|
-
endoreg_db/views/video/__init__.py,sha256=
|
|
774
|
-
endoreg_db/views/video/correction.py,sha256=
|
|
771
|
+
endoreg_db/views/video/__init__.py,sha256=wRYF-M3amwlmTRlJ7nAYQZiwS0QgLLPxH3pPtHSQy-A,1288
|
|
772
|
+
endoreg_db/views/video/correction.py,sha256=VEzpnDPCAhsYatXVRZhGZA5FpFS_t9mENs89zFJsoYo,19750
|
|
775
773
|
endoreg_db/views/video/reimport.py,sha256=gSDBQ_Bam2xpJIj1SIMoLKnoBDBRgQ9V_TZdK9OICrI,8959
|
|
776
774
|
endoreg_db/views/video/segmentation.py,sha256=jzsLB95rYnHALSX2E_QNpAM9BpE1pbteOBxcAr_EjZo,11758
|
|
777
775
|
endoreg_db/views/video/task_status.py,sha256=PXaesTS4R7Uhu9WBaTL4lscpOschVqyR32zVDUuSbfw,1770
|
|
778
776
|
endoreg_db/views/video/timeline.py,sha256=6jxS2gZh3bYH0eZSc-uHQhJwRDwTL6Um3CvaVkTl_pY,1793
|
|
779
777
|
endoreg_db/views/video/video_analyze.py,sha256=vxQHnXRFH5Y6IaWEmEnE4Svkz6Vjw1O9NEJRafdfOe4,1907
|
|
780
778
|
endoreg_db/views/video/video_apply_mask.py,sha256=spGK4oXMAKhVotJuwZGndbKKws6klveKe35mbX7Rv6k,1630
|
|
781
|
-
endoreg_db/views/video/video_correction.py,sha256=
|
|
779
|
+
endoreg_db/views/video/video_correction.py,sha256=9mFICVvRSxp0WhGv7ib4d4M1hJs1iIhYmTl2OUIXQAg,767
|
|
782
780
|
endoreg_db/views/video/video_download_processed.py,sha256=tp5llYJKyQD0WSr4Fvqi-YrgBw2EPPe23E8F8SZbR4w,2000
|
|
783
781
|
endoreg_db/views/video/video_examination_viewset.py,sha256=77ujdUh8fzTC5Oe2fo4ESLBkwJ10rGhJLlQBpP1eMbQ,13663
|
|
784
782
|
endoreg_db/views/video/video_media.py,sha256=fvMQmSM1a-3rxpx_wK0wee9sRXV3EZz2bF8jLRAeaIQ,7022
|
|
785
783
|
endoreg_db/views/video/video_meta.py,sha256=C1wBMTtQb_yzEUrhFGAy2UHEWMk_CbU75WXX_5z00sE,1021
|
|
786
784
|
endoreg_db/views/video/video_processing_history.py,sha256=mhFuS8RG5GV8E-lTtuD0qrq-bIpnUFp8vy9aERfC-J8,770
|
|
787
785
|
endoreg_db/views/video/video_remove_frames.py,sha256=2FmvNrSPM0fUXiBxINN6vBUUDCqDlBkNcGR3WsLDgKo,1696
|
|
788
|
-
endoreg_db/views/video/video_reprocess.py,sha256=IVlt_ASldNy5BywOecgkl1OT7l2SRijf78PUutMansA,1294
|
|
789
786
|
endoreg_db/views/video/video_stream.py,sha256=kLyuf0ORTmsLeYUQkTQ6iRYqlIQozWhMMR3Lhfe_trk,12148
|
|
790
|
-
endoreg_db-0.8.2.
|
|
791
|
-
endoreg_db-0.8.2.
|
|
792
|
-
endoreg_db-0.8.2.
|
|
793
|
-
endoreg_db-0.8.2.
|
|
787
|
+
endoreg_db-0.8.2.5.dist-info/METADATA,sha256=JOdQtG1Bilq-iXh5pnJnhft411306plJg0udZDasq5Q,14770
|
|
788
|
+
endoreg_db-0.8.2.5.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
789
|
+
endoreg_db-0.8.2.5.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
790
|
+
endoreg_db-0.8.2.5.dist-info/RECORD,,
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# This file is likely obsolete after refactoring into the video_file_meta submodule.
|
|
2
|
-
# Its contents should have been moved to files like:
|
|
3
|
-
# - video_file_meta/text_meta.py
|
|
4
|
-
# - video_file_meta/video_meta.py
|
|
5
|
-
# - video_file_meta/initialize_video_specs.py
|
|
6
|
-
# - video_file_meta/get_fps.py
|
|
7
|
-
# - video_file_meta/get_endo_roi.py
|
|
8
|
-
# - video_file_meta/get_crop_template.py
|
|
9
|
-
#
|
|
10
|
-
# Please ensure all logic has been migrated and consider deleting this file.
|
|
11
|
-
pass
|