예제 #1
0
def main(args):
    logger = logging.getLogger(__name__)

    merge_cfg_from_file(args.cfg)
    cfg.NUM_GPUS = 1
    args.weights = cache_url(args.weights, cfg.DOWNLOAD_CACHE)
    assert_and_infer_cfg(cache_urls=False)

    assert not cfg.MODEL.RPN_ONLY, \
        'RPN models are not supported'
    assert not cfg.TEST.PRECOMPUTED_PROPOSALS, \
        'Models that require precomputed proposals are not supported'

    model = infer_engine.initialize_model_from_cfg(args.weights)
    dummy_coco_dataset = dummy_datasets.get_coco_dataset()

    if os.path.isdir(args.im_or_folder):
        im_list = glob.iglob(args.im_or_folder + '/*.' + args.image_ext)
    else:
        im_list = [args.im_or_folder]

    for i, im_name in enumerate(im_list):
        out_name = os.path.join(
            args.output_dir, '{}'.format(os.path.basename(im_name) + '.' + args.output_ext)
        )
        logger.info('Processing {} -> {}'.format(im_name, out_name))
        im = cv2.imread(im_name)
        timers = defaultdict(Timer)
        t = time.time()
        with c2_utils.NamedCudaScope(0):
            cls_boxes, cls_segms, cls_keyps = infer_engine.im_detect_all(
                model, im, None, timers=timers
            )
        logger.info('Inference time: {:.3f}s'.format(time.time() - t))
        for k, v in timers.items():
            logger.info(' | {}: {:.3f}s'.format(k, v.average_time))
        if i == 0:
            logger.info(
                ' \ Note: inference on the first image will be slower than the '
                'rest (caches and auto-tuning need to warm up)'
            )

        vis_utils.vis_one_image(
            im[:, :, ::-1],  # BGR -> RGB for visualization
            im_name,
            args.output_dir,
            cls_boxes,
            cls_segms,
            cls_keyps,
            dataset=dummy_coco_dataset,
            box_alpha=0.3,
            show_class=True,
            thresh=args.thresh,
            kp_thresh=args.kp_thresh,
            ext=args.output_ext,
            out_when_no_box=args.out_when_no_box
        )
예제 #2
0
파일: infer.py 프로젝트: Jhird/Detectron
def main(args):
    logger = logging.getLogger(__name__)
    dummy_coco_dataset = dummy_datasets.get_coco_dataset()
    cfg_orig = load_cfg(yaml.dump(cfg))
    im = cv2.imread(args.im_file)

    if args.rpn_pkl is not None:
        proposal_boxes, _proposal_scores = get_rpn_box_proposals(im, args)
        workspace.ResetWorkspace()
    else:
        proposal_boxes = None

    cls_boxes, cls_segms, cls_keyps = None, None, None
    for i in range(0, len(args.models_to_run), 2):
        pkl = args.models_to_run[i]
        yml = args.models_to_run[i + 1]
        cfg.immutable(False)
        merge_cfg_from_cfg(cfg_orig)
        merge_cfg_from_file(yml)
        if len(pkl) > 0:
            weights_file = pkl
        else:
            weights_file = cfg.TEST.WEIGHTS
        cfg.NUM_GPUS = 1
        assert_and_infer_cfg(cache_urls=False)
        model = model_engine.initialize_model_from_cfg(weights_file)
        with c2_utils.NamedCudaScope(0):
            cls_boxes_, cls_segms_, cls_keyps_ = \
                model_engine.im_detect_all(model, im, proposal_boxes)
        cls_boxes = cls_boxes_ if cls_boxes_ is not None else cls_boxes
        cls_segms = cls_segms_ if cls_segms_ is not None else cls_segms
        cls_keyps = cls_keyps_ if cls_keyps_ is not None else cls_keyps
        workspace.ResetWorkspace()

    out_name = os.path.join(
        args.output_dir, '{}'.format(os.path.basename(args.im_file) + '.pdf')
    )
    logger.info('Processing {} -> {}'.format(args.im_file, out_name))

    vis_utils.vis_one_image(
        im[:, :, ::-1],
        args.im_file,
        args.output_dir,
        cls_boxes,
        cls_segms,
        cls_keyps,
        dataset=dummy_coco_dataset,
        box_alpha=0.3,
        show_class=True,
        thresh=0.7,
        kp_thresh=2
    )
예제 #3
0
파일: infer.py 프로젝트: Mrggggg/DensePose
def get_rpn_box_proposals(im, args):
    cfg.immutable(False)
    merge_cfg_from_file(args.rpn_cfg)
    cfg.NUM_GPUS = 1
    cfg.MODEL.RPN_ONLY = True
    cfg.TEST.RPN_PRE_NMS_TOP_N = 10000
    cfg.TEST.RPN_POST_NMS_TOP_N = 2000
    assert_and_infer_cfg(cache_urls=False)

    model = model_engine.initialize_model_from_cfg(args.rpn_pkl)
    with c2_utils.NamedCudaScope(0):
        boxes, scores = rpn_engine.im_proposals(model, im)
    return boxes, scores
예제 #4
0
def load_model(args):
    model = test_engine.initialize_model_from_cfg(cfg.TEST.WEIGHTS)
    blobs = mutils.get_ws_blobs()

    return model, blobs
예제 #5
0
weights_file = 'weights/DensePose_ResNet50_FPN_s1x-e2e.pkl'
output_dir = 'DensePoseData/infer_out/'
image_ext = 'jpg'
im_or_folder = ''
workspace.GlobalInit(['caffe2', '--caffe2_log_level=0'])
setup_logging(__name__)
logger = logging.getLogger(__name__)
merge_cfg_from_file(cfg_file)
cfg.NUM_GPUS = 1
cfg.TEST.BBOX_AUG.ENABLED = False
cfg.MODEL.MASK_ON = False
cfg.MODEL.KEYPOINTS_ON = False

# weights = cache_url(args.weights, cfg.DOWNLOAD_CACHE)
assert_and_infer_cfg(cache_urls=False)
model = infer_engine.initialize_model_from_cfg(weights_file)
dummy_coco_dataset = dummy_datasets.get_coco_dataset()

# Server configs
PORT = 22100
app = Flask(__name__)
CORS(app)
socketio = SocketIO(app)
# Pix2Pix server Configs
PUBLIC_IP = '107.21.18.29'
PIX2PIX_PORT = '23100'
PIX2PIX_ROUTE = '/infer'
pix2pixURL = 'http://' + PUBLIC_IP + ':' + PIX2PIX_PORT + PIX2PIX_ROUTE


