Advertisement
Guest User

Untitled

a guest
May 24th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.27 KB | None | 0 0
  1. import requests
  2. import subprocess
  3. from time import sleep
  4. import json
  5. import os
  6. import urllib.request as req
  7. from PIL import Image
  8.  
  9. import os, sys
  10.  
  11.  
  12. instances_url = 'http://localhost:8042/instances/'
  13. series_url = 'http://localhost:8042/series/'
  14. studies_url= 'http://localhost:8042/studies/'
  15. local_path = 'C:\\Users\\emico\\Desktop\\biomedical\\' #cartella principale dove memorizzare le immagini, file di input e output del parallel indexer e le similar images finali
  16. lireSolr_path = 'C:\\Users\\emico\\Desktop\\LireSolr' #path del progetto LireSolr dal quale runnare il task ParallelIndexer
  17. solr_path = 'C:\\solr-7.2.1\\bin' #path di Solr
  18. curl_path = 'C:\\curl-7.59.0-win64-mingw\\bin' #necessario se Windows non riconosce il comando curl
  19. cmp = "C:\\Users\\emico\\Desktop\\Query_Images\\provapolmone.jpg" #Inserire qui il percorso della query by example
  20. separator = '\\'
  21.  
  22. get_images = requests.get(instances_url).json() #recupera immagini/istanze
  23. patientPhog=[]
  24. patientJcd=[]
  25. studyPhog=[]
  26. studyJcd=[]
  27. seriesPhog=[]
  28. seriesJcd=[]
  29. instancePhog=[]
  30. instanceJcd=[]
  31.  
  32.  
  33. def getImagesFromPacs():
  34. for each in get_images:
  35. r = requests.get(instances_url+each+'').json() #get campi per ogni immagine
  36. #print(r)
  37. id_image = r["ID"]
  38. series = r["ParentSeries"] # uno dei campi è ParentSeries, che contiene la serie di riferimento di quella img
  39. s = requests.get(series_url+series+'').json() #get Serie specificata prima
  40. study = s["ParentStudy"] #la serie ha un campo Study che è lo studio cui appartiene
  41. stud = requests.get(studies_url+study+'').json() #get Studio
  42. patient_id = stud["PatientMainDicomTags"]["PatientID"] #lo studio ha un campo MainDicom Tag con l'id del paziente
  43.  
  44. filepath = os.path.join(local_path+patient_id+separator+study+separator+series)
  45.  
  46. if not os.path.exists(filepath): #crea cartella paziente->studio->serie->img con urlretrieve della lib urllib.request
  47. os.makedirs(filepath)
  48. req.urlretrieve(instances_url+each+'/preview', filepath+separator+id_image+".jpg")
  49.  
  50. #Resize delle immagini per renderle compatibili al ParallelIndexer
  51. im = Image.open(filepath+separator+id_image+".jpg")
  52. imResize = im.resize((512, 510), Image.ANTIALIAS)
  53. imResize.save(filepath+separator+id_image+".jpg",'JPEG', quality=100)
  54.  
  55. #Creazione file images.txt con i percorsi delle immagini da passare poi al ParallelIndexer
  56. def listImg():
  57. for root, dirs, files in os.walk(local_path):
  58. for file in files:
  59. if file.endswith('.jpg'):
  60. f= open(local_path+'images.txt', 'a')
  61. f.write(os.path.join(root, file+"\n"))
  62.  
  63. #Run del ParallelIndexer
  64. def callParallelIndexer():
  65. subprocess.call('gradlew runParallelIndexer', cwd=lireSolr_path,shell=True)
  66.  
  67. def solrConnection():
  68. subprocess.call('solr start', cwd=solr_path,shell=True)
  69. #Carica images-out.xml
  70. subprocess.call('curl http://localhost:8983/solr/lire/update -H "Content-Type: text/xml" --data-binary "<delete><query>*:*</query></delete>"', cwd=curl_path, shell=True)
  71. subprocess.call('curl http://localhost:8983/solr/lire/update -H "Content-Type: text/xml" --data-binary @'+local_path+'images-out.xml', cwd=curl_path, shell=True)
  72. subprocess.call('curl http://localhost:8983/solr/lire/update -H "Content-Type: text/xml" --data-binary "<commit/>"', cwd=curl_path, shell=True)
  73.  
  74. core = "lire"
  75. requestHandler = "lireq"
  76. wt= "json"
  77.  
  78. solrconn = requests.get('http://localhost:8983/solr/'+core+'/'+requestHandler+'?cmp='+cmp+'&q=*:*&wt='+wt).json()
  79. phog = solrconn["RisultatiPhogManhattan"]["docs"] #Si è scelto di estrarre come features phog e jcd
  80. jcd= solrconn["RisultatiJcdCosine"]["docs"]
  81.  
  82. #Prendo ad esempio i primi 20 risultati rilevanti di phog e di jcd.
  83. for p in phog[:19]:
  84. patientPhog.append(p["patient"])
  85. studyPhog.append(p["study"])
  86. seriesPhog.append(p["series"])
  87. instancePhog.append(p["instance"])
  88.  
  89.  
  90. for each in jcd[:19]:
  91. patientJcd.append(each["patient"])
  92. studyJcd.append(each["study"])
  93. seriesJcd.append(each["series"])
  94. instanceJcd.append(each["instance"])
  95.  
  96.  
  97. def getSimilarImagesPacs():
  98.  
  99. contjcd=0
  100. contphog=0
  101.  
  102. for each in instanceJcd:
  103. img = each.split(".")[0]
  104. pathimgjcd = os.path.join(local_path+"similarImages"+separator+"jcd"+separator+patientJcd[contjcd]+separator+studyJcd[contjcd]+separator+seriesJcd[contjcd])
  105. if not os.path.exists(pathimgjcd):
  106. os.makedirs(pathimgjcd)
  107. req.urlretrieve(instances_url+img+'/preview', pathimgjcd+separator+img+".jpg")
  108. contjcd = contjcd + 1
  109.  
  110.  
  111. for p in instancePhog:
  112. imgp = p.split(".")[0]
  113. pathimgp = os.path.join(local_path+separator+"similarImages"+separator+"phog"+separator+patientPhog[contphog]+separator+studyPhog[contphog]+separator+seriesPhog[contphog])
  114. if not os.path.exists(pathimgp):
  115. os.makedirs(pathimgp)
  116. req.urlretrieve(instances_url+imgp+'/preview', pathimgp+separator+imgp+".jpg")
  117. contphog = contphog + 1
  118.  
  119. #getImagesFromPacs()
  120. listImg()
  121. callParallelIndexer()
  122. solrConnection()
  123. getSimilarImagesPacs()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement