Ejemplo n.º 1
0
def main_inference(model_json, model_weights, num_stack, num_class, imgfile, confth, tiny):
    if tiny:
        xnet = HourglassNet(num_classes=16, num_stacks=args.num_stack, num_channels=128, inres=(192, 192),
                            outres=(48, 48))
    else:
        xnet = HourglassNet(num_classes=16, num_stacks=args.num_stack, num_channels=256, inres=(256, 256),
                            outres=(64, 64))

    xnet.load_model(model_json, model_weights)

    out, scale = xnet.inference_file(imgfile)

    kps = post_process_heatmap(out[0, :, :, :])

    ignore_kps = ['plevis', 'thorax', 'head_top']
    kp_keys = MPIIDataGen.get_kp_keys()
    mkps = list()
    for i, _kp in enumerate(kps):
        if kp_keys[i] in ignore_kps:
            _conf = 0.0
        else:
            _conf = _kp[2]
        mkps.append((_kp[0] * scale[1] * 4, _kp[1] * scale[0] * 4, _conf))

    cvmat = render_joints(cv2.imread(imgfile), mkps, confth)

    cv2.imshow('frame', cvmat)
    cv2.waitKey()
def main_video(model_json, model_weights, num_stack, num_class, videofile,
               confth):

    xnet = HourglassNet(num_class, num_stack, (256, 256), (64, 64))
    xnet.load_model(model_json, model_weights)

    cap = cv2.VideoCapture(videofile)
    while (cap.isOpened()):
        ret, frame = cap.read()
        if ret:
            rgb = frame[:, :, ::-1]  # bgr -> rgb
            out, scale = xnet.inference_rgb(rgb, frame.shape)

            kps = post_process_heatmap(out[0, :, :, :])

            ignore_kps = ['plevis', 'thorax', 'head_top']
            kp_keys = MPIIDataGen.get_kp_keys()
            mkps = list()
            for i, _kp in enumerate(kps):
                if kp_keys[i] in ignore_kps:
                    _conf = 0.0
                else:
                    _conf = _kp[2]
                mkps.append(
                    (_kp[0] * scale[1] * 4, _kp[1] * scale[0] * 4, _conf))

            framejoints = render_joints(frame, mkps, confth)

            cv2.imshow('frame', framejoints)
            cv2.waitKey(10)
Ejemplo n.º 3
0
def get_predicted_kp_from_htmap(heatmap, meta):
    # nms to get location
    kplst = post_process_heatmap(heatmap)
    kps  = np.array(kplst)

    # use meta information to transform back to original image
    mkps = copy.copy(kps)
    for i in range(kps.shape[0]):
        mkps[i, 0:2] = data_process.transform(kps[i], meta['center'], meta['scale'], res=[64, 64], invert=1, rot=0)

    return mkps
Ejemplo n.º 4
0
def heatmap_accuracy(predhmap, meta, norm, threshold):
    pred_kps = post_process_heatmap(predhmap)
    pred_kps = np.array(pred_kps)

    gt_kps = meta['tpts']

    good_pred_count = 0
    failed_pred_count = 0
    for i in range(gt_kps.shape[0]):
        dis = cal_kp_distance(pred_kps[i, :], gt_kps[i, :], norm, threshold)
        if dis == 0:
            failed_pred_count += 1
        elif dis == 1:
            good_pred_count += 1

    return good_pred_count, failed_pred_count
Ejemplo n.º 5
0
def view_predict_hmap(predout, show_raw=False):
    from data_process import draw_labelmap
    gtmap = predout[-1]
    gtmap = gtmap[0, :, :, :]

    if show_raw:
        mimage = gtmap
    else:
        mimage = np.zeros(shape=gtmap.shape, dtype=np.float)
        kplst = post_process_heatmap(gtmap)
        for i, kpoint in enumerate(kplst):
            mimage[:, :, i] = draw_labelmap(mimage[:, :, i], kpoint, sigma=2)

    sumimage = np.zeros(shape=(64, 64))
    for i in range(gtmap.shape[-1]):
        sumimage += mimage[:, :, i]
    scipy.misc.imshow(sumimage)
Ejemplo n.º 6
0
def run_eval(model_json, model_weights, epoch):
    model = load_model(model_json, model_weights)
    model.compile(optimizer=RMSprop(lr=5e-4),
                  loss=mean_squared_error,
                  metrics=["accuracy"])

    # dataset_path = '/home/tomas_bordac/nyu_croped'
    # dataset_path = '..\\..\\data\\nyu_croped'
    # dataset_path = os.path.join('D:\\', 'nyu_croped')
    dataset_path = config_reader.load_path()
    valdata = NYUHandDataGen('joint_data.mat',
                             dataset_path,
                             inres=(256, 256),
                             outres=(64, 64),
                             is_train=False,
                             is_testtrain=False)

    total_suc, total_fail = 0, 0
    threshold = 1

    count = 0
    batch_size = 8
    for _img, _gthmap, _meta in valdata.generator(batch_size,
                                                  2,
                                                  sigma=3,
                                                  is_shuffle=False,
                                                  with_meta=True):

        count += batch_size
        if count > valdata.get_dataset_size():
            break

        out = model.predict(_img)
        pred_map_batch = out[-1]

        if show_outputs:
            for i in range(batch_size):
                orig_image = cv2.resize(_img[i],
                                        dsize=(480, 480),
                                        interpolation=cv2.INTER_CUBIC)
                kpanno = _meta[i]['tpts']
                pred_heatmaps = pred_map_batch[i]

                pred_kps = post_process_heatmap(pred_heatmaps)
                pred_kps = np.array(pred_kps)

                for j in range(kpanno.shape[0]):
                    x = kpanno[j, 0]
                    y = kpanno[j, 1]
                    orig_image = cv2.circle(orig_image, (int(x), int(y)), 5,
                                            (0, 0, 255), 2)

                for j in range(pred_kps.shape[0]):
                    x = pred_kps[j, 0] * 4
                    y = pred_kps[j, 1] * 4
                    _img[i] = cv2.circle(_img[i], (int(x), int(y)), 5,
                                         (0, 0, 255), 2)

                cv2.imshow('orig with heatmaps', orig_image)
                cv2.imshow('gt heatmap', np.sum(_gthmap[-1][i], axis=-1))

                cv2.imshow('pred with heatmaps', _img[i])
                cv2.imshow(
                    'pred heatmaps',
                    cv2.resize(np.sum(pred_heatmaps, axis=-1),
                               dsize=(256, 256),
                               interpolation=cv2.INTER_CUBIC))
                cv2.imshow(
                    'pred heatmap',
                    cv2.resize(pred_heatmaps[0],
                               dsize=(256, 256),
                               interpolation=cv2.INTER_CUBIC))

                cv2.waitKey(0)

        suc, bad = cal_heatmap_acc(out[-1], _meta, threshold)

        total_suc += suc
        total_fail += bad

        print('success: {}'.format(suc))
        print('bad: {}'.format(bad))
        if bad > 0:
            input()

    acc = total_suc * 1.0 / (total_fail + total_suc)

    print('Eval Accuray ', acc, '@ Epoch ', epoch)