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
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
# [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)
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])