Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import requests
- import subprocess
- from time import sleep
- import json
- import os
- import urllib.request as req
- from PIL import Image
- import os, sys
- instances_url = 'http://localhost:8042/instances/'
- series_url = 'http://localhost:8042/series/'
- studies_url= 'http://localhost:8042/studies/'
- 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
- lireSolr_path = 'C:\\Users\\emico\\Desktop\\LireSolr' #path del progetto LireSolr dal quale runnare il task ParallelIndexer
- solr_path = 'C:\\solr-7.2.1\\bin' #path di Solr
- curl_path = 'C:\\curl-7.59.0-win64-mingw\\bin' #necessario se Windows non riconosce il comando curl
- cmp = "C:\\Users\\emico\\Desktop\\Query_Images\\provapolmone.jpg" #Inserire qui il percorso della query by example
- separator = '\\'
- get_images = requests.get(instances_url).json() #recupera immagini/istanze
- patientPhog=[]
- patientJcd=[]
- studyPhog=[]
- studyJcd=[]
- seriesPhog=[]
- seriesJcd=[]
- instancePhog=[]
- instanceJcd=[]
- def getImagesFromPacs():
- for each in get_images:
- r = requests.get(instances_url+each+'').json() #get campi per ogni immagine
- #print(r)
- id_image = r["ID"]
- series = r["ParentSeries"] # uno dei campi è ParentSeries, che contiene la serie di riferimento di quella img
- s = requests.get(series_url+series+'').json() #get Serie specificata prima
- study = s["ParentStudy"] #la serie ha un campo Study che è lo studio cui appartiene
- stud = requests.get(studies_url+study+'').json() #get Studio
- patient_id = stud["PatientMainDicomTags"]["PatientID"] #lo studio ha un campo MainDicom Tag con l'id del paziente
- filepath = os.path.join(local_path+patient_id+separator+study+separator+series)
- if not os.path.exists(filepath): #crea cartella paziente->studio->serie->img con urlretrieve della lib urllib.request
- os.makedirs(filepath)
- req.urlretrieve(instances_url+each+'/preview', filepath+separator+id_image+".jpg")
- #Resize delle immagini per renderle compatibili al ParallelIndexer
- im = Image.open(filepath+separator+id_image+".jpg")
- imResize = im.resize((512, 510), Image.ANTIALIAS)
- imResize.save(filepath+separator+id_image+".jpg",'JPEG', quality=100)
- #Creazione file images.txt con i percorsi delle immagini da passare poi al ParallelIndexer
- def listImg():
- for root, dirs, files in os.walk(local_path):
- for file in files:
- if file.endswith('.jpg'):
- f= open(local_path+'images.txt', 'a')
- f.write(os.path.join(root, file+"\n"))
- #Run del ParallelIndexer
- def callParallelIndexer():
- subprocess.call('gradlew runParallelIndexer', cwd=lireSolr_path,shell=True)
- def solrConnection():
- subprocess.call('solr start', cwd=solr_path,shell=True)
- #Carica images-out.xml
- 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)
- 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)
- subprocess.call('curl http://localhost:8983/solr/lire/update -H "Content-Type: text/xml" --data-binary "<commit/>"', cwd=curl_path, shell=True)
- core = "lire"
- requestHandler = "lireq"
- wt= "json"
- solrconn = requests.get('http://localhost:8983/solr/'+core+'/'+requestHandler+'?cmp='+cmp+'&q=*:*&wt='+wt).json()
- phog = solrconn["RisultatiPhogManhattan"]["docs"] #Si è scelto di estrarre come features phog e jcd
- jcd= solrconn["RisultatiJcdCosine"]["docs"]
- #Prendo ad esempio i primi 20 risultati rilevanti di phog e di jcd.
- for p in phog[:19]:
- patientPhog.append(p["patient"])
- studyPhog.append(p["study"])
- seriesPhog.append(p["series"])
- instancePhog.append(p["instance"])
- for each in jcd[:19]:
- patientJcd.append(each["patient"])
- studyJcd.append(each["study"])
- seriesJcd.append(each["series"])
- instanceJcd.append(each["instance"])
- def getSimilarImagesPacs():
- contjcd=0
- contphog=0
- for each in instanceJcd:
- img = each.split(".")[0]
- pathimgjcd = os.path.join(local_path+"similarImages"+separator+"jcd"+separator+patientJcd[contjcd]+separator+studyJcd[contjcd]+separator+seriesJcd[contjcd])
- if not os.path.exists(pathimgjcd):
- os.makedirs(pathimgjcd)
- req.urlretrieve(instances_url+img+'/preview', pathimgjcd+separator+img+".jpg")
- contjcd = contjcd + 1
- for p in instancePhog:
- imgp = p.split(".")[0]
- pathimgp = os.path.join(local_path+separator+"similarImages"+separator+"phog"+separator+patientPhog[contphog]+separator+studyPhog[contphog]+separator+seriesPhog[contphog])
- if not os.path.exists(pathimgp):
- os.makedirs(pathimgp)
- req.urlretrieve(instances_url+imgp+'/preview', pathimgp+separator+imgp+".jpg")
- contphog = contphog + 1
- #getImagesFromPacs()
- listImg()
- callParallelIndexer()
- solrConnection()
- getSimilarImagesPacs()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement