{"metadata":{"kernelspec":{"name":"ir","display_name":"R","language":"R"},"language_info":{"name":"R","codemirror_mode":"r","pygments_lexer":"r","mimetype":"text/x-r-source","file_extension":".r","version":"4.0.5"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"options(\"max.print\"=300)\nlibrary(reticulate)\nlibrary(tidyverse)\nlibrary(plotly)\nlibrary(data.table)\nlibrary(htmlwidgets)\nlibrary(stringr)\nlibrary(tensorflow)\nlibrary(keras)\nlibrary(tfdatasets)\nlibrary(purrr)\nlibrary(oro.dicom)\nlibrary(imager)\nlibrary(IRdisplay)\nSIZE = 512L\n#gpu_devices =  tf$config$experimental$list_physical_devices(\"GPU\")\n#tf$config$experimental$set_memory_growth(gpu_devices[[1]], T)\n\nti<-read_csv( \"../input/siim-covid19-detection/train_image_level.csv\")\nts<- read_csv(\"../input/siim-covid19-detection/train_study_level.csv\")\nsub<- read_csv(\"../input/siim-covid19-detection/sample_submission.csv\")\n\nTRAIN<-\"../input/siim-covid19-detection/train\"\nTEST<-\"../input/siim-covid19-detection/test\"\nBASE<- \"./\"","metadata":{"_uuid":"051d70d956493feee0c6d64651c6a088724dca2a","_execution_state":"idle","execution":{"iopub.status.busy":"2021-07-11T14:25:45.100653Z","iopub.execute_input":"2021-07-11T14:25:45.132552Z","iopub.status.idle":"2021-07-11T14:25:45.259413Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pyfiles1<-c(\"gdcm\",\"pydicom\")\npy_install(pyfiles1)","metadata":{"execution":{"iopub.status.busy":"2021-07-11T14:34:46.6904Z","iopub.execute_input":"2021-07-11T14:34:46.692297Z","iopub.status.idle":"2021-07-11T14:34:46.731331Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## Credit: https://github.com/pydicom/pydicom/issues/319\n\n## https://www.kaggle.com/raddar/convert-dicom-to-np-array-the-correct-way\n\npydicom<-import(\"pydicom\", convert = F)\napply_voi_lut<- pydicom$pixel_data_handlers$apply_voi_lut\nnp<- import(\"numpy\", convert = T)\nnpr<- import(\"numpy\", convert = F)\nreadxr<- function(path, voi_lut = T, fix_monochrome = T){\n   dicom = pydicom$read_file(path)\n\n    # VOI LUT (if available by DICOM device) is used to transform raw DICOM data to\n    # \"human-friendly\" view\n    if (voi_lut){\n        data = apply_voi_lut(dicom$pixel_array, dicom)\n    } else{\n        data = dicom$pixel_array\n    }\n     data<-np$uint16(data)\n    # depending on this value, X-ray may look inverted - fix that:\n    if (fix_monochrome & dicom$PhotometricInterpretation == \"MONOCHROME1\"){\n     data <- np$amax(data) - data\n    }\n    data <- data -  np$min(data)\n    data <- data / np$max(data)\n    data <- (data * 255) %>% tf$constant(.,dtype = tf$float32)%>%\n      tf$expand_dims(.,axis= 2L) %>%\n      tf$image$resize(., list(SIZE,SIZE))\n     \n    return (data)\n\n}\n\nread_xray<-possibly(.f = readxr, otherwise = NULL)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nstudy<-file.path(TRAIN,ti$StudyInstanceUID)  \nimgs<- study %>% map(.,function(x)list.files(x,recursive = T, full.names = T))  %>% unlist","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"getStudy<- function(x){\n  x %>% strsplit(\"/\") %>% .[[1]] %>% .[5] %>% map(., function(x)paste0(x,\"_study\")) %>% .[[1]]\n}\n\ngetImage<- function(x){\n  x %>% strsplit(\"/\") %>% .[[1]] %>% .[7] %>% map(., function(x)paste0(x,\"_image\") %>% gsub(\".dcm\",\"\",.)) %>% .[[1]]\n}\nmakeName<- function(x) {\n  out<- paste0(getStudy(x),\"-\", getImage(x), \".png\")\n}","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x<- read_xray(imgs[121])  %>% as.array %>% .[,,1] \nfig<- plot_ly(z= ~x)\nfig<- fig %>% add_surface()\nf <-\"./plot2.html\"\nsaveWidget(fig, file.path(f))\ndisplay_html('<iframe src=\"./plot2.html\" align=\"center\" width=\"100%\" height=\"500\" frameBorder=\"0\"></iframe>')","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"savedir<-\"./images\"\nif( !dir.exists(savedir)){\n    dir.create(savedir,recursive=T)\n}\nfor( i in 1:length(imgs)){\n    im<- read_xray(imgs[[i]])\n    if(!is.null(im)){\n        image_array_save(im,file.path(savedir,paste0(getImage(imgs[i]),\".png\")  ) )\n    }\n    \n}","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#ps<- ts$id %>% gsub(\"_study\",\"\",.) %>% unique  %>% map(., function(x)grep(x,imgs, value = T))\nsavedir1<-\"./study\"\nif( !dir.exists(savedir1)){\n    dir.create(savedir1,recursive=T)\n}\nfor( i in 1:length(imgs)){\n    im<- read_xray(imgs[[i]])\n    if(!is.null(im)){\n        image_array_save(im,file.path(savedir1,paste0(makeName(imgs[i]))  ) )\n    }\n    \n}","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"zip(zipfile=\"images\",files =savedir)\nzip(zipfile=\"study\",files =savedir1)\nunlink(savedir, recursive =T)\nunlink(savedir1, recursive =T)","metadata":{},"execution_count":null,"outputs":[]}]}