def segment(index, queue): """ 细胞分割 :param index: gpu编号 :param queue: 待识别含细胞图像 :return: """ seg = DarknetPredict(thresh=cfg.algo.thresh, hier_thresh=cfg.algo.hier_thresh, nms=cfg.algo.nms, gpu=str(index)) print('No.%s Cell Engine Staring...' % index) return seg.predict(queue)
def run(self): print("Initial DARKNET and XCEPTION model ...") total = len(self.tiff_lst) for index, tiff in enumerate(self.tiff_lst): # 获取大图文件名,不带后缀 tiff_basename, _ = os.path.splitext(os.path.basename(tiff)) tiff_basename = tiff_basename.replace(" ", "-") print('Process %s / %s %s ...' % (index + 1, total, tiff_basename)) # 切片文件存储路径 slice_save_path = os.path.join(self.slice_dir_path, tiff_basename) t0 = datetime.datetime.now() # 如果路径下切图文件不存在,执行切图 if not os.path.exists(slice_save_path): # 执行切图 ImageSlice(tiff, self.slice_dir_path).get_slices() # 获取切图文件路径 tif_images = FilesScanner(slice_save_path, ['.jpg']).get_files() t1 = datetime.datetime.now() print('TIFF SLICE COST: %s' % (t1 - t0)) seg_results = DarknetPredict().predict(tif_images) t2 = datetime.datetime.now() print('TIFF DARKNET COST: %s' % (t2 - t1)) # save segment result into csv xcep_pre = XceptionPreprocess(tiff) seg_csv = os.path.join(self.meta_files_path, tiff_basename + "_seg.csv") xcep_pre.write_csv(seg_results, seg_csv) # generate numpy array, it is the input of second stage classification algorithm cell_numpy, cell_index = xcep_pre.gen_np_array_csv(seg_csv=seg_csv) # run classification predictions = XceptionPredict().predict(np.asarray(cell_numpy)) t3 = datetime.datetime.now() print('XCEPTION COST: %s' % (t3 - t2)) # summarize two stages' result and generate a final csv clas = XceptionPostprocess() clas_dict = clas.convert_all(predictions=predictions, cell_index=cell_index) clas_csv = os.path.join(self.meta_files_path, tiff_basename + "_clas.csv") clas.write_csv(clas_dict, clas_csv) ############################### 获取审核图像 ###################################################### # GET VIEW CELL IMAGES clas.cut_cells_p_marked(tiff, clas_dict, self.cells_path, factor=0.2, N=2) t4 = datetime.datetime.now() print("TIFF %s TOTAL COST %s ..." % (tiff_basename, t4 - t0))
def yolo_predict(gpu_index, images_lst): """ Yolo 检测细胞位置 :param gpu_index: gpu id :param images_lst: image 路径列表 :return: dict: <x_y: [label, accuracy, xmin, ymin, xmax, ymax]> """ return DarknetPredict(str(gpu_index)).predict(images_lst)
def run(self): basename = os.path.splitext(os.path.basename(self.tif_name))[0] # slice slide slice_res = ImageSlice(self.tif_name, self.file_path).get_slices() tif_images = FilesScanner(slice_res['done'][0], postfix=".jpg").get_files() # print(tif_images) # run darknet seg_results = DarknetPredict().predict(tif_images) # save segment result into csv xcep_pre = XceptionPreprocess(self.tif_name) seg_csv = os.path.join(self.file_path, basename + "_seg.csv") xcep_pre.write_csv(seg_results, seg_csv) # generate numpy array, it is the input of second stage classification algorithm cell_numpy, cell_index = xcep_pre.gen_np_array_csv(seg_csv=seg_csv) # run classification predictions = XceptionPredict().predict(cell_numpy) print(len(cell_index), len(predictions)) # summarize two stages' result and generate a final csv clas = XceptionPostprocess() clas_dict = clas.convert_all(predictions=predictions, cell_index=cell_index) clas_csv = os.path.join(self.file_path, basename + "_clas.csv") clas.write_csv(clas_dict, clas_csv) # # generate cell jpgs, based on clas_dict # clas.cut_cells(self.tif_name, clas_dict, self.cell_path) # # add classification det probability to jpg name # clas.cut_cells_p(self.tif_name, clas_dict, self.cell_path) # add classification det probability to jpg name and add marked class_i if jpg is already is marked clas.cut_cells_p_marked(self.tif_name, clas_dict, self.cell_path, factor=0.2, N=2)
def segment(index): DarknetPredict(gpu=str(index))