首先,我将解释问题陈述。我正在使用 Detectron2 为我的自定义数据集进行关键点检测。我使用下面的代码来可视化边界框和关键点。
outputs = predictor(im[..., ::-1])
v = Visualizer(im[:, :, ::-1], MetadataCatalog.get(cfg.DATASETS.TRAIN[0]), scale=1.2)
out = v.draw_instance_predictions(outputs["instances"].to("cpu"))
plt.figure(figsize=(60,30))
plt.imshow(out.get_image()[..., ::-1][..., ::-1])
我得到的输出如下图所示。
如您所见,类标签和两个关键点是由 detectorron2 可视化工具绘制在图像上的。两个关键点名称为 [keypoint_up, keypoint_down]。
我也想打印图像上两个关键点的名称。像下面的例子。
我知道 detectorron 提供了一个名为 draw_text 的函数。如果有人知道我如何使用它来将关键点名称放在图像上,那将是一个很大的帮助。编码示例将非常有用。除了draw_text函数之外的任何其他解决方案也受到欢迎。谢谢您的宝贵时间
您在检测到的关键点旁边显示关键点名称的方法非常合理。让我们一步步实现来完成解决方案:
这是我用来可视化图像上关键点标签的方法:
outputs = predictor(im[..., ::-1])
v = Visualizer(im[:, :, ::-1], MetadataCatalog.get(cfg.DATASETS.TRAIN[0]), scale=1.2)
out = v.draw_instance_predictions(outputs["instances"].to("cpu"))
# Iterate over each detected instance and its keypoints
instances = outputs["instances"].to("cpu")
for i in range(len(instances)):
keypoints = instances.pred_keypoints[i] # Get keypoints for the i-th instance
for j, predicted_keypoint in enumerate(keypoints):
x, y, prob = predicted_keypoint
if prob > 0.5: # Adjust the probability threshold if necessary
position = (x.item(), y.item())
text = MetadataCatalog.get(cfg.DATASETS.TRAIN[0]).keypoint_names[j] # Get the corresponding keypoint name
keypoints_positions.append((text, position))
# Draw all keypoints names on the image at once
for text, position in keypoints_positions:
v.draw_text(text, position, font_size=12, color="g", horizontal_alignment="center")
# Visualize the result
plt.figure(figsize=(60, 30))
plt.imshow(out.get_image())
plt.show()
在此解决方案中:
这应该会生成一个将关键点显示为点及其相应名称的图像。希望这可以帮助您实现所需的可视化! 🛠️希望有帮助。如果您对我建议的解决方案有疑问,请不要犹豫。