コード例 #1
0
ファイル: shrink.py プロジェクト: min20120907/Cell_RCNN_Qt
def shrink_roi(zipfile):
    # Declare the ROI File
    roi = read_roi_zip(zipfile)
    # Convert the roi list
    roi_list = list(roi.values())
    print("Shrinking the size quarter...")
    for a in roi_list:
        for b in range(len(a['x'])):
            a['x'][b] = int(a['x'][b] / 4)
        for c in range(len(a['y'])):
            a['y'][c] = int(a['y'][c] / 4)
    os.remove(zipfile)
    print("Export the data...")
    print(roi_list)
    for a in roi_list:
        roi_obj = ROIPolygon(a['x'], a['y'])
        with ROIEncoder(a['name'] + ".roi", roi_obj) as roi:
            roi.write()
        with ZipFile(zipfile, 'a') as myzip:
            myzip.write(a['name'] + ".roi")
            os.remove(a['name'] + ".roi")
コード例 #2
0
from PymageJ.roi import ROIEncoder, ROIRect

roi_obj = ROIRect(20, 30, 40,
                  50)  # Make ROIRect object specifing top, left, bottom, right
with ROIEncoder('roi_filepath.roi', roi_obj) as roi:
    roi.write()
コード例 #3
0
    def run(self):
        #WORK_DIR="/media/min20120907/Resources/Linux/MaskRCNN"
        ROOT_DIR = os.path.abspath(self.WORK_DIR)
        #self.append.emit(ROOT_DIR)
        # Import Mask RCNN
        sys.path.append(ROOT_DIR)  # To find local version of the library
        # import training functions
        import mrcnn.utils
        import mrcnn.visualize
        import mrcnn.visualize
        import mrcnn.model as modellib
        from mrcnn.model import log
        import cell
        # Directory to save logs and trained model
        MODEL_DIR = os.path.join(ROOT_DIR, "logs")
        # Path to Ballon trained weights
        # You can download this file from the Releases page
        # https://github.com/matterport/Mask_RCNN/releases
        CELL_WEIGHTS_PATH = self.weight_path  # TODO: update this path

        DEVICE = self.DEVICE
        config = cell.CustomConfig()

        # Override the training configurations with a few
        # changes for inferencing.
        def parseInt(a):
            filenum = ""
            if int(a) >= 100 and int(a) < 1000:
                filenum = "0" + str(a)
            elif int(a) >= 10 and int(a) < 100:
                filenum = "00" + str(a)
            elif int(a) >= 1 and int(a) < 10:
                filenum = "000" + str(a)
            elif int(a) >= 1000 and int(a) < 10000:
                filenum = str(a)
            else:
                filenum = "0000"
            return filenum

        class InferenceConfig(config.__class__):
            # Run detection on one image at a time
            GPU_COUNT = 1
            IMAGES_PER_GPU = 1

        config = InferenceConfig()
        config.display()

        # Device to load the neural network on.
        # Useful if you're training a model on the same
        # machine, in which case use CPU and leave the
        # GPU for training.

        # Inspect the model in training or inference modes
        # values: 'inference' or 'training'
        # TODO: code for 'training' test mode not ready yet
        TEST_MODE = "inference"

        # Create model in inference mode
        with tf.device(DEVICE):
            model = modellib.MaskRCNN(mode="inference",
                                      model_dir=MODEL_DIR,
                                      config=config)

        # Or, load the last model you trained
        weights_path = self.weight_path

        # Load weights
        self.append.emit("Loading weights " + str(weights_path))
        model.load_weights(weights_path, by_name=True)
        self.append.emit("loaded weights!")

        for d in os.walk(self.DETECT_PATH):
            for folder in d[1]:
                filenames = []
                self.append.emit("folder" + str(folder))
                for f in glob.glob(self.DETECT_PATH + "/" + str(folder) +
                                   "/*" + self.txt):
                    if os.path.splitext(f)[-1] == str(self.txt):
                        filenames.append(f)

                #bar = progressbar.ProgressBar(max_value=len(filenames))
                self.progressBar_setMaximum.emit(len(filenames))
                #filenames = sorted(filenames, key=lambda a : int(a.replace(self.format_txt.toPlainText(), "").replace("-", " ").split(" ")[6]))
                filenames.sort()
                file_sum = 0
                #self.append.emit(str(np.array(filenames)))
                for j in range(len(filenames)):
                    self.append.emit("files: " + str(filenames))
                    self.progressBar.emit(j)
                    image = skimage.io.imread(os.path.join(filenames[j]))
                    h, w, c = image.shape
                    dim_o = (h, w)
                    h = int(h * 4)
                    w = int(w * 4)
                    dim = (h, w)  # new size with 4x increased
                    resized = cv2.resize(image,
                                         dim,
                                         interpolation=cv2.INTER_AREA)
                    cv2.imwrite(os.path.join(filenames[j]), resized)
                    # Run object detection
                    results = model.detect([image], verbose=0)
                    r = results[0]
                    data = numpy.array(r['masks'], dtype=numpy.bool)
                    # self.append.emit(data.shape)
                    edges = []

                    for a in range(len(r['masks'][0][0])):

                        # self.append.emit(data.shape)
                        # data[0:256, 0:256] = [255, 0, 0] # red patch in upper left

                        mask = (numpy.array(r['masks'][:, :, a] * 255)).astype(
                            numpy.uint8)
                        print("image shape: ", mask.shape)
                        img = Image.fromarray(mask, 'L')

                        g = cv2.Canny(np.array(img), 10, 100)
                        contours, hierarchy = cv2.findContours(
                            mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
                        resized = cv2.resize(image,
                                             dim_o,
                                             interpolation=cv2.INTER_AREA)
                        cv2.imwrite(os.path.join(filenames[j], resized))
                        self.progressBar.emit(j)

                        for contour in contours:
                            file_sum += 1
                            x = [i[0][0] / 4 for i in contour]
                            y = [i[0][1] / 4 for i in contour]
                            if (len(x) >= 100):
                                roi_obj = ROIPolygon(x, y)
                                with ROIEncoder(
                                        parseInt(j + 1) + "-" +
                                        parseInt(file_sum) + "-0000" + ".roi",
                                        roi_obj) as roi:
                                    roi.write()
                                with ZipFile(
                                        self.ROI_PATH + "/" + str(folder) +
                                        "-" + str(self.conf_rate) + "-" +
                                        str(self.epoches) + "-" +
                                        str(self.step) + ".zip", 'a') as myzip:
                                    myzip.write(
                                        parseInt(j + 1) + "-" +
                                        parseInt(file_sum) + "-0000" + ".roi")
                                    self.append.emit("Compressed " +
                                                     parseInt(j + 1) + "-" +
                                                     parseInt(file_sum) +
                                                     "-0000" + ".roi")
                                os.remove(
                                    parseInt(j + 1) + "-" +
                                    parseInt(file_sum) + "-0000" + ".roi")
コード例 #4
0
    edges = []
    for a in range(len(r['masks'][0][0])):

        # print(data.shape)
        # data[0:256, 0:256] = [255, 0, 0] # red patch in upper left
        mask = (numpy.array(r['masks'][:, :, a] * 255)).astype(numpy.uint8)
        img = Image.fromarray(mask, 'L')
        g = cv2.Canny(np.array(img), 10, 100)
        contours, hierarchy = cv2.findContours(mask, cv2.RETR_TREE,
                                               cv2.CHAIN_APPROX_SIMPLE)
        bar.update(j)
        for contour in contours:
            file_sum += 1

            x = [i[0][0] for i in contour]
            y = [i[0][1] for i in contour]
            if (len(x) >= 100):
                roi_obj = ROIPolygon(x, y)
                with ROIEncoder(
                        parseInt(j + 1) + "-" + parseInt(file_sum) + "-0000" +
                        ".roi", roi_obj) as roi:
                    roi.write()
                with ZipFile("low-res-AI" + ".zip", 'a') as myzip:
                    myzip.write(
                        parseInt(j + 1) + "-" + parseInt(file_sum) + "-0000" +
                        ".roi")
                    #print("Compressed "+parseInt(j+1)+"-"+parseInt(file_sum)+"-0000"+".roi")
                os.remove(
                    parseInt(j + 1) + "-" + parseInt(file_sum) + "-0000" +
                    ".roi")