Это выдает ошибку, хотя я проверил, что типы всех массивов действительны:
center = [ 69.73415 178.39784]
scale = [189.1834 252.24452]
output_size = [288 384]
src type = | src dtype = float32 | src shape = (3, 2)
dst type = | dst dtype = float32 | dst shape = (3, 2)
src shape = (3, 2) dtype = float32
dst shape = (3, 2) dtype = float32
---------------------------------------------------------------------------
error Traceback (most recent call last)
/tmp/ipykernel_47/2195469303.py in ()
1 img = glob.glob(IMAGES_DIR + "/*.jpg")[0] # first image
----> 2 vis, (kps, heatmaps) = infer_image_with_model(img, teacher_w32, det_threshold=0.85)
3 display(Image.fromarray(cv2.cvtColor(vis, cv2.COLOR_BGR2RGB)))
4 print("People detected:", len(kps))
/tmp/ipykernel_47/2004379265.py in infer_image_with_model(image_path, pose_model, det_threshold, kp_score_thr, save_vis, out_path)
87
88
---> 89 trans = get_affine_transform(center, scale, 0, output_size) # center & scale are np.float32 1D arrays
90 inp_img = cv2.warpAffine(orig_rgb, trans, (model_w, model_h), flags=cv2.INTER_LINEAR)
91 inp_tensor = hrnet_transform(inp_img).unsqueeze(0).to(device)
/tmp/ipykernel_47/3123242988.py in get_affine_transform(center, scale, rot, output_size, shift, inv)
57 return cv2.getAffineTransform(dst, src)
58 else:
---> 59 return cv2.getAffineTransform(src, dst)
error: OpenCV(4.12.0)
> Overload resolution failed:
> - src is not a numpy array, neither a scalar
> - Expected Ptr for argument 'src'
Это код get_affine_transform:
def get_affine_transform(center, scale, rot, output_size, shift=np.array([0, 0], dtype=np.float32), inv=0):
if not isinstance(scale, np.ndarray) and not isinstance(scale, list):
scale = np.array([scale, scale], dtype=np.float32)
scale_tmp = scale * 200.0
src_w = scale_tmp[0]
dst_w, dst_h = output_size[0], output_size[1]
rot_rad = np.pi * rot / 180
src_dir = np.array([0, src_w * -0.5], np.float32)
dst_dir = np.array([0, dst_w * -0.5], np.float32)
sn, cs = np.sin(rot_rad), np.cos(rot_rad)
src_dir = np.array([
src_dir[0] * cs - src_dir[1] * sn,
src_dir[0] * sn + src_dir[1] * cs
], np.float32)
src = np.zeros((3, 2), dtype=np.float32)
dst = np.zeros((3, 2), dtype=np.float32)
src[0] = center + scale_tmp * shift
src[1] = center + src_dir + scale_tmp * shift
dx = src[1] - src[0]
src[2] = np.array([-dx[1], dx[0]]) + src[0]
dst[0] = [dst_w * 0.5, dst_h * 0.5]
dst[1] = dst[0] + dst_dir
d = dst[1] - dst[0]
dst[2] = np.array([-d[1], d[0]]) + dst[0]
# CRITICAL FIX
src = np.asarray(src, dtype=np.float32)
dst = np.asarray(dst, dtype=np.float32)
if inv:
return cv2.getAffineTransform(dst, src)
else:
return cv2.getAffineTransform(src, dst)
Подробнее здесь: https://stackoverflow.com/questions/798 ... mpy-arrays
Мобильная версия