# Take in base64 string and return PIL image
예제 #6
0
def main(args):
    logger = logging.getLogger(__name__)
    merge_cfg_from_file(args.cfg)
    cfg.NUM_GPUS = 1
    args.weights = cache_url(args.weights, cfg.DOWNLOAD_CACHE)
    assert_and_infer_cfg(cache_urls=False)
    model = infer_engine.initialize_model_from_cfg(args.weights)
    dummy_coco_dataset = dummy_datasets.get_coco_dataset()

    # if os.path.isdir(args.im_or_folder):
    # im_list = glob.iglob(args.im_or_folder + '/*.' + args.image_ext)
    # else:
    # im_list = [args.im_or_folder]

    for fold in os.listdir(args.im_or_folder):
        _fold = os.path.join(args.im_or_folder, fold)
        if os.path.isdir(_fold):
            im_list = glob.iglob(_fold + '/*.' + args.image_ext)
        else:
            im_list = [args.im_or_folder]
        output_dir = os.path.join(args.output_dir, fold)
        if not os.path.exists(output_dir):
            os.mkdir(output_dir)
        for i, im_name in enumerate(im_list):
            out_name = os.path.join(
                output_dir, '{}'.format(os.path.basename(im_name) + '.pdf'))
            logger.info('Processing {} -> {}'.format(im_name, out_name))
            im = cv2.imread(im_name)
            timers = defaultdict(Timer)
            t = time.time()
            with c2_utils.NamedCudaScope(0):
                cls_boxes, cls_segms, cls_keyps = infer_engine.im_detect_all(
                    model, im, None, timers=timers)
            logger.info('Inference time: {:.3f}s'.format(time.time() - t))
            for k, v in timers.items():
                logger.info(' | {}: {:.3f}s'.format(k, v.average_time))
            if i == 0:
                logger.info(
                    ' \ Note: inference on the first image will be slower than the '
                    'rest (caches and auto-tuning need to warm up)')

            vis_utils.vis_one_image(
                im[:, :, ::-1],  # BGR -> RGB for visualization
                im_name[:-4],
                output_dir,
                cls_boxes,
                cls_segms,
                cls_keyps,
                dataset=dummy_coco_dataset,
                box_alpha=0.3,
                show_class=True,
                thresh=0.7,
                kp_thresh=2,
                ext='jpg')

            import pycocotools.mask as mask_util
            boxes, segms, keypoints, classes = vis_utils.convert_from_cls_format(
                cls_boxes, cls_segms, cls_keyps)
            if segms is not None and len(segms) > 0:
                score = boxes[:, -1]
                index = [i for i, _sc in enumerate(score) if _sc > 0.7]
                mask = mask_util.decode(segms)
                for i in index:
                    cv2.imwrite(
                        '{}/{}_{}.jpg'.format(output_dir,
                                              im_name.split('/')[-1][:-4], i),
                        mask[:, :, i] * 255.0)
예제 #7
0
def main(args):
    logger = logging.getLogger(__name__)

    merge_cfg_from_file(args.cfg)
    cfg.NUM_GPUS = 1
    args.weights = cache_url(args.weights, cfg.DOWNLOAD_CACHE)
    assert_and_infer_cfg(cache_urls=False)

    assert not cfg.MODEL.RPN_ONLY, \
        'RPN models are not supported'
    assert not cfg.TEST.PRECOMPUTED_PROPOSALS, \
        'Models that require precomputed proposals are not supported'

    model = infer_engine.initialize_model_from_cfg(args.weights)
    dummy_coco_dataset = dummy_datasets.get_coco_dataset()

    if os.path.isdir(args.im_or_folder):
        im_list = glob.iglob(args.im_or_folder + '/*.' + args.image_ext)
    else:
        im_list = [args.im_or_folder]

    for i, im_name in enumerate(im_list):
        out_name = os.path.join(
            args.output_dir,
            '{}'.format(os.path.basename(im_name) + '.' + args.output_ext))
        logger.info('Processing {} -> {}'.format(im_name, out_name))
        im = cv2.imread(im_name)
        timers = defaultdict(Timer)
        t = time.time()
        with c2_utils.NamedCudaScope(0):
            cls_boxes, cls_segms, cls_keyps = infer_engine.im_detect_all(
                model, im, None, timers=timers)
        logger.info('Inference time: {:.3f}s'.format(time.time() - t))
        for k, v in timers.items():
            logger.info(' | {}: {:.3f}s'.format(k, v.average_time))
        if i == 0:
            logger.info(
                ' \ Note: inference on the first image will be slower than the '
                'rest (caches and auto-tuning need to warm up)')
        # vis_utils.vis_one_image(
        #     im[:, :, ::-1],  # BGR -> RGB for visualization
        #     im_name,
        #     args.output_dir,
        #     cls_boxes,
        #     cls_segms,
        #     cls_keyps,
        #     dataset=dummy_coco_dataset,
        #     box_alpha=0.3,
        #     show_class=True,
        #     thresh=args.thresh,
        #     kp_thresh=args.kp_thresh,
        #     ext=args.output_ext,
        #     out_when_no_box=args.out_when_no_box
        # )
        boxes, segms, keypoints, classes = vis_utils.convert_from_cls_format(
            cls_boxes, cls_segms, cls_keyps)
        print(classes)
        with open(os.path.join(args.output_dir, "out.csv"), "a+",
                  newline='') as csv_out:
            csv_writer = csv.writer(csv_out, delimiter=';', quotechar='"')
            # Save one box per line
            for i, box in enumerate(boxes):
                if box[-1] < 0.65:
                    continue
                if classes[i] not in [5]:
                    continue
                row = [im_name.split(os.path.sep)[-1]]

                # Format box x1, y1, x2, y2, p
                for coord in box[:4]:
                    row.append(int(round(coord)))
                row.append(classes[i])
                csv_writer.writerow(row)
예제 #8
0
    def inference(self, image_list):
        """Do an inference of the DensePose model with a set of image inputs.

        # Arguments:
            image_list: The input image list
            
        Return the result of the inference.        
        """
        # Directly return image when no inference options
        if not (self.show_human_index or self.show_uv or self.show_border
                or self.show_grid):
            return [image_list[0]]

        image = image_list[0]
        image = self.linear_to_srgb(image) * 255.
        imcpy = image.copy()

        # Initialize the model out of the configuration and weights files
        if not hasattr(self, 'model'):
            workspace.ResetWorkspace()
            # Reset to default config
            merge_cfg_from_cfg(self.default_cfg)
            # Load densepose configuration file
            merge_cfg_from_file(self.cfg_file)
            assert_and_infer_cfg(cache_urls=False, make_immutable=False)
            self.model = infer_engine.initialize_model_from_cfg(self.weights)
            # Save densepose full configuration file
            self.densepose_cfg = copy.deepcopy(
                AttrDict(cfg))  #cfg from detectron.core.config
        else:
            # There is a global config file for all detectron models (Densepose, Mask RCNN..)
            # Check if current global config file is correct for densepose
            if not dict_equal(self.densepose_cfg, cfg):
                # Free memory of previous workspace
                workspace.ResetWorkspace()
                # Load densepose configuration file
                merge_cfg_from_cfg(self.densepose_cfg)
                assert_and_infer_cfg(cache_urls=False, make_immutable=False)
                self.model = infer_engine.initialize_model_from_cfg(
                    self.weights)

        # Compute the image inference
        with c2_utils.NamedCudaScope(0):
            # image in BGR format for inference
            cls_boxes, cls_segms, cls_keyps, cls_bodys = infer_engine.im_detect_all(
                self.model, image[:, :, ::-1], None)

        res = vis_utils.vis_densepose(
            imcpy,  # image in RGB format for visualization
            cls_boxes,
            cls_bodys,
            show_human_index=self.show_human_index,
            show_uv=self.show_uv,
            show_grid=self.show_grid,
            show_border=self.show_border,
            border_thick=self.border_thick,
            alpha=self.alpha)

        res = self.srgb_to_linear(res.astype(np.float32) / 255.)

        return [res]
