ERK'2020, Portorož, 326-330 326 Spletna aplikacija za dostop do medicinskih slik v standardu DICOM ˇ Zan Regorˇ sek 1 , Samo Peniˇ c 1 , Miha Foˇ snariˇ c 2 , Janez ˇ Zibert 2 1 Fakuteta za elektrotehniko, Univerza v Ljubljani, Trˇ zaˇ ska 25, SI-1000 Ljubljana, Slovenija 2 Zdravstvena fakulteta, Univerza v Ljubljani, Zdravstvena pot 5, SI-1000 Ljubljana, Slovenija E-poˇ sta: samo.penic@fe.uni-lj.si Web application for accessing medical DICOM images Medical imaging is today mostly digitized. There are many picture archiving and communication systems (PACS) available and are often integrated with hospital informa- tion system (HIS) and/or radiological information system (RIS). In practice, however, patients still receive their medical images as a printed hardcopy; on a CD, DVD or USB drive, where they are often saved in a DICOM (Digital Imaging and Communications in Medicine) for- mat. This requires appropriate software and hardware to access them. In this work we present a lightweight application for remote access to medical images from a DICOM server. It comes with user management and medical image pre- view and is built on open-source components. It was developed for educational and scientific purposes at the University of Ljubljana, and can be used as a basis for an affordable solution, suitable for medical facilities per- forming diagnostic imaging, for example small medical clinics with ultrasonography. 1 Uvod Vse bolj prisotna digitalizacija omogoˇ ca tudi v medicin- ski slikovni diagnostiki posredovanje slik in drugih po- datkov o preiskavah pacientom in strokovnemu osebju na hiter, uˇ cinkovit in varen naˇ cin. Pri veˇ cini medicinskih slikovnih preiskav se podatki danes zajemajo v digitalni obliki in tudi zdravniki ter inˇ zenirji radiologije slike po- gosto pregledujejo in obdelujejo na raˇ cunalniku. V ta na- men so na voljo mnogi informacijski sistemi za poˇ siljanje in arhiviranje slik (angl. Picture Archiving and Commu- nication System – PACS). PACS je, predvsem v veˇ cjih zdravstvenih ustanovah, pogosto povezan z bolniˇ sniˇ cnim informacijskim sistemom (angl. hospital information sy- stem – HIS) in/ali radioloˇ skim informacijskim sistemom (RIS) (slika 1) [1, 2]. V praksi pacient ˇ se vedno veˇ cinoma dobi slike kar natisnjene v fiziˇ cni obliki ali pa shranjene na zgoˇ sˇ cenko ali USB kljuˇ cek. Te so navadno shranjene v formatu standarda digitalnega slikanja in komunikacije v medicini (angl. Digital Imaging and Communications in Medicine – DICOM) [3]. Tako za pregled slik ˇ se vedno potrebu- jemo ustrezno strojno in programsko opremo, pri ˇ cemer smo praviloma omejeni na uporabo raˇ cunalnika, saj na Slika 1: Primer integracije sistema PACS v celostno reˇ sitev, ki nudi zajem medicinskih diagnostiˇ cnih slik, njihovo hrambo in nadaljnjo obdelavo ter integracijo v druge informacijske sis- teme, kot sta HIS in RIS [1]. mobilnih napravah primerne programske opreme za pre- gled slik nimamo. Ob tem se postavlja tudi vpraˇ sanje hrambe in varnosti podatkov ter obremenjevanja okolja. Nenazadnje prenosni mediji predstavljajo tudi dodaten stroˇ sek. V prispevku predstavljamo preprosto spletno aplika- cijo za dostop do medicinskih slik, ki so zbrane v central- nem streˇ zniku v DICOM formatu. Aplikacija je s svojimi odprtokodnimi komponentami primerna za pedagoˇ ske in raziskovalne namene Univerze v Ljubljani in je osnova za razvoj cenovno dostopne storitve predvsem v manjˇ sih medicinskih diagnostiˇ cnih ustanovah, kot so na primer ambulante z ultrazvoˇ cno diagnostiko. Prispevek je organiziran tako, da v naslednjem po- glavju opiˇ semo zasnovo aplikacije, njen uporabniˇ ski vme- snik in platformo na kateri je zgrajena, ˇ cemur sledi kratka razprava o razvoju aplikacije in zakljuˇ cki. 2 Aplikacija 2.1 DICOM Standard DICOM organizira medicinske slike po hierar- hiji pacient! ˇ studija! serija! instanca. Aplikacija obravnava omenjene ravni po naslednji ideji: • Pacient: unikatna identiteta pacienta; 327 • ˇ Studija: specifiˇ cno podroˇ cje/razlog zdravljenja (npr. zlom kosti, noseˇ cnost, neznani glavoboli ipd.), ki poteka dlje ˇ casa in je skupek veˇ c individualnih pre- gledov – serij; • Serija: posamezen pregled v ambulanti, ki je del postopka zdravljenja. Pregled lahko sicer razde- limo na dve seriji, v kolikor sta bili uporabljeni dve razliˇ cni modalnosti. Tipiˇ cno poimenovanje bi bilo npr.: 1. pregled celjenja kosti - rentgen , 16. 5. 2020; 2. pregled celjenja kosti - rentgen, 18. 6. 2020; 2. pregled celjenja kosti - MRI, 18. 6. 2020; • Instanca: ob posameznem pregledu se zdravnik odloˇ ci posneti sliko iz veˇ c zornih kotov ali pa z razliˇ cnimi nastavitvami slikovne aparature. Vsaka posamezna slika predstavlja eno instanco, ki nado- mesti fiziˇ cno sliko ali posamezno datoteko na pre- nosnem mediju. V primeru CT posnetka lahko ena instanca predstavlja posamezno rezino. 2.2 Uporabniˇ ski vmesnik Uporabnika najprej priˇ caka vpisno okence (slika 2). Vsak uporabnik ima unikatno identifikacijsko ˇ stevilko, v pri- meru pacienta morda kar ˇ stevilko zdravstvenega zavaro- vanja in osebno geslo. Uporabnik je lahko pacient, ki ima dostop le do lastnih medicinskih slik, ali zdravnik, ki ima dostop do slik vseh svojih pacientov. Tako je zdravniku ob vpisu ponujen seznam pacientov, medtem ko je paci- ent takoj usmerjen na zavihek ˇ studije. Uporabnik izbere ime pacienta (ˇ studije, serije, instance) in izbiro potrdi s klikom na gumb (slika 3). S streˇ znika Orthanc[4] se prenesejo ustrezni podatki, nato pa se od- pre nov zavihek naslednje ravni. Za veˇ cino uporabnikov je najbolj zanimiv zavihek serija, ki omogoˇ ca tekoˇ c pre- gled vseh instanc posamezne ˇ studije. S klikom na “Poglej preiskavo v novem zavihku” se odpre spletni prikazoval- nik Orthanc, v katerem lahko s koleˇ sˇ ckom na miˇ ski dr- simo skozi instance. ˇ Ce miˇ sko s pritisnjenim levim gum- bom vodimo levo ali desno po sliki, spreminjamo kon- trast in svetlost posamezne instance. Vsako instanco, serijo ali ˇ studijo (vse serije) lahko prenesemo v obliki arhiva zip. Preneˇ sene datoteke so datoteke dcm (format DICOM), za katere potrebujemo ustrezno programsko opremo (npr. pregledovalnik medi- cinskih slik Weasis [5]). Preneˇ sene datoteke dcm so ne- stisnjena oblika medicinske slike, ki jo ustvaril posame- zen slikovni aparat. Posamezna datoteka je zato lahko ve- lika do nekaj deset MB. Za paciente veˇ cinoma ne prinaˇ sa dodatne vrednosti, zdravniku pa omogoˇ ca naknadno pri- lagajanje veˇ c parametrov posnetka. Zavihek “Instanca” prikaˇ ze posamezno instanco v for- matu png. Na levi strani je ves ˇ cas prisotna orientacijska razpredelnica, ki uporabnika seznani s trenutno izbranimi ravnmi hierarhije DICOM (slika 4). 2.3 Platforma R Shiny Aplikacija za oddaljen dostop do digitalnih izvidov po standardu DICOM je napisana v statistiˇ cnem program- skem jeziku R, razˇ sirjenim s knjiˇ znico Shiny [6]. Sle- Slika 2: Zgoraj: Prijavno okno. Ker je aplikacija DEMO razliˇ cica, so objavljeni tudi uporabniˇ ski podatki. Spodaj: Izbira pacienta. Seznam pacientov je v obliki padajoˇ cega seznama. dnja omogoˇ ca postavitev spletne aplikacije brez poglo- bljenega znanja programiranja spletnih strani in vsebuje uporabniˇ ski vmesnik (angl. front-end) in streˇ zniˇ ski del kode (angl. back-end). Osnovna struktura aplikacije Shiny R: library(shiny) # Define UI for application ui <- fluidPage() # Define server logic server <- function(input, output) {} # Run the application shinyApp(ui = ui, server = server) Spletna aplikacija v R (Shiny) je razdeljena na dva dela – na strukturi server in ui, ki se kot argumenta podata funkcijishinyApp(). Slednja zaˇ zene streˇ znik, ki nudi dostop do aplikacije. Na osebnem raˇ cunalniku v ˇ casu razvoja za to poskrbi kar razvojno okoljeRStudio, na javnem streˇ zniku pa potrebujemoRStudio Server. Vui je koda za uporabniˇ ski vmesnik. Doloˇ citi mo- ramo osnovno postavitev strani, morebitno razdelitev na zavihke in poloˇ zaje modulov s katerimi uporabnik upra- vlja (gumbi, meniji, lokacije slik,. . . ). Vsak modul se 328 Slika 3: Zgoraj: Zavihek serija. Spodaj: spletni prikazovalnik Orthanc. Slika 4: Trenutno izbrane DICOM ravni na zavihku instanca. doloˇ ci v obliki funkcije, npr. tabPanel(args), actionButton(args),selectInput(args). Funkcijaui se izvede le enkrat, ko se stran naloˇ zi, nato pa se ne izvaja veˇ c. To pomeni, da se moduli kasneje ne spreminjajo glede na interakcije z uporabnikom, temveˇ c je njihov izgled (slika), funkcija (gumb) ali vsebina (meni) doloˇ cena ob naloˇ zitvi aplikacije. To omogoˇ ca izdelavo strani z le izrazito deterministiˇ cno strukturo in podatki, ki so na voljo ˇ ze ob zagonu aplikacije ter se nato ne spre- minjajo veˇ c. Za prikaz dinamiˇ cnih podatkov je reˇ sitev uporaba funkcijeuiOutput(), ki osrednji strukturiui pove, da bo na doloˇ cenem mestu nek element, ki se bo spreminjal glede na uporabnikove vnose. Tako se ob na- loˇ zitvi strani za doloˇ cen element le rezervira geometrijski prostor v aplikaciji, vsebina pa se dinamiˇ cno oblikuje in spreminja med uporabe aplikacije. Uporaba funkcijeuiOutput(): tabPanel( title = div("PACIENT", style="font-family:verdana;"), value = "1", column( width = 12, uiOutput("selectPatient"), uiOutput("toStudyButton"), hr(), uiOutput ("launchPatienthWeasisButton"), ), fluidRow(), br() ) V naˇ si aplikaciji smo se odloˇ cili ˇ se za dinamiˇ cno do- dajanje oz. odstranjevanje zavihkov glede na napredova- nje uporabnika po hierarhiji standarda DICOM. Funkcije, ki jih proˇ zi uporabnik s klikom na gumb, kliˇ cejo funkcijo addPanel(), ki znotraj aplikacije naloˇ zi dodaten zavi- hek, o katerem pred klikom ni bilo niˇ c znanega. Tako smo iz struktureui praktiˇ cno vso kodo, ki doloˇ ca izgled, pre- selili v strukturoserver, saj je stran izjemno dinamiˇ cna in nedeterministiˇ cna. V strukturi server se poleg funkcij za izgradnjo omenjenih dinamiˇ cnih elementov nahaja vsa logika apli- kacije. Ta vkljuˇ cuje funkcije, ki se odzivajo na klike gum- bov in izvajajo klice funkcij, ki iz Orthanc streˇ znika pre- nesejo podatke o pacientu, ˇ studiji, seriji oz. instanci in jih nato implementirajo v padajoˇ cih menijih in gumbih oz. prikaˇ zejo kot slike, ter dodajo ali odstranijo zavihke. Strukturaserver tako predstavlja 95% vse programske kode. Aplikacija v okviru razˇ siritveshinydashboard vse- buje tudi vpisno okence, ki je pravzaprav neodvisna pred- aplikacija, ki ob uspeˇ sni avtentikaciji naloˇ zi osrednjo apli- kacijo. Ob vpisu se glede na uporabniˇ sko ime doloˇ ci tudi stopnja dostopa v obliki spremenljivkepermission, ki se uporablja kot indikator v osrednji aplikaciji za omeji- tev modulov, ki se naloˇ zijo. Uporabnikovi prijavni po- datki so v naˇ sem primeru definirani kar v programski kodi, vendar omenjena razˇ siritev omogoˇ ca tudi prever- janje iz podatkovne baze. Programiranje z vgrajenimi funkcijami je sicer precej omejeno, saj je razˇ siritev Shiny namenjena predvsem predstavitvi statistiˇ cnih podatkov in ne toliko sploˇ snih po- datkov, prenesenih iz drugih virov. Omogoˇ ca tudi doda- janje kode CSS za oblikovanje in kode JavaScript za do- dajanje manjˇ sih funkcionalnosti. Uporaba HTML style znaˇ cke za dodajanje kode CSS: div(paste( reacVals$instances$instanceNumber [instIdx(input,reacVals)]), style="font-family:verdana; 329 font-style: italic;" ), hr(), downloadButton( outputId = "downloadInstance", label = "Prenesi instanco kot .dcm", style = "vertical-align: middle; font-family:verdana; width:50%;" ) Baza podatkov za aplikacijo je streˇ znik Orthanc. Ort- hanc ima pripravljen aplikacijski vmesnik REST (iz angl. “Representational state transfer”), tako imenovan REST API, ki omogoˇ ca komuniciranje s streˇ znikom. Za upo- rabo zahtev REST moramo v skripto R jezika dodati knji- ˇ znicohttr. Naˇ sa aplikacija podatke le prenaˇ sa, tako da uporablja le GET zahtevo v obliki funkcije GET(). Funk- cija vrne odgovor iz streˇ znika, ki je v primeru Orthanca zapakiran v formatu JSON (skrajˇ sano od angl. “Java- Script Object Notation”). V tem primeru zna R zapisati vsebino odgovora JSON v spremenljivko, do vsebine po- sameznih znaˇ ck znotraj odgovora JSON pa se enostavno dokopljemo tako, da zaporedoma piˇ semo znaˇ cke. Alter- nativa je, da uporabimo funkcijo, ki nam ˇ zeleno znaˇ cko izluˇ sˇ ci iz odgovora, npr. sstatus code(response). GET zahteva za prenos podatkov o pacientu: response = GET( paste("https://pacs.zf.uni-lj.si/ orthanc/patients/", patientIDs[i],sep=""), authenticate(username,password) ) patientName = content(response) $MainDicomTags$PatientName patID = content(response) $MainDicomTags$PatientID status = status_code(response) Funkcije iz httr knjiˇ znice namenjene komunicira- nju sprejmejo tudi opcijski argumentauthenticate(), kjer podamo podatke za dostop do zaˇ sˇ citenega streˇ znika. Prenos datotek se opravi z uporabo funkcije jezikaR download(). Prenos instance v obliki slike v formatu png: outfile <- tempfile(fileext = ’.png’) src=paste("https://", username,":", password, "@pacs.zf.uni-lj.si /orthanc/instances/", instanceID,"/preview", sep = "" ) download.file(src, outfile, mode = ’wb’) 3 Razprava in zakljuˇ cek Tekom razvoja aplikacije smo naleteli na nekaj teˇ zav, saj je R Shiny zasnovan predvsem za prijazen prikaz po- datkov generiranih v jeziku R in ne toliko za oblikova- nje sploˇ snih spletnih aplikacij. Tudi dokumentacija za knjiˇ znico Shiny je precej skopa. So pa toliko bolj bo- gati spletni forumi, kar daje vedeti, da je Shiny pogo- sto uporabljano okolje tudi za izdelavo spletnih aplikacij. Hkrati omogoˇ ca oblikovanje s kaskadnimi stilskimi pod- logami (CSS) in dodajanje JavaScript kode. Zaradi struk- ture jezika R (Shiny) daljˇ sa koda sicer hitro postane nepregledna, hkrati pa deljenje aplikacije na veˇ c datotek ni preveˇ c razvijalcu prijazno. Povzeli bi lahko, da je R Shiny primeren za oblikovanje enostavnejˇ sih aplikacij za prikaz veˇ cje koliˇ cine podatkov in manj za specifiˇ cne aplikacije z veliko interakcije z uporabnikom. V naˇ sem primeru je sicerR Shiny veˇ c kot zadostoval in na koncu je nastala konceptualna aplikacija, ki izpolnjuje vse na zaˇ cetku zastavljene cilje. Razvili smo preprosto odprtokodno spletno aplikacijo za dostop do medicinskih slik v formatu DICOM, ki je lahko tudi osnova za razvoj cenovno dostopne storitve, ki morda najde svoje mesto predvsem v manjˇ sih medicin- skih ustanovah s slikovno diagnostiko. 4 Zahvala Priˇ cujoˇ ce delo je v doloˇ ceni meri del projekta Odprtoko- dni sistem za zajem in obdelavo medicinskih slik iz ul- trazvoˇ cnih diagnostiˇ cnih naprav po DICOM standardu, ki smo ga med marcem in junijem 2020 izvedli v okviru programa Po kreativni poti do znanja. Zato se avtorji za- hvaljujemo Javnemu ˇ stipendijskemu, razvojnemu, inva- lidskemu in preˇ zivninskemu skladu RS, Ministrstvu za izo- braˇ zevanje, znanost in ˇ sport RS, Evropskemu socialnemu skladu EU, Zdravstveni fakulteti UL ter Univerzi v Lju- bljani za finanˇ cno in logistiˇ cno podporo. In nenazadnje seveda tudi vsem ostalim sodelujoˇ cim na projektu: pod- jetju ECHOSON d.o.o. in ˇ studentom Manci Piˇ sek, Pii Pi- kelj, Sari Kidriˇ c, Ninu Kleindienstu in Nejcu Klanjˇ sˇ cku. Literatura [1] A. Gereˇ cnik, Implementacijao doprtokodnih sistemov PACS IN RIS. Ljubljana: Zdravstvena fakulteta, 2020. [2] G. Smith, “Introduction to RIS and PACS,” in PACS (K. Dreyer, J. Thrall, D. Hirschorn, and A. Mehta, eds.), pp. 9–25, Springer, 2006. [3] Wikipedia, “DICOM — Wikipedia, the free encyclopedia.” http://en.wikipedia.org/w/index.php? title=DICOM&oldid=955326347, 2020. [Spletna razliˇ cica; dostop 19. julija 2020]. [4] S. Jodogne and Orthanc community, “Orthanc.” https: //www.orthanc-server.com/, 2012–now. Odprto- kodna programska oprema. [Spletna razliˇ cica; dostop 19. julija 2020]. [5] University Hospital of Geneva, “Weasis medical viewer.” https://nroduit.github.io/en/. Odprtokodna programska oprema. [Spletna razliˇ cica; dostop 19. julija 2020]. 330 [6] R Studio, “Shiny from R Studio.” https://shiny. rstudio.com/. Odprtokodna programska oprema. [Spletna razliˇ cica; dostop 19. julija 2020].