start adding uncat dicom

This commit is contained in:
Ross
2023-08-14 10:15:56 +01:00
parent c3a735fa52
commit 9ae1874073
8 changed files with 196 additions and 42 deletions
@@ -0,0 +1,37 @@
# Generated by Django 4.1.4 on 2023-08-14 09:15
import atlas.models
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('atlas', '0011_seriesimage_dicom_tags_ohif'),
]
operations = [
migrations.AddField(
model_name='seriesimage',
name='image_md5_hash',
field=models.CharField(blank=True, max_length=32, null=True),
),
migrations.AddField(
model_name='seriesimage',
name='is_dicom',
field=models.BooleanField(default=False),
),
migrations.CreateModel(
name='UncategorisedDicom',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('image', models.FileField(upload_to=atlas.models.uncategorised_dicom_directory_path)),
('image_md5_hash', models.CharField(blank=True, max_length=32, null=True)),
('series', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='imported_dicoms', to='atlas.series')),
('user', models.ForeignKey(help_text='The user that uploaded the file', on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
]
+60 -4
View File
@@ -77,6 +77,10 @@ def image_directory_path(instance, filename):
return "atlas/picture/{0}".format(filename)
def uncategorised_dicom_directory_path(instance, filename):
return "atlas/dicom/{0}".format(filename)
def findMiddle(input_list):
middle = float(len(input_list)) / 2
if middle % 2 != 0:
@@ -409,7 +413,7 @@ class SeriesImage(SeriesImageBase):
except InvalidDicomError:
return {}
#def get_image_dicom_json(self, image_index):
# def get_image_dicom_json(self, image_index):
# try:
# with pydicom.dcmread(self.image) as ds:
# return extract_image_dicom_json_from_ds(ds, url=f"{REMOTE_URL}{self.image.url}")
@@ -511,7 +515,6 @@ class Series(SeriesBase):
for series_n, image in enumerate(self.images.all()):
ds = image.get_dicom_data()
if series_n == 0:
for tag in to_keep:
if tag in ds:
val = ds[tag].value
@@ -522,9 +525,11 @@ class Series(SeriesBase):
series_json[tag] = val
instances.append(
extract_image_dicom_json_from_ds(ds, url=f"{REMOTE_URL}{image.image.url}", image_index=series_n)
extract_image_dicom_json_from_ds(
ds, url=f"{REMOTE_URL}{image.image.url}", image_index=series_n
)
)
#else:
# else:
# instances.append(image.get_image_dicom_json(image_index))
description = f"{self.examination} ({self.plane})"
@@ -788,3 +793,54 @@ class SelfReview(models.Model):
id=self.pk,
edit_url=edit_url,
)
class UncategorisedDicom(models.Model):
#We use image to maintain consitency across apps
image = models.FileField(upload_to=uncategorised_dicom_directory_path)
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
help_text="The user that uploaded the file",
)
series = models.ForeignKey(
"Series", related_name="imported_dicoms", on_delete=models.SET_NULL, null=True
)
image_md5_hash = models.CharField(max_length=32, null=True, blank=True)
def get_dicom_info(self):
try:
ds = pydicom.read_file(self.image)
return ds
except pydicom.errors.InvalidDicomError:
return None
def get_basic_dicom_tags(self):
try:
ds = pydicom.read_file(self.image)
to_include = (
"StudyDescription",
"Modality",
"ProtocolName",
"SeriesDescription",
"SeriesInstanceUID",
"BodyPartExamined",
"SliceThickness",
)
tags = {}
for tag in to_include:
if tag in ds:
tags[tag] = ds[tag]
else:
tags[tag] = ""
return ds
except pydicom.errors.InvalidDicomError:
return None
+1
View File
@@ -141,6 +141,7 @@ urlpatterns = [
views.case_dicom_json,
name="case_dicom_json",
),
path("uncategorised_dicoms/", views.uncategorised_dicoms, name="uncategorised_dicoms_view"),
path("condition/", views.ConditionView.as_view(), name="condition_view"),
path("categories/", views.categories_list, name="categories_list"),
+14 -1
View File
@@ -63,6 +63,7 @@ from .models import (
Subspecialty,
SeriesFinding,
SeriesImage,
UncategorisedDicom,
UserReportAnswer,
)
from .tables import (
@@ -1877,4 +1878,16 @@ class AddSelfReview(CreateView):
#
# response = super().form_valid(form)
#
# return response
# return response
@login_required
def uncategorised_dicoms(request, pk):
dicoms = UncategorisedDicom.objects.filter(user=request.User)
data = {}
for d in dicoms:
d[d.image] = d.get_basic_dicom_tags()
return JsonResponse(data)