def getRiMappedImage(case_id, index_1, index_2): #if username is in session then the call is web call, so use that username if 'username' in session and len(session['username']) > 0: username = session['username'] elif 'key' not in request.args or len(request.args['key']) == 0: abort(403) return "" else: auth_result = Auth.checkKeyValidity(request.args['key']) if not auth_result['valid']: abort(403) return "" username = auth_result['username'] if not PatientCases.userHasAuthentication(case_id, username): abort(403) return "" #TODO get the ri-buffer from a controller module and send it to the Response #for testing only f = PatientCases.findImage(case_id, index_1, index_2) if f == None: abort(404) buffer = Conversions(f['disk_filename']).dicomToRIColoredImage() return Response(buffer, mimetype='image/jpeg')
def analysisImage(case_id, index_1, index_2, analysis_id): res = AnalysisResult.find(analysis_id, case_id, index_1, index_2) if res == None: return abort(404) res.pop('_id', None) f = PatientCases.findImage(case_id, index_1, index_2) if f == None: return abort(404) filename = f['disk_filename'] boxes = [] for infected_area in res['infected_areas']: coordinate = infected_area['coordinate'] tumor_size = (infected_area['box_height'], infected_area['box_width']) points = infected_area['points'] rgb = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) boxes.append((coordinate, tumor_size, rgb, [(150, 150), [150, 151]])) buffer = Segment(filename, boxes).drawBox() return Response(buffer, mimetype='image/jpeg')
def getDataSet(cls): mlData = AnalysisResult.getMLData() res = [] for case in mlData: case.pop('_id') i = 0 case_id = case['case_id'] index_1 = case['index_1'] index_2 = case['index_2'] case.pop('case_id') case.pop('index_1') case.pop('index_2') image = PatientCases.findImage(case_id, index_1, index_2)['disk_filename'] pix = Converter(DicomDecoder(UPLOAD_DIR, image)).convertToPixelList() for infected_area in case['infected_areas']: infected_area.pop('points') infected_area.pop('detected_result') infected_area['average_chemical_composition'] = infected_area[ 'average_chemical_composition']['y'] #infected_area['image'] = pix if 'actual_result' in infected_area: res.append(infected_area)
def analyseSingleImage(case_id, index_1, index_2): result = {'error': {'error': False}} #if username is in session then the call is web call, so use that username if 'username' in session and len(session['username']) > 0: username = session['username'] elif 'key' not in request.args or len(request.args['key']) == 0: abort(403) return "" else: auth_result = Auth.checkKeyValidity(request.args['key']) if not auth_result['valid']: abort(403) return "" username = auth_result['username'] if not PatientCases.userHasAuthentication(case_id, username): abort(403) return "" f = PatientCases.findImage(case_id, index_1, index_2) if f == None: return abort(404) result['error']['error'] = False if 're_analysis' not in request.args or request.args[ 're_analysis'] == 'false': analysis = AnalysisResult.findByCase(case_id, index_1, index_2) if analysis == None: flag = True else: analysis['error'] = result['error'] analysis['analysis_image'] = BASE_URL + url_for( 'patient_cases_api.analysisImage', case_id=case_id, index_1=index_1, index_2=index_2, analysis_id=str(analysis['_id'])) #pop fields that are not required as response to api analysis_index = 0 for infected_area in analysis['infected_areas']: #pop fields that are not required as response to api infected_area.pop('points') infected_area.pop('box_width') infected_area.pop('box_height') #add the update url infected_area['update_actual_result_url'] = BASE_URL + url_for( 'patient_cases_api.uploadAnlysis', case_id=case_id, index_1=index_1, index_2=index_2, analysis_id=str(analysis['_id']), analysis_index=analysis_index) analysis_index += 1 #pop fields that are not required as response to api analysis.pop('_id') analysis.pop('case_id') analysis.pop('index_1') analysis.pop('index_2') return jsonify(analysis) else: flag = True if flag: dicom = Conversions(f['disk_filename']) cluster = SingleClusterer(dicom) result['infected_areas'] = [] infected_areas = [] AnalysisResult.delete(case_id, index_1, index_2) for _disease_key in cluster.diseases.keys(): disease_clusters = cluster.diseases_clusters[_disease_key] if len(disease_clusters.keys()) > 0: for disease_cluster_key in disease_clusters.keys(): c = disease_clusters[disease_cluster_key] c.compute() #c.searchForDiseases() i_area = {} i_area['detected_result'] = _disease_key i_area['coordinate'] = c.p1 i_area['area'] = c.getTightArea() i_area['tumor_width'] = c.tumorwidth i_area['tumor_height'] = c.tumorheight i_area['average_chemical_composition'] = { 'x': (0, 0.5, 0.8, 1.3, 1.4, 1.5, 1.6, 1.8, 2, 2.4, 2.6, 2.8, 3, 3.2, 3.4, 3.6, 3.7, 3.9, 4, 4.4), 'y': c.getAverageChemicalComposition(), 'labels': ('', '', 'LIP', '', 'LAC', '', '', '', 'NAA', 'GLM', '', '', 'CR', '', 'CHO', '', 'MI', '', 'CR2', '') } infected_areas.append( InfectedAreas((c.p1[0], c.p1[1]), c.getWidth(), c.getHeight(), c.tumorwidth, c.tumorheight, i_area['average_chemical_composition'], c.getArea(), _disease_key, c.elements)) result['infected_areas'].append(i_area) #result['diseases'].append(disease) if len(infected_areas) != 0: analysisResult = AnalysisResult(case_id, index_1, index_2, infected_areas) analysis_id = analysisResult.save() result['analysis_image'] = BASE_URL + url_for( 'patient_cases_api.analysisImage', case_id=case_id, index_1=index_1, index_2=index_2, analysis_id=analysis_id) analysis_index = 0 for infected_area in result['infected_areas']: infected_area['update_actual_result_url'] = BASE_URL + url_for( 'patient_cases_api.uploadAnlysis', case_id=case_id, index_1=index_1, index_2=index_2, analysis_id=analysis_id, analysis_index=analysis_index) analysis_index += 1 return jsonify(result)