def main(args):
    logger = logging.getLogger(__name__)
    merge_cfg_from_file(args.cfg)
    cfg.NUM_GPUS = 1
    args.weights = cache_url(args.weights, cfg.DOWNLOAD_CACHE)
    assert_and_infer_cfg(cache_urls=False)

    assert not cfg.MODEL.RPN_ONLY, \
        'RPN models are not supported'
    assert not cfg.TEST.PRECOMPUTED_PROPOSALS, \
        'Models that require precomputed proposals are not supported'

    model = infer_engine.initialize_model_from_cfg(args.weights)
    dummy_coco_dataset = dummy_datasets.get_coco_dataset()

    if os.path.isdir(args.im_or_folder):
        im_list = glob.iglob(args.im_or_folder + '/*.' + args.image_ext)
    else:
        im_list = [args.im_or_folder]
    """
    Add support for webcam
    """
    # Set and get camera from OpenCV
    cap = cv2.VideoCapture('/detectron/mypython/people-walking.mp4')
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH) + 0.5)
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT) + 0.5)

    s = n(b'XVID')
    fourcc = cv2.VideoWriter_fourcc(*s)
    out = cv2.VideoWriter('output.avi', fourcc, 24.0, (width, height))
    im_name = 'tmp_im'
    count = 0
    fileOut = open('people-walking.txt', 'w')

    while True:
        count += 1
        # Fetch image from camera
        _, im = cap.read()

        timers = defaultdict(Timer)
        t = time.time()

        with c2_utils.NamedCudaScope(0):
            cls_boxes, cls_segms, cls_keyps = infer_engine.im_detect_all(
                model, im, None, timers=timers)
        logger.info('Inference time: {:.3f}s'.format(time.time() - t))
        for k, v in timers.items():
            logger.info(' | {}: {:.3f}s'.format(k, v.average_time))
        if 0:
            logger.info(
                ' \ Note: inference on the first image will be slower than the '
                'rest (caches and auto-tuning need to warm up)')
        box_list = [b for b in cls_boxes if len(b) > 0]
        if len(box_list) > 0:
            boxes = np.concatenate(box_list)
        else:
            boxes = None
        vis_utils.vis_one_image(
            im[:, :, ::-1],  # BGR -> RGB for visualization
            im_name,
            args.output_dir,
            cls_boxes,
            cls_segms,
            cls_keyps,
            dataset=dummy_coco_dataset,
            box_alpha=0.3,
            show_class=True,
            thresh=0.7,
            kp_thresh=2,
            ext='jpg'  # default is PDF, but we want JPG.
        )
        time.sleep(0.05)
        img = cv2.imread('/detectron/mypython/tmp_im.jpg')
        cv2.putText(img, 'Frame: ', (5, 30), cv2.FONT_HERSHEY_SIMPLEX, 1,
                    (255, 255, 255), 2)
        cv2.putText(img, str(count), (130, 30), cv2.FONT_HERSHEY_SIMPLEX, 1,
                    (255, 255, 255), 2)
        cv2.putText(img, 'Model: e2e_mask_rcnn_R-101-FPN_2x.yaml', (200, 30),
                    cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2)
        cv2.putText(
            img,
            'WEIGHTS: https://s3-us-west-2.amazonaws.com/detectron/ImageNetPretrained/MSRA/R-101.pkl',
            (5, 60), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2)
        for i in range(len(boxes)):
            x1 = "{:.6f}".format(boxes[i][0] / width)
            y1 = "{:.6f}".format(boxes[i][1] / height)
            x2 = "{:.6f}".format(boxes[i][2] / width)
            y2 = "{:.6f}".format(boxes[i][3] / height)
            conf = "{:.6f}".format(boxes[i][4])
            fileOut.write("Frame " + str(count).zfill(5) + ":" + "     " +
                          str(x1) + "     " + str(y1) + "     " + str(x2) +
                          "     " + str(y2) + "     " + str(conf) + "\n")
            #cv2.putText(img, str(x1),(5, 90+30*i), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 0), 2)
            #cv2.putText(img, str(y1),(185, 90+30*i), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 0), 2)
            #cv2.putText(img, str(x2),(365, 90+30*i), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 0), 2)
            #cv2.putText(img, str(y2),(545, 90+30*i), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 0), 2)
            #cv2.putText(img, str(conf),(725, 90+30*i), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 0), 2)
        time.sleep(0.05)
        out.write(img)
    fileOut.close()
    cap.release()
    out.release()
    cv2.destroyAllWindows()
예제 #10
0
def main(args):
    logger = logging.getLogger(__name__)
    merge_cfg_from_file(args.cfg)
    cfg.NUM_GPUS = 1
    args.weights = cache_url(args.weights, cfg.DOWNLOAD_CACHE)
    assert_and_infer_cfg(cache_urls=False)
    model = infer_engine.initialize_model_from_cfg(args.weights)
    dummy_coco_dataset = dummy_datasets.get_coco_dataset()
    frame_no = 0
    # print( "capturing video")
    cap = cv2.VideoCapture(args.input)
    total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
    # pdb.set_trace()
    grab = 1
    if (cap.isOpened() == False):
        print("Error opening video stream or file")
        exit
    while (cap.isOpened() and grab <= total_frames):
        print("|Processing Frame {0}/{1} ".format(grab, total_frames))
        grab += 1
        captime = time.time()
        ret_val, im = cap.read()
        print('\t-Frame read in{: .3f}s'.format(time.time() - captime))
        #skips intermediate frames
        if grab % 2 != 0:
            continue
        #uncomment to resize image
        im = cv2.resize(im, (int(1280 / 1), int(720 / 1)))
        timers = defaultdict(Timer)
        t = time.time()
        with c2_utils.NamedCudaScope(0):
            cls_boxes, cls_segms, cls_keyps, cls_bodys = infer_engine.im_detect_all(
                model, im, None, timers=timers)
        print('\t | Inference time: {:.3f}s'.format(time.time() - t))
        for k, v in timers.items():
            print('\t | {}: {:.3f}s'.format(k, v.average_time))
        if 0:
            logger.info(
                ' \ Note: inference on the first image will be slower than the '
                'rest (caches and auto-tuning need to warm up)')
        output_name = 'out.mp4'
        ret = vis_utils.vis_one_image(
            im[:, :, ::-1],  # BGR -> RGB for visualization
            output_name,
            args.output_dir,
            cls_boxes,
            cls_segms,
            cls_keyps,
            cls_bodys,
            dataset=dummy_coco_dataset,
            box_alpha=0.3,
            show_class=False,
            thresh=0.7,
            kp_thresh=2)
        if ret == True:
            frame_no = frame_no + 1
    cap.release()
    cv2.destroyAllWindows()
    subprocess.call(
        'ffmpeg -framerate 20 -i {}/file%02d.png -c:v libx264 -r 30 -pix_fmt yuv420p vid/out.mp4'
        .format(os.path.join(args.output_dir, 'vid')),
        shell=True)
def main(args):
    logger = logging.getLogger(__name__)
    classfied_confidence = args.classfied_confidence
    # get test image list
    if os.path.isdir(args.im_or_folder):
        im_list = glob.iglob(args.im_or_folder + '/*.' + args.image_ext)
    else:
        im_list = [args.im_or_folder]
    json_dir = args.json_dir
    merge_cfg_from_file(args.cfg)
    cfg.NUM_GPUS = 1
    args.weights = cache_url(args.weights, cfg.DOWNLOAD_CACHE)
    assert_and_infer_cfg(cache_urls=False)

    assert not cfg.MODEL.RPN_ONLY, \
        'RPN models are not supported'
    assert not cfg.TEST.PRECOMPUTED_PROPOSALS, \
        'Models that require precomputed proposals are not supported'

    model = infer_engine.initialize_model_from_cfg(args.weights)
    dummy_coco_dataset = dummy_datasets.get_coco_dataset()

    # load cnn judgement result
    judgement_json_path = args.judgement_json_path
    judgement_dict = {}
    with open(judgement_json_path, 'r') as f:
        judgement_dict = json.load(f)

    # do object detection
    results = {}
    result_list = []
    for i, im_path in enumerate(im_list):
        out_name = os.path.join(
            #args.output_dir, '{}'.format(os.path.basename(im_path) + '.' + args.output_ext)
            args.output_dir,
            '{}'.format(os.path.basename(im_path)))
        logger.info('Processing {} -> {}'.format(im_path, out_name))
        im = cv2.imread(im_path)
        timers = defaultdict(Timer)
        t = time.time()
        with c2_utils.NamedCudaScope(0):
            cls_boxes, cls_segms, cls_keyps = infer_engine.im_detect_all(
                model, im, None, timers=timers)
        logger.info('Inference time: {:.3f}s'.format(time.time() - t))
        for k, v in timers.items():
            logger.info(' | {}: {:.3f}s'.format(k, v.average_time))
        if i == 0:
            logger.info(
                ' \ Note: inference on the first image will be slower than the '
                'rest (caches and auto-tuning need to warm up)')
        image_simple_name = im_path.split('/')[-1]
        restricted_confidence = judgement_dict[image_simple_name]
        judgement, category_cnt, _ = judgement_function(
            restricted_confidence, cls_boxes, classfied_confidence)
        file_dict = {}
        file_dict["filename"] = im_path.split('/')[-1]
        if judgement:  # restricted
            file_dict_rects = []
            for class_id in range(1, 6):
                if len(cls_boxes[class_id]) != 0:
                    for class_content in cls_boxes[class_id]:
                        if class_content[4] >= 0.5:
                            one_box = {}
                            one_box["xmin"] = int(class_content[0])
                            one_box["ymin"] = int(class_content[1])
                            one_box["xmax"] = int(class_content[2])
                            one_box["ymax"] = int(class_content[3])
                            one_box["label"] = int(class_id)  # 1,2,3,4,5
                            one_box["confidence"] = round(
                                float(class_content[4]), 2)
                            file_dict_rects.append(one_box)
            file_dict["rects"] = file_dict_rects
            result_list.append(file_dict)
            vis_utils.vis_one_image(
                im[:, :, ::-1],  # BGR -> RGB for visualization
                im_path[:-4],
                args.output_dir,
                cls_boxes,
                cls_segms,
                cls_keyps,
                dataset=dummy_coco_dataset,
                box_alpha=1.0,
                show_class=True,
                thresh=args.thresh,
                kp_thresh=args.kp_thresh,
                ext=args.output_ext,
                out_when_no_box=args.out_when_no_box)
        else:
            file_dict["rects"] = []
            result_list.append(file_dict)
    results["results"] = result_list
    nowTime = datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%S')
    output_json_path = json_dir + '/' + str(nowTime) + ".json"
    with open(output_json_path, 'w') as file:
        json.dump(results, file)
    print("All_Done")
