add some more dicom viewing capablities

This commit is contained in:
Ross
2023-10-30 11:59:44 +00:00
parent fe536e25a7
commit d87874d0b1
7 changed files with 29 additions and 3 deletions
+6
View File
@@ -235,3 +235,9 @@ def generate_image_hash(request, id: int):
series_image.save() series_image.save()
print(series_image) print(series_image)
@router.get("/view_dicom_tags/{hash}", auth=django_auth)
def view_dicom_tags(request, hash: str):
item = SeriesImage.objects.get(image_md5_hash=hash)
return item.get_dicom_json()
+8
View File
@@ -0,0 +1,8 @@
{% extends "atlas/base.html" %}
{% block content %}
<div id="single-dicom-viewer" class="dicom-viewer" data-images=["{{ image.image.url }}"] data-annotations=''>
</div>
{{image.get_dicom_info|safe}}
{% endblock %}
+1 -1
View File
@@ -73,7 +73,7 @@
Image details Image details
</summary> </summary>
{% for image in series.images.all %} {% for image in series.images.all %}
[{{ image.id }}] {{image.image.url}}, pos: {{image.position}}, {{image.upload_filename}} [{{ image.id }}] <a href='{% url "atlas:series_image_dicom" image.pk %}'>{{image.image.url}}</a>, pos: {{image.position}}, {{image.upload_filename}}
{% if image.image %} {% if image.image %}
+1 -1
View File
@@ -8,7 +8,7 @@
</div> </div>
{% endif %} {% endif %}
Click to select cases to import. If no series are selected all will be seleced/imported.<br/> Click to select cases to import. If no series are selected all will be selected/imported.<br/>
{% if series_list %} {% if series_list %}
+1 -1
View File
@@ -188,7 +188,7 @@ urlpatterns = [
path("structure/create", views.StructureCreate.as_view(), name="structure_create"), path("structure/create", views.StructureCreate.as_view(), name="structure_create"),
path("series/<int:pk>", views.series_detail, name="series_detail"), path("series/<int:pk>", views.series_detail, name="series_detail"),
path("series/", views.SeriesView.as_view(), name="series_view"), path("series/", views.SeriesView.as_view(), name="series_view"),
path("series/<int:pk>", views.series_detail, name="series_detail"), path("series_image/<int:pk>/dicom", views.series_image_dicom, name="series_image_dicom"),
path( path(
"series/<int:pk>/<int:finding_pk>", "series/<int:pk>/<int:finding_pk>",
views.series_detail, views.series_detail,
+5
View File
@@ -940,6 +940,11 @@ def series_order_dicom(request, pk):
return redirect("atlas:series_detail", pk=pk) return redirect("atlas:series_detail", pk=pk)
@login_required
def series_image_dicom(request, pk):
image = get_object_or_404(SeriesImage, pk=pk)
return render(request, "atlas/series_image_dicom.html", {"image": image})
@login_required @login_required
@user_is_author_or_atlas_series_checker @user_is_author_or_atlas_series_checker
+7
View File
@@ -195,6 +195,13 @@ class SeriesImageBase(models.Model):
ordering = ["position"] ordering = ["position"]
abstract = True abstract = True
def get_dicom_json(self):
try:
json = pydicom.read_file(self.image).to_json()
except pydicom.errors.InvalidDicomError:
return {}
return json
def get_dicom_info(self): def get_dicom_info(self):
try: try:
info = pretty_print_dicom(pydicom.read_file(self.image)) info = pretty_print_dicom(pydicom.read_file(self.image))