Пример #1
0
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)
Пример #4
0
    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)
Пример #5
0
def segment(index):
    DarknetPredict(gpu=str(index))