예제 #12
0
def main(args):
    logger = logging.getLogger(__name__)
    merge_cfg_from_file(args.cfg)
    cfg.NUM_GPUS = 1
    args.weights = cache_url(args.weights, cfg.DOWNLOAD_CACHE)
    assert_and_infer_cfg(cache_urls=False)
    model = infer_engine.initialize_model_from_cfg(args.weights)
    dummy_coco_dataset = dummy_datasets.get_coco_dataset()

    # Get image name list.
    if visualize:
        if os.path.isdir(args.im_or_folder):
            im_list = glob.iglob(args.im_or_folder + '/*.' + args.image_ext)
        else:
            im_list = [args.im_or_folder]
    else:
        with open(src_img_list_file, 'r') as f:
            im_list = f.readlines()
            for i, im_name in enumerate(im_list):
                im_list[i] = im_name.strip()

    f = open(dst_img_list_file, "w")
    for i, im_name in enumerate(im_list):
        out_name = os.path.join(
            args.output_dir, '{}'.format(os.path.basename(im_name) + '.pdf')
        )
        logger.info('Processing {} -> {}'.format(im_name, out_name))

        if visualize:
            im_full_name = im_name
            im = cv2.imread(im_full_name, cv2.IMREAD_COLOR)
        else:
            # Loading picture
            im_full_name = os.path.join(src_img_folder, im_name + '.jpg')
            if not os.path.exists(im_full_name):
                print('%s: No such file.' % im_full_name)
                exit()
            im = cv2.imread(im_full_name, cv2.IMREAD_COLOR)

            # Loading groundtruth
            cat_gt, human_gt = gt_process(src_cat_gt_folder, im_name)

            # cv2.imwrite(os.path.join(dst_whole_gt_folder, im_name + '.png'),
            #             cat_gt)
            # continue

            # cat_gt_full_name = os.path.join(src_cat_gt_folder, im_name + '.png')
            # if not os.path.exists(cat_gt_full_name):
            #     print('%s: No such file.' % cat_gt_full_name)
            #     exit()
            # cat_gt = cv2.imread(cat_gt_full_name, cv2.IMREAD_GRAYSCALE)

            # human_gt_full_name = os.path.join(src_human_gt_folder, im_name + '.png')
            # if not os.path.exists(human_gt_full_name):
            #     print('%s: No such file.' % human_gt_full_name)
            #     exit()
            # human_gt = cv2.imread(human_gt_full_name, cv2.IMREAD_GRAYSCALE)

        timers = defaultdict(Timer)
        t = time.time()
        with c2_utils.NamedCudaScope(0):
            cls_boxes, cls_segms, cls_keyps = infer_engine.im_detect_all(
                model, im, None, timers=timers
            )
        logger.info('Inference time: {:.3f}s'.format(time.time() - t))
        for k, v in timers.items():
            logger.info(' | {}: {:.3f}s'.format(k, v.average_time))
        if i == 0:
            logger.info(
                ' \ Note: inference on the first image will be slower than the '
                'rest (caches and auto-tuning need to warm up)'
            )

        boxes, masks, classes = vis_utils.vis_one_image(
            im[:, :, ::-1],  # BGR -> RGB for visualization
            im_name,
            args.output_dir,
            cls_boxes,
            cls_segms,
            cls_keyps,
            dataset=dummy_coco_dataset,
            box_alpha=0.3,
            show_class=True,
            thresh=0.7,
            kp_thresh=2,
            visualize=visualize
        )
        if not visualize and boxes is not None:
            get_objs(
                im, cat_gt, human_gt, im_name,
                boxes, masks, classes, dummy_coco_dataset, f
            )

    f.close()
예제 #13
0
def main(args):
    logger = logging.getLogger(__name__)

    merge_cfg_from_file(args.cfg)
    cfg.NUM_GPUS = 1
    args.weights = cache_url(args.weights, cfg.DOWNLOAD_CACHE)
    assert_and_infer_cfg(cache_urls=False)

    assert not cfg.MODEL.RPN_ONLY, \
        'RPN models are not supported'
    assert not cfg.TEST.PRECOMPUTED_PROPOSALS, \
        'Models that require precomputed proposals are not supported'

    model = infer_engine.initialize_model_from_cfg(args.weights)
    dummy_coco_dataset = dummy_datasets.get_coco_dataset()

    if os.path.isdir(args.im_or_folder):
        im_list = glob.iglob(args.im_or_folder + '/*.' + args.image_ext)
    else:
        im_list = [args.im_or_folder]
    # load cnn judgement result
    judgement_json_path = args.judgement_json_path
    judgement_dict = {}
    with open(judgement_json_path, 'r') as f:
        judgement_dict = json.load(f)
    classfied_confidence = args.classfied_confidence
    for i, im_name in enumerate(im_list):
        out_name = os.path.join(
            #args.output_dir, '{}'.format(os.path.basename(im_name) + '.' + args.output_ext)
            args.output_dir,
            '{}'.format(os.path.basename(im_name)))
        logger.info('Processing {} -> {}'.format(im_name, out_name))
        im = cv2.imread(im_name)
        height, width, _ = im.shape
        timers = defaultdict(Timer)
        t = time.time()
        with c2_utils.NamedCudaScope(0):
            cls_boxes, cls_segms, cls_keyps = infer_engine.im_detect_all(
                model, im, None, timers=timers)
        logger.info('Inference time: {:.3f}s'.format(time.time() - t))
        for k, v in timers.items():
            logger.info(' | {}: {:.3f}s'.format(k, v.average_time))
        if i == 0:
            logger.info(
                ' \ Note: inference on the first image will be slower than the '
                'rest (caches and auto-tuning need to warm up)')
        #print("********Result**************")
        #masks = mask_util.decode(cls_segms)
        npy_save_dir = args.npy_save_dir
        im_name_ = im_name.split('/')[-1][:-4]

        restricted_confidence = judgement_dict[im_name.split('/')[-1]]
        #simple apply judgement
        #judgement, category_cnt, _ = judgement_function(restricted_confidence, cls_boxes,classfied_confidence)
        if restricted_confidence > classfied_confidence:
            judgement = True
        else:
            judgement = False

        if judgement:  # restricted
            if cls_segms is not None:
                for class_id in range(1, 6):
                    class_save_path = npy_save_dir + '/' + im_name_ + '_' + str(
                        class_id) + '.npy'
                    save_numpy = np.zeros((height, width), dtype=np.uint8)
                    if cls_segms[class_id] == []:
                        np.save(class_save_path, save_numpy)
                    else:
                        for class_content in cls_segms[class_id]:
                            mask_ = mask_util.decode(class_content)
                            save_numpy = save_numpy | mask_
                        np.save(class_save_path, save_numpy)
                vis_utils.vis_one_image(
                    im[:, :, ::-1],  # BGR -> RGB for visualization
                    im_name_,
                    args.output_dir,
                    cls_boxes,
                    cls_segms,
                    cls_keyps,
                    dataset=dummy_coco_dataset,
                    box_alpha=0.3,
                    show_class=True,
                    thresh=args.thresh,
                    kp_thresh=args.kp_thresh,
                    ext=args.output_ext,
                    out_when_no_box=args.out_when_no_box)
            else:
                save_numpy = np.zeros((height, width), dtype=np.uint8)
                for class_id in range(1, 6):
                    class_save_path = npy_save_dir + '/' + im_name_ + '_' + str(
                        class_id) + '.npy'
                    np.save(class_save_path, save_numpy)
        else:
            save_numpy = np.zeros((height, width), dtype=np.uint8)
            for class_id in range(1, 6):
                class_save_path = npy_save_dir + '/' + im_name_ + '_' + str(
                    class_id) + '.npy'
                np.save(class_save_path, save_numpy)
