def paser_func(img_id):
        if not type(img_id) == type('123'):
            img_id = img_id.numpy()
            if type(img_id) == type(b'123'):
                img_id = str(img_id, encoding='utf-8')

        bboxs = id_bboxs_dict[img_id]
        kps = id_kps_dict[img_id]
        img = cv2.imread(os.path.join(img_path, img_id + '.jpg'))

        # data aug
        img, bboxs, kps = data_aug(img, bboxs, kps)

        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

        # create center label
        orih, oriw, oric = img.shape
        neth, netw = params['height'], params['width']
        outh, outw = neth // params['scale'], netw // params['scale']

        centers, sigmas, whs = prepare_bbox(bboxs, orih, oriw, outh, outw)
        keypoints, kps_sigmas = prepare_kps(kps, orih, oriw, outh, outw)

        spm_label = SingleStageLabel(outh, outw, centers, sigmas, keypoints)
        center_map, kps_map, kps_map_weight = spm_label()

        # create img input
        img = cv2.resize(img, (netw, neth), interpolation=cv2.INTER_CUBIC)
        img = img.astype(np.float32) / 255.

        return img, center_map, kps_map, kps_map_weight
def paser_func(img_id):
    global id_bboxs_dict, params, img_path, id_kps_dict

    if not type(img_id) == type('123'):
        img_id = img_id.numpy()
        if type(img_id) == type(b'123'):
            img_id = str(img_id, encoding='utf-8')

    bboxs = id_bboxs_dict[img_id]
    kps = id_kps_dict[img_id]
    img = cv2.imread(os.path.join(img_path, img_id+'.jpg'))
    #  data aug
    # img, bboxs, kps = data_aug(img, bboxs, kps)

    # padding img
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    h, w, c = img.shape
    # 只在最右边或者最下边填充0, 这样不会影响box或者点的坐标值, 所以无需再对box或点的坐标做改变
    if w > h:
        img = cv2.copyMakeBorder(img, 0, w-h, 0, 0, cv2.BORDER_CONSTANT, value=(0, 0, 0))
    else:
        img = cv2.copyMakeBorder(img, 0, 0, 0, h-w, cv2.BORDER_CONSTANT, value=(0, 0, 0))

    # create center label
    orih, oriw, oric = img.shape
    neth, netw = params['height'], params['width']
    outh, outw = neth//params['scale'], netw//params['scale']

    centers, sigmas, whs = prepare_bbox(bboxs, orih, oriw, outh, outw)
    # center_encoder = centerEncoder(outh, outw, centers, sigmas, whs)
    # center_label = center_encoder()

    # create keypoints label
    keypoints, kps_sigmas = prepare_kps(kps, orih, oriw, outh, outw)
    # kps_encoder = kpsEncoder(outh, outw, centers, keypoints, sigmas=kps_sigmas)
    # kps_label = kps_encoder()

    spm_label = SingleStageLabel(outh, outw, centers, sigmas, keypoints)
    label = spm_label()

    # create img input
    img = cv2.resize(img, (netw, neth), interpolation=cv2.INTER_CUBIC)
    img = img.astype(np.float32) / 255. # conver to 0~1 tools if focal loss is right

    # read by tensorflow, 不是很方便做iamge和box同时做数据增强
    # image = tf.io.read_file(os.path.join(img_path, img_id+'.jpg'))
    # image = tf.image.decode_jpeg(image)
    # image = tf.image.convert_image_dtype(image, tf.float32)
    # image = tf.image.resize_with_pad(image, netw, neth)

    # label = np.concatenate([center_label, kps_label], axis=-1)
    return img, label
예제 #3
0
    def parser_func(img_id):
        if type(img_id) != int:
            img_id = int(img_id.numpy())
            assert type(img_id) == int

        img_info = coco.loadImgs(img_id)[0]
        ann_ids = coco.getAnnIds(img_id, cat_ids)
        annos = coco.loadAnns(ann_ids)

        spm = SingleStageLabel(img_info, img_path, annos)
        img, center_map, center_mask, kps_offset, kps_weight = spm(
            params['height'], params['width'], params['scale'],
            params['num_joints'])

        return img, center_map, center_mask, kps_offset, kps_weight
예제 #4
0
            # [x1, y1, w, h] -> [x1, y1, x2, y2]
            bbox = [ann['bbox'][0], ann['bbox'][1], ann['bbox'][0]+ann['bbox'][2], ann['bbox'][1]+ann['bbox'][3]]
            kps  = ann['keypoints']
            # print (kps)
            assert len(kps) == 12 * 3
            for i in range(12):
                x = int(kps[i*3+0])
                y = int(kps[i*3+1])
                v = kps[i*3+2]
                cv2.circle(img_ori, (x,y),4,colors[j%3],thickness=-1)
                cv2.putText(img_ori, str(i), (x,y), cv2.FONT_HERSHEY_COMPLEX, 1,(0, 0, 250), 1)
        cv2.imshow('ori', img_ori)
        ###########################################################


        spm = SingleStageLabel(img_info, img_path, annos)
        img, center_map, center_mask, kps_offset, kps_weight = spm(params['height'], params['width'], params['scale'], params['num_joints'])

        cv2.imshow('center', center_map)
        #  data aug
        # img, bboxs, kps = data_aug(img, bboxs, kps)

        factor_x = 4
        facotr_y = 4
        spm_decoer = SpmDecoder(factor_x, facotr_y, 128, 128)
        results = spm_decoer([center_map, kps_offset])

        for j, result in enumerate(results):
            center = result['center']
            single_person_joints = result['joints']
            cv2.circle(img, (int(center[0]), int(center[1])), 5, colors[j%3], thickness=-1)
예제 #5
0
                                     0,
                                     h - w,
                                     cv2.BORDER_CONSTANT,
                                     value=(0, 0, 0))

        # create center label
        orih, oriw, oric = img.shape
        neth, netw = params['height'], params['width']
        outh, outw = neth // params['scale'], netw // params['scale']

        centers, sigmas, whs = prepare_bbox(bboxs, orih, oriw, outh, outw)
        for center in centers:
            print("ori center: ", center)
        keypoints, kps_sigmas = prepare_kps(kps, orih, oriw, outh, outw)

        spm_encoder = SingleStageLabel(outh, outw, centers, sigmas, keypoints)
        spm_label = spm_encoder()

        factor_x = netw / outw
        facotr_y = neth / outh
        spm_decoer = SpmDecoder(factor_x, facotr_y, outw, outh)
        joints, decode_centers = spm_decoer(
            [spm_label[..., 0:1], spm_label[..., 1:2 * 14 + 1]])

        # create img input
        img = cv2.resize(img, (netw, neth), interpolation=cv2.INTER_CUBIC)

        for center in decode_centers:
            print(center)
        #     x = int(center[0])
        #     y = int(center[1])