def get_similar_image(gid): global images if len(gid_list) == 0: return jsonify(finallyDone=True) index = None length = len(listCursor) #Loop to find location of given gid in sorted list for i in range(length): if listCursor[i]['gid'] == gid: index = i break closeImages = [] key = 1 while len(closeImages) < 10: #Looping till an unlabeled image found option1 = listCursor[min(index+key,length-1)] option2 = listCursor[max(index-key,0)] if option1['gid'] in gid_list and not images[option1['gid']][1] and min(index+key,length-1) not in closeImages: closeImages.append(min(index+key,length-1)) if option2['gid'] in gid_list and not images[option2['gid']][1] and max(index-key,0) not in closeImages: closeImages.append(max(index-key,0) ) key += 1 entropyDistance = [(listCursor[x]['entropy']-listCursor[index]['entropy'])**2 for x in closeImages] closest = np.argmin(entropyDistance) nextGid = listCursor[closeImages[closest]]['gid'] images[nextGid][1] = True #Opening next file to read info from fileName = 'annotation_info/' + ibs.get_image_gnames(nextGid) + '.JSON' with open(fileName) as data_file: jsonData = json.load(data_file) src = return_src(ibs.get_image_paths(nextGid)) img = ibs.get_images(nextGid) return jsonify(image=src,id=nextGid,dim1=img.shape[0],dim2=img.shape[1],FinallyDone=False,data=jsonData,totalImages=totalImages,imagesLeft=len(gid_list))
def runImage(gid,ibs,network_fn): imageLocations = "/home/zach/data/Flukes/CRC_combined constrained/" name = imageLocations+ibs.get_image_gnames(gid) img = cv2.imread(name) img_normed = prepare_img(img) img_output = network_fn(img_normed) img_output = img_output.swapaxes(1,3)[0] args = np.argmax(img_output, axis=2) background_mask = args == 2 whale_mask = args == 1 seam_mask = args == 0 img_output[:,:][background_mask] = [255,0,0] img_output[:,:][whale_mask] = [0,255,255] img_output[:,:][seam_mask] = [255,0,255] gradientImg = np.copy(img_output) gradientImg[:,:][background_mask] = 255 gradientImg[:,:][whale_mask] = 0 gradientImg[:,:][seam_mask] = 255 gradientImg = gradientImg.astype(np.uint8) gradientvalue = float(np.average(np.absolute(cv2.Laplacian(gradientImg,cv2.CV_64F)))) entrpy = entropy(img_output.swapaxes(0,2)) entrpy = np.average(entrpy) bins = [] bins.append(np.sum(background_mask)) bins.append(np.sum(whale_mask)) bins.append(np.sum(seam_mask)) cv2.imwrite('tmp.png',img_output) src = return_src('tmp.png') return {'bins':bins,'gid':gid,'png':src,'version':nextVersion,'entropy':float(entrpy),'gradient':gradientvalue}
def get_next_image(): global index global images if len(gid_list) == 0: return jsonify(finallyDone=True) while images[gid_list[index]][1]: index += 1 if index == len(gid_list): index = 0 gid = gid_list[index] #Opening stored data from JSON file fileName = 'annotation_info/' + ibs.get_image_gnames(gid) + '.JSON' with open(fileName) as data_file: jsonData = json.load(data_file) src = return_src(ibs.get_image_paths(gid)) img = ibs.get_images(gid) images[gid_list[index]][1] = True index += 1 if index == len(gid_list): index == 0 #sending information to client return jsonify(image=src,id=gid,dim1=img.shape[0],dim2=img.shape[1],FinallyDone=False,data=jsonData,totalImages=totalImages,imagesLeft=len(gid_list))