예제 #14
0
def main(args):
    global dot_count
    dot_count = 0
    logger = logging.getLogger(__name__)
    merge_cfg_from_file(args.cfg)
    cfg.NUM_GPUS = 1
    args.weights = cache_url(args.weights, cfg.DOWNLOAD_CACHE)
    assert_and_infer_cfg(cache_urls=False)
    model = infer_engine.initialize_model_from_cfg(args.weights)
    dummy_coco_dataset = dummy_datasets.get_coco_dataset()

    if os.path.isdir(args.im_or_folder):
        im_list = glob.iglob(args.im_or_folder + '/*.' + args.image_ext)
    else:
        im_list = [args.im_or_folder]

    host = '127.0.0.1'
    port = 9998
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind((host, port))
    s.listen(5)
    s.settimeout(2)
    SIZE = 4096
    #s.settimeout(10)
    multiTracker = cv2.MultiTracker_create()
    while True:
        try:
            sock, addr = s.accept()
            receive = sock.recv(SIZE).decode()
            tmp = str(receive).split("|")
            path = tmp[0]
            device_addr = tmp[1]
            print("path: {0}, device_addr: {1}".format(path, device_addr))
            im_list = []
            im_list.append(path)
            for i, im_name in enumerate(im_list):
                out_name = os.path.join(
                    args.output_dir, '{}'.format(os.path.basename(im_name))
                )
                logger.info('Processing {} -> {}'.format(im_name, out_name))
                im = cv2.imread(im_name)
                timers = defaultdict(Timer)
                t = time.time()
                with c2_utils.NamedCudaScope(0):
                    cls_boxes, cls_segms, cls_keyps, cls_bodys = infer_engine.im_detect_all(
                        model, im, None, timers=timers
                    )
                logger.info('Inference time: {:.3f}s'.format(time.time() - t))
                for k, v in timers.items():
                    logger.info(' | {}: {:.3f}s'.format(k, v.average_time))
                if i == 0:
                    logger.info(
                        ' \ Note: inference on the first image will be slower than the '
                        'rest (caches and auto-tuning need to warm up)'
                    )

                vis_utils.vis_one_image(
                    im[:, :, ::-1],  # BGR -> RGB for visualization
                    im_name,
                    args.output_dir,
                    cls_boxes,
                    cls_segms,
                    cls_keyps,
                    cls_bodys,
                    dataset=dummy_coco_dataset,
                    box_alpha=0.3,
                    show_class=True,
                    thresh=0.8,
                    kp_thresh =2
                )

                print("len(cls_boxes[1])-1: {0}".format(len(cls_boxes[1])-1))
                count_people = 0
                now_boxes = []
                now_center = []
                try:
                    for i in range(len(cls_boxes[1])):
                        if cls_boxes[1][i][4] > 0.8:
                            now_boxes.append(cls_boxes[1][i][:4])
                            now_center.append([int((cls_boxes[1][i][0] + cls_boxes[1][i][2])//2), int((cls_boxes[1][i][1] + cls_boxes[1][i][3])//2)])
                            count_people = count_people + 1
                except:
                    count_people = 0
                print("now_center: {0}".format(now_center))
                print("count_people: {0}".format(count_people))
                ans_command = str(count_people) + " "
                for i in range(int(count_people)):
                    ans_command = ans_command + str(now_center[i][0]) + "," + str(now_center[i][1]) + ","
                ans_command = ans_command.strip(",")
                print(ans_command)
                sock.send(ans_command.encode())
                im_name = ""
        except Exception as e:
            print('                                                 ', end='\r')
            error_text = "Exception: " + str(e) + ", reconnecting "
            for i in range(dot_count):
            	error_text = error_text + "."
            dot_count = dot_count + 1
            if dot_count > 3:
            	dot_count = 0
            print(error_text, end='\r')
    s.close()
예제 #15
0
def main(args):
    logger = logging.getLogger(__name__)
    dummy_coco_dataset = dummy_datasets.get_coco_dataset()
    cfg_orig = load_cfg(yaml.dump(cfg))
    im = cv2.imread(args.im_file)

    if args.rpn_pkl is not None:
        proposal_boxes, _proposal_scores = get_rpn_box_proposals(im, args)
        workspace.ResetWorkspace()
    else:
        proposal_boxes = None

    cls_boxes, cls_segms, cls_keyps, cls_bodys = None, None, None, None
    for i in range(0, len(args.models_to_run), 2):
        pkl = args.models_to_run[i]
        yml = args.models_to_run[i + 1]
        cfg.immutable(False)
        merge_cfg_from_cfg(cfg_orig)
        merge_cfg_from_file(yml)
        if len(pkl) > 0:
            weights_file = pkl
        else:
            weights_file = cfg.TEST.WEIGHTS
        cfg.NUM_GPUS = 1
        assert_and_infer_cfg(cache_urls=False)
        model = model_engine.initialize_model_from_cfg(weights_file)
        with c2_utils.NamedCudaScope(0):
            cls_boxes_, cls_segms_, cls_keyps_ , cls_bodys_= \
                model_engine.im_detect_all(model, im, proposal_boxes)
        cls_boxes = cls_boxes_ if cls_boxes_ is not None else cls_boxes
        cls_segms = cls_segms_ if cls_segms_ is not None else cls_segms
        cls_keyps = cls_keyps_ if cls_keyps_ is not None else cls_keyps
        cls_bodys = cls_bodys_ if cls_bodys_ is not None else cls_bodys

        workspace.ResetWorkspace()

    out_name = os.path.join(
        args.output_dir, '{}'.format(os.path.basename(args.im_file) + '.pdf'))
    logger.info('Processing {} -> {}'.format(args.im_file, out_name))

    import numpy as np
    import pickle

    f = open('test_vis.pkl', 'w')
    pickle.dump(
        {
            'im': im,
            'cls_boxes': np.array(cls_boxes),
            'cls_bodys': np.array(cls_bodys)
        }, f)
    f.close()

    vis_utils.vis_one_image(im[:, :, ::-1],
                            args.im_file,
                            args.output_dir,
                            cls_boxes,
                            cls_segms,
                            cls_keyps,
                            cls_bodys,
                            dataset=dummy_coco_dataset,
                            box_alpha=0.3,
                            show_class=True,
                            thresh=0.7,
                            kp_thresh=2)
def main(args):
    # logger = logging.getLogger(__name__)

    merge_cfg_from_file(args.cfg)
    cfg.NUM_GPUS = 1
    args.weights = cache_url(args.weights, cfg.DOWNLOAD_CACHE)
    assert_and_infer_cfg(cache_urls=False)

    assert not cfg.MODEL.RPN_ONLY, \
        'RPN models are not supported'
    assert not cfg.TEST.PRECOMPUTED_PROPOSALS, \
        'Models that require precomputed proposals are not supported'

    model = infer_engine.initialize_model_from_cfg(args.weights)
    dummy_coco_dataset = dummy_datasets.get_coco_dataset()

    if args.datatype == 'test':
        img_dir = '/HICO_DET/hico_20160224_det/images/test2015'
        save_father_dir = '/HICO_DET/box/Faster_RCNN_101/test'
    elif args.datatype == 'train':
        img_dir = '/HICO_DET/hico_20160224_det/images/train2015'
        save_father_dir = '/HICO_DET/box/Faster_RCNN_101/train'
    else:
        assert 0, "img type must be test or train"

    im_list = glob.glob(img_dir + '/*')
    im_list.sort()
    img_num = len(im_list)

    for i, im_name in enumerate(im_list):
        save_name = im_name.split('/')[-1].split('.')[0] + '.json'
        im_det_sv_pth = os.path.join(save_father_dir, save_name)
        if os.path.exists(im_det_sv_pth):
            continue
        print('Process', i + 1, ' / ', img_num, '   img name  ',
              save_name.split('.')[0])
        im = cv2.imread(im_name)
        timers = defaultdict(Timer)
        # t = time.time()
        with c2_utils.NamedCudaScope(0):
            cls_boxes, cls_segms, cls_keyps = infer_engine.im_detect_all(
                model, im, None, timers=timers)

        # select box
        each_img_out = []
        box_per_thre = args.box_per_thre  # 0.7
        box_obj_thre = args.box_obj_thre  # 0.4
        human_hum = 0
        object_num = 0
        for class_idx, each_box in enumerate(cls_boxes[1:]):
            class_name = dummy_coco_dataset['classes'][class_idx + 1]
            if class_name == 'person':
                threthold = box_per_thre
            else:
                threthold = box_obj_thre
            for each_ins in each_box:
                if each_ins[-1] > threthold:
                    if class_name == 'person':
                        human_hum += 1
                    object_num += 1
                    each_ins = np.around(each_ins, 2)
                    ins = each_ins.tolist()
                    ins.append(class_name)
                    each_img_out.append(ins)

        each_img_out.append({'per_num': human_hum, 'total_num': object_num})
        with open(im_det_sv_pth, "w") as file:
            json.dump(each_img_out, file)
            file.close()
예제 #17
0
    def inference(self, image_list):
        """Do an inference on the model with a set of inputs.

        # Arguments:
            image_list: The input image list

        Return the result of the inference.
        """
        image = image_list[0]
        image = self.linear_to_srgb(image)*255.
        imcpy = image.copy()

        # Initialize the model out of the configuration and weights files
        if not hasattr(self, 'model'):
            workspace.ResetWorkspace()
            # Reset to default config
            merge_cfg_from_cfg(self.default_cfg)
            # Load mask rcnn configuration file
            merge_cfg_from_file(self.cfg_file)
            assert_and_infer_cfg(cache_urls=False, make_immutable=False)
            self.model = infer_engine.initialize_model_from_cfg(self.weights)
            # Save mask rcnn full configuration file
            self.mrcnn_cfg = copy.deepcopy(AttrDict(cfg)) # cfg from detectron.core.config
        else:
            # There is a global config file for all detectron models (Densepose, Mask RCNN..)
            # Check if current global config file is correct for mask rcnn
            if not dict_equal(self.mrcnn_cfg, cfg):
                # Free memory of previous workspace
                workspace.ResetWorkspace()
                # Load mask rcnn configuration file
                merge_cfg_from_cfg(self.mrcnn_cfg)
                assert_and_infer_cfg(cache_urls=False, make_immutable=False)
                self.model = infer_engine.initialize_model_from_cfg(self.weights)

        with c2_utils.NamedCudaScope(0):
            cls_boxes, cls_segms, cls_keyps = infer_engine.im_detect_all(
                self.model, image[:, :, ::-1], None
                )

        if self.binary_masks:
            res = vis_utils.vis_one_image_binary(
                imcpy,
                cls_boxes,
                cls_segms,
                thresh=self.thresh
                )
        else:
            res = vis_utils.vis_one_image_opencv(
                imcpy,
                cls_boxes,
                cls_segms,
                cls_keyps,
                thresh=self.thresh,
                show_box=self.show_box,
                show_class=self.show_class,
                dataset=self.dummy_coco_dataset,
                alpha=self.alpha,
                show_border=self.show_border,
                border_thick=self.border_thick,
                bbox_thick=self.bbox_thick,
                font_scale=self.font_scale
                )

        res = self.srgb_to_linear(res.astype(np.float32) / 255.)

        return [res]
예제 #18
0
def densepose(args):
    # args = parse_args()
    # print(args)
    logger = logging.getLogger(__name__)
    merge_cfg_from_file(args.cfg)
    cfg.NUM_GPUS = 1
    args.weights = cache_url(args.weights, cfg.DOWNLOAD_CACHE)
    assert_and_infer_cfg(cache_urls=False)
    model = infer_engine.initialize_model_from_cfg(args.weights)
    dummy_coco_dataset = dummy_datasets.get_coco_dataset()

    # if os.path.isdir(args.video) #

    im_list = video2imgs(args.video)

    # if os.path.isdir(args.im_or_folder):
    #     im_list = glob.iglob(args.im_or_folder + '/*.' + args.image_ext)
    # else:
    #     im_list = [args.im_or_folder]

    # vis_imgshape = vis_img.shape
    # size = (vis_imgshape[1], vis_imgshape[0])
    # fourcc = cv2.VideoWriter_fourcc(*'mp4v')
    # size = (1600,900)
    # videoWriter = cv2.VideoWriter(args.output_dir + os.path.basename(args.video), fourcc, 20, size)
    # time_start = time.time()

    for i, im in enumerate(im_list):
        # out_name = os.path.join(
        #     args.output_dir, '{}'.format(os.path.basename(im_name) + '.pdf')
        # )
        # logger.info('Processing {} -> {}'.format(im_name, out_name))
        # im = cv2.imread(im_name)
        im = im[0:480, 210:430]  #裁剪坐标为[y0:y1, x0:x1]
        if i % 6 == 0:
            timers = defaultdict(Timer)
            t = time.time()
            with c2_utils.NamedCudaScope(0):
                cls_boxes, cls_segms, cls_keyps, cls_bodys = infer_engine.im_detect_all(
                    model, im, None, timers=timers)
            ##############################20190123
            box_list = [b for b in cls_boxes if len(b) > 0]
            if len(box_list) > 0:
                boxes = np.concatenate(box_list)
            else:
                boxes = None
            if cls_keyps is not None:
                keyps = [k for klist in cls_keyps for k in klist]
            else:
                keyps = None
            a = np.argmax(boxes, axis=0)
            j = a[4]
            kps = keyps[j]
            kpss = np.expand_dims(kps, axis=0)
            if i == 0:
                kpsstack = kpss
            else:
                kpsstack = np.vstack((kpsstack, kpss))

            # if i == 0:
            #     kpss = kps
            # elif i == 1:
            #     kpss2 = kps - kpss
            #     kpss = kps
            #     kpsss = np.expand_dims(kpss2, axis=0)
            #     kpsstack = kpsss
            # else:
            #     kpss2 = kps - kpss
            #     kpss = kps
            #     kpsss = np.expand_dims(kpss2, axis=0)
            #     kpsstack = np.vstack((kpsstack, kpsss))
            # mat_path = '/home/server010/zhoukaiye/jianshen/jianshenshuju/test/coordinate-161441-keyps.mat'
            # io.savemat(mat_path, {'name':kps})
            ###########
            # with open("/home/server010/zhoukaiye/jianshen/jianshenshuju/test/coordinates2.txt", "w") as f:
            #     for kp in cls_keyps:
            #         f.write(str(kp))
            # mat_path = '/home/server010/zhoukaiye/jianshen/jianshenshuju/test/coordinate-161441.mat'
            # io.savemat(mat_path, {'name':cls_keyps})
            ############
            # IPython.embed()
            # logger.info('Inference time: {:.3f}s'.format(time.time() - t))
            # for k, v in timers.items():
            #     logger.info(' | {}: {:.3f}s'.format(k, v.average_time))
            # if i == 0:
            #     logger.info(
            #         ' \ Note: inference on the first image will be slower than the '
            #         'rest (caches and auto-tuning need to warm up)'
            #     )
            # if i % 5 == 0:
            All_Coords = vis_utils.vis_one_image(
                im[:, :, ::-1],  # BGR -> RGB for visualization
                cls_boxes,
                None,  # im_name,           
                None,  # args.output_dir,      
                cls_segms,
                cls_keyps,
                cls_bodys,
                dataset=dummy_coco_dataset,
                box_alpha=0.3,
                show_class=True,
                thresh=0.7,
                kp_thresh=2)
            if cls_keyps is None:
                vis_img = visualize(im, All_Coords)
            else:
                # print('keypoint')
                vis_img = All_Coords

            if i == 0:
                fourcc = cv2.VideoWriter_fourcc(*'mp4v'.encode('utf-8'))
                # fourcc = cv2.VideoWriter_fourcc(*'MP4V')
                #fourcc = cv2.VideoWriter_fourcc(*'XVID')
                vis_imgshape = vis_img.shape
                size = (vis_imgshape[1], vis_imgshape[0])
                videoWriter = cv2.VideoWriter(
                    args.output_dir +
                    os.path.basename(args.video).split('.')[0] + '.mp4',
                    fourcc, 25, size)
                # videoWriter.write(vis_img)
            # IUV_list.append(vis_img)
            #imgs2video

            # videoWriter = cv2.VideoWriter(args.output_dir + '/zuoqianceyang5.mp4', fourcc, 20, size)
            ## 5 qu 1
            # if i % 5 == 0:
            videoWriter.write(vis_img)
    # mat_path = '/home/server010/server010/FitNess/Video_capture/video_out/yingla_test2.mat'
    # io.savemat(mat_path, {'name':kpsstack})
    videoWriter.release()

    data1 = kpsstack[:, 0:2, :]
    classify_action, count_action, maxList, maxheight, start_frame = classify_count(
        data1)
    return classify_action, count_action, maxList, maxheight, start_frame, data1
예제 #19
0
def main(args):
    logger = logging.getLogger(__name__)
    merge_cfg_from_file(args.cfg)
    cfg.NUM_GPUS = 8
    args.weights = cache_url(args.weights, cfg.DOWNLOAD_CACHE)
    assert_and_infer_cfg(cache_urls=False)

    assert not cfg.MODEL.RPN_ONLY, \
        'RPN models are not supported'
    assert not cfg.TEST.PRECOMPUTED_PROPOSALS, \
        'Models that require precomputed proposals are not supported'

    model = infer_engine.initialize_model_from_cfg(args.weights)
    dummy_wider_dataset = wider_datasets.get_wider_dataset()

    INFER_BOX_ALPHA = 0.3
    INFER_THRESH = 0.5
    INFER_KP_THRESH = 2
    MODEL_ITER = 60000

    submit_result = []
    result_file_name = 'detectron_val_result_model_fast_rcnn_anchor_{}_' \
                       'NMS_{}_SOFTNMS_{}_BBOX_VOTE_{}_' \
                       'PRE_NMS_{}_BoxAlpha_{}_' \
                       'Thresh_{}_BoxNumber.txt'.format(
        MODEL_ITER,
        cfg.TEST.NMS,
        cfg.TEST.SOFT_NMS.ENABLED,
        cfg.TEST.BBOX_VOTE.ENABLED,
        cfg.TEST.RPN_PRE_NMS_TOP_N,
        INFER_BOX_ALPHA,
        INFER_THRESH)

    if os.path.isdir(args.im_or_folder):
        im_list = glob.iglob(args.im_or_folder + '/*.' + args.image_ext)
    else:
        im_list = [args.im_or_folder]

    for i, im_name in enumerate(im_list):
        out_name = os.path.join(
            args.output_dir, '{}'.format(os.path.basename(im_name) + '.pdf'))
        logger.info('Processing {} -> {}'.format(im_name, out_name))
        im = cv2.imread(im_name)
        timers = defaultdict(Timer)
        t = time.time()
        with c2_utils.NamedCudaScope(0):
            cls_boxes, cls_segms, cls_keyps = infer_engine.im_detect_all(
                model, im, None, timers=timers)

        logger.info('Inference time: {:.3f}s'.format(time.time() - t))
        for k, v in timers.items():
            logger.info(' | {}: {:.3f}s'.format(k, v.average_time))
        if i == 0:
            logger.info(
                ' \ Note: inference on the first image will be slower than the '
                'rest (caches and auto-tuning need to warm up)')

        result = vis_utils.vis_one_image_bbox_2_class(
            im[:, :, ::-1],  # BGR -> RGB for visualization
            im_name,
            args.output_dir,
            cls_boxes,
            cls_segms,
            cls_keyps,
            dataset=dummy_wider_dataset,
            box_alpha=INFER_BOX_ALPHA,
            show_class=False,
            thresh=INFER_THRESH,
            kp_thresh=INFER_KP_THRESH)
        if result:
            submit_result.extend(result)
        logger.info('Image {}.'.format(i))

    # Write file
    with open(result_file_name, 'wb') as result_file:
        for item in submit_result:
            result_file.write("%s\n" % item)

    logger.info(
        'The result file has been written in {}'.format(result_file_name))
예제 #20
0
def main(args):
    logger = logging.getLogger(__name__)

    merge_cfg_from_file(args.cfg)
    cfg.NUM_GPUS = 1
    args.weights = cache_url(args.weights, cfg.DOWNLOAD_CACHE)
    assert_and_infer_cfg(cache_urls=False)

    assert not cfg.MODEL.RPN_ONLY, \
        'RPN models are not supported'
    assert not cfg.TEST.PRECOMPUTED_PROPOSALS, \
        'Models that require precomputed proposals are not supported'

    model = infer_engine.initialize_model_from_cfg(args.weights)
    dummy_coco_dataset = dummy_datasets.get_coco_dataset()

    if os.path.isdir(args.im_or_folder):
        im_list = glob.iglob(args.im_or_folder + '/*.' + args.image_ext)
    else:
        im_list = [args.im_or_folder]

    for i, im_name in enumerate(im_list):
        out_name = os.path.join(
            args.output_dir, '{}_mask.jpg'.format(os.path.basename(im_name)))
        logger.info('Processing {} -> {}'.format(im_name, out_name))
        im = cv2.imread(im_name)
        timers = defaultdict(Timer)
        t = time.time()
        with c2_utils.NamedCudaScope(0):
            cls_boxes, cls_segms, cls_keyps = infer_engine.im_detect_all(
                model, im, None, timers=timers)
        logger.info('Inference time: {:.3f}s'.format(time.time() - t))
        for k, v in timers.items():
            logger.info(' | {}: {:.3f}s'.format(k, v.average_time))
        if i == 0:
            logger.info(
                ' \ Note: inference on the first image will be slower than the '
                'rest (caches and auto-tuning need to warm up)')
        # pdb.set_trace()
        boxes, segms, keyps, classes = vis_utils.convert_from_cls_format(
            cls_boxes, cls_segms, cls_keyps)
        if boxes is None:
            continue

        segms = vis_utils.mask_util.decode(segms)

        valid_inds = np.greater(boxes[:, 4], 0.5)
        boxes = boxes[valid_inds, :]
        segms = segms[:, :, valid_inds]
        classes = np.array(classes)[valid_inds]

        out_mat_name = os.path.join(args.output_dir,
                                    '{}'.format(os.path.basename(im_name)))
        class_names = np.asarray(
            ([coco_to_pascal_name(coco_classes[c - 1]) for c in classes]),
            dtype='object')
        sio.savemat(out_mat_name, {
            'masks': segms,
            'boxes': boxes,
            'classes': class_names
        })
예제 #21
0
def main(args):
    glob_keypoints = []

    logger = logging.getLogger(__name__)

    merge_cfg_from_file(args.cfg)
    cfg.NUM_GPUS = 1
    args.weights = cache_url(args.weights, cfg.DOWNLOAD_CACHE)
    assert_and_infer_cfg(cache_urls=False)

    assert not cfg.MODEL.RPN_ONLY, \
        'RPN models are not supported'
    assert not cfg.TEST.PRECOMPUTED_PROPOSALS, \
        'Models that require precomputed proposals are not supported'

    model = infer_engine.initialize_model_from_cfg(args.weights)
    dummy_coco_dataset = dummy_datasets.get_coco_dataset()

    if os.path.isdir(args.im_or_folder):
        im_list = glob.iglob(args.im_or_folder + '/*' + '.png')
    else:
        im_list = [args.im_or_folder]
    im_list = sorted(im_list)
    for i, im_name in enumerate(im_list):
        out_name = os.path.join(
            args.output_dir, '{}'.format(os.path.basename(im_name) + '.' + args.output_ext)
        )
        logger.info('Processing {} -> {}'.format(im_name, out_name))
        im = cv2.imread(im_name)
        timers = defaultdict(Timer)
        t = time.time()
        with c2_utils.NamedCudaScope(0):
            cls_boxes, cls_segms, cls_keyps = infer_engine.im_detect_all(
                model, im, None, timers=timers
            )
        logger.info('Inference time: {:.3f}s'.format(time.time() - t))
        for k, v in timers.items():
            logger.info(' | {}: {:.3f}s'.format(k, v.average_time))
        if i == 0:
            logger.info(
                ' \ Note: inference on the first image will be slower than the '
                'rest (caches and auto-tuning need to warm up)'
            )

        vis_utils.vis_one_image(
            im[:, :, ::-1],  # BGR -> RGB for visualization
            im_name,
            args.output_dir,
            cls_boxes,
            cls_segms,
            cls_keyps,
            dataset=dummy_coco_dataset,
            box_alpha=0.3,
            show_class=True,
            thresh=args.thresh,
            kp_thresh=args.kp_thresh,
            ext=args.output_ext,
            out_when_no_box=args.out_when_no_box
        )

        cls_boxes_np = np.asarray(cls_boxes)
        cls_boxes_prob = cls_boxes_np[1][:,4]
        idx_max_prob = np.argmax(cls_boxes_prob)

        cls_keyps_max_prob = cls_keyps[1][idx_max_prob]
        pose_x_y_prob_after_softmax = cls_keyps_max_prob[[0,1,3]]
        glob_keypoints.append(np.transpose(pose_x_y_prob_after_softmax))

    dictionarry_keypoints={'S1': {'Directions 1' : np.asarray([glob_keypoints])}}
    metadata = {'layout_name': 'h36m', 'num_joints': 17, 'keypoints_symmetry': [[4, 5, 6, 11, 12, 13], [1, 2, 3, 14, 15, 16]]}
    #np.savez(os.path.join('/home/narvis/Dev/VideoPose3D/data', "data_2d_detections.npz"), metadata=metadata, positions_2d=dictionarry_keypoints)
    np.savez(os.path.join(args.output_dir, "data_2d_detections.npz"), metadata=metadata, positions_2d=dictionarry_keypoints)
예제 #22
0
def main(args):
    logger = logging.getLogger(__name__)

    merge_cfg_from_file(args.cfg)
    cfg.NUM_GPUS = 1
    args.weights = cache_url(args.weights, cfg.DOWNLOAD_CACHE)
    assert_and_infer_cfg(cache_urls=False)

    assert not cfg.MODEL.RPN_ONLY, \
        'RPN models are not supported'
    assert not cfg.TEST.PRECOMPUTED_PROPOSALS, \
        'Models that require precomputed proposals are not supported'

    model = infer_engine.initialize_model_from_cfg(args.weights)
    dummy_coco_dataset = dummy_datasets.get_coco_dataset()

    if os.path.isdir(args.im_or_folder):
        im_list = glob.iglob(args.im_or_folder + '/*.' + args.image_ext)
    else:
        im_list = [args.im_or_folder]

    for i, im_name in enumerate(im_list):
        im_basename = os.path.splitext(os.path.basename(im_name))[0]
        out_name = os.path.join(
            args.output_dir, '{}'.format(im_basename + '.' + args.output_ext)
        )
        logger.info('Processing {} -> {}'.format(im_name, out_name))
        im = cv2.imread(im_name)
        timers = defaultdict(Timer)
        t = time.time()
        with c2_utils.NamedCudaScope(0):
            cls_boxes, cls_segms, cls_keyps = infer_engine.im_detect_all(
                model, im, None, timers=timers
            )
        logger.info('Inference time: {:.3f}s'.format(time.time() - t))
        for k, v in timers.items():
            logger.info(' | {}: {:.3f}s'.format(k, v.average_time))
        if i == 0:
            logger.info(
                ' \ Note: inference on the first image will be slower than the '
                'rest (caches and auto-tuning need to warm up)'
            )

        vis_utils.vis_one_image(
            im[:, :, ::-1],  # BGR -> RGB for visualization
            im_name,
            args.output_dir,
            cls_boxes,
            cls_segms,
            cls_keyps,
            dataset=dummy_coco_dataset,
            box_alpha=0.3,
            show_class=True,
            thresh=args.thresh,
            kp_thresh=args.kp_thresh,
            ext=args.output_ext,
            out_when_no_box=args.out_when_no_box
        )

        # save bounding box information to a file
        box_results = os.path.join(args.output_dir,
                                   '{}.csv'.format(im_basename))
        box_fh = open(box_results, 'w')

        # convert class bounding boxes, segments, keypoints
        boxes, segms, keypoints, classes = vis_utils.convert_from_cls_format(
            cls_boxes, cls_segms, cls_keyps
        )

        if boxes is not None:
            for i in range(len(boxes)):
                left = int(round(boxes[i, 0]))
                top = int(round(boxes[i, 1]))
                right = int(round(boxes[i, 2]))
                bottom = int(round(boxes[i, 3]))

                score = boxes[i, -1]
                if score < args.thresh:
                    continue

                class_name = dummy_coco_dataset.classes[classes[i]]
                box_fh.write('{},{:.2f},{},{},{},{}\n'.format(
                    class_name, score, left, top, right, bottom))

        box_fh.close()
예제 #23
0
def load_model(args):
    model = test_engine.initialize_model_from_cfg(cfg.TEST.WEIGHTS)
    blobs = mutils.get_ws_blobs()

    return model, blobs
import json
import cv2

app = Flask(__name__)

workspace.GlobalInit(['caffe2', '--caffe2_log_level=0'])
setup_logging(__name__)

args = parse_args()

logger = logging.getLogger(__name__)
merge_cfg_from_file("configs/DensePose_ResNet101_FPN_s1x-e2e.yaml")
cfg.NUM_GPUS = 1
args.weights = cache_url(args.weights, cfg.DOWNLOAD_CACHE)
assert_and_infer_cfg(cache_urls=False)
model = infer_engine.initialize_model_from_cfg(args.weights)


@app.route('/')
def hello_world():
    return 'To use openpose as a service you need to access /upload via POST. Full readme: '


@app.route('/upload', methods=['POST'])
def upload():
    if request.method == 'POST':
        file = request.files['file']
        extension = os.path.splitext(file.filename)[1]
        f_name = "demo_im.jpg"
        file.save(os.path.join('DensePoseData/demo_data', f_name))