add basic dicom diff support

This commit is contained in:
Ross
2024-02-05 09:15:38 +00:00
parent 5581461fb7
commit 1e16386e1e
6 changed files with 89 additions and 6 deletions
+2 -2
View File
@@ -285,7 +285,7 @@ def series_split_by_tag(request, series_id: int, dicom_tag:str):
print(image)
ds = image.get_dicom_data()
print("2a", ds[dicom_tag])
#print("2a", ds[dicom_tag])
if dicom_tag in ds:
val = ds[dicom_tag].value
@@ -295,7 +295,7 @@ def series_split_by_tag(request, series_id: int, dicom_tag:str):
else:
image_map[val].append(image)
else:
return [f"{dicom_tag} not found"]
return [f"{dicom_tag} not found {image}"]
new_series = []
case = series.case.all()
+30
View File
@@ -92,6 +92,9 @@
<summary>
Image details
</summary>
<form hx-post="{% url 'atlas:image_diff' %}"
hx-target="#temp"
>
{% for image in series.get_images %}
[{{ image.id }}] <a href='{% url "atlas:series_image_dicom" image.pk %}'>{{image.image.url}}</a>, pos: {{image.position}}, {{image.upload_filename}}
@@ -102,15 +105,34 @@
{{image.image_md5_hash}} ({{image.is_dicom}}) {{image.image_blake3_hash}}
<input type="checkbox" name="image-id" value="{{image.id}}">
<br />
{% comment %} {{image.get_dicom_info|safe}}<br /> {% endcomment %}
{% endfor %}
<button>Diff files</button>
</form>
<span id="temp"></span>
</details>
<p>Total image size: {{series.get_total_image_size|filesizeformat}}</p>
<p><a href="{% url 'atlas:series_download' pk=series.pk %}">Download images</a></p>
</details>
<span id="diff-controls">show <span id="diff-show-all" _="on click
log '1'
for row in .diff.rows
show row
end">all</span> <span id="diff-show-diff" _="
on click
log 'go'
for row in <.diff tr/>
log row.children[0].innerHTML
if row.children[0].innerHTML is empty
hide row
end
end
">diff</span></span>
<script>
@@ -208,6 +230,14 @@
});
$("#diff-show-all").click(() => {
console.log("Helol");
})
$("#diff-show-diff").click(() => {
console.log("diff");
})
{% if editing_finding > 0 %}
$("#hidden-form").show()
setTimeout(function() {
+5
View File
@@ -214,6 +214,11 @@ urlpatterns = [
views.series_order_dicom,
name="series_order_dicom",
),
path(
"images/<diff",
views.image_diff,
name="image_diff",
),
path(
"series/<int:pk>/download",
views.SeriesImagesZipView.as_view(),
+29 -1
View File
@@ -17,6 +17,7 @@ from django.core.exceptions import (
from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin
from django.views.generic import View
from django.views.generic.detail import DetailView
import pydicom
from generic.mixins import SuperuserRequiredMixin
from django.views.generic.edit import CreateView, UpdateView, DeleteView, FormView
@@ -116,7 +117,7 @@ import plotly.express as px
from django.core.cache import cache
from django.conf import settings
from helpers.images import image_as_base64
from helpers.images import image_as_base64, print_dicom
import logging
from copy import deepcopy
@@ -130,6 +131,7 @@ import reversion
from rest_framework import viewsets
import os
import difflib
logger = logging.getLogger(__name__)
@@ -1039,6 +1041,32 @@ def series_order_dicom(request, pk):
return redirect("atlas:series_detail", pk=pk)
@login_required
def image_diff(request):
if request.htmx:
image_ids = request.POST.getlist("image-id")
first: SeriesImage = get_object_or_404(SeriesImage, pk=image_ids[0])
second: SeriesImage = get_object_or_404(SeriesImage, pk=image_ids[1])
first_ds = pydicom.read_file(first.image.file)
#del first_ds.PixelData
#j1 = first_ds.to_json_dict()
f = print_dicom(first_ds, join=False)
second_ds = pydicom.read_file(second.image.file)
#del second_ds.PixelData
#j2 = second_ds.to_json_dict()
s = print_dicom(second_ds, join=False)
diff = difflib.HtmlDiff().make_table(f, s)
return HttpResponse(diff)
return HttpResponse("Fail")
@login_required
def series_image_dicom(request, pk):