AprilTags二维码的检测与应用

简介: AprilTags二维码的检测与应用

1 AprilTags介绍

1、AprilTags类似与二维码QR codes(Quick Response Code;全称为快速响应矩阵图码)

2、AprilTags可以应用于:

  • 相机标定
  • 目标大小估计
  • 测量相机到目标的距离
  • 3D 定位(3D positioning)
  • 机器人
  • SLAM
  • 自主导航(autonomous navigation)

如下图是一个AprilTag Tag36h11的一张图:

image.png

我们在相机标定的时候,还会用到很多AprilTags在一起组成的标定板,如下图(图片来源):

image.png

3、AprilTag family默认的是:Tag36h11,在AprilTags中有六个系列families:

  • Tag36h11
  • TagStandard41h12
  • TagStandard52h13
  • TagCircle21h7
  • TagCircle49h12
  • TagCustom48h12

2 使用python库包apriltag对AprilTag进行检测

2.1 python模块apriltag的安装

pip install apriltag

2.2 python模块apriltag的测试用例

测试用例(参考

import apriltag
import cv2
img = cv2.imread('apriltag_foto.jpg'.cv2.IMREAD_GRAYSCALE)
detector = apriltag.Detector()
result = detector.detect(img)

返回结果如下:

[DetectionBase(tag_family='tag36h11', tag_id=2, hamming=0, goodness=0.0, decision_margin=98.58241271972656, homography=array([[ -1.41302664e-01,   1.08428082e+00,   1.67512900e+01],
   [ -8.75899366e-01,   1.50245469e-01,   1.70532040e+00],
   [ -4.89183533e-04,   2.12210247e-03,   6.02052342e-02]]), center=array([ 278.23643912,   28.32511859]), corners=array([[ 269.8939209 ,   41.50381088],
   [ 269.57183838,   11.79248142],
   [ 286.1383667 ,   15.84242821],
   [ 286.18066406,   43.48323059]])),
DetectionBase(tag_family='tag36h11', ... etc

结果中是用collections.OrderedDict存储成字典类型的数据

3 AprilTags二维码检测,以及绘制检测框

1、代码

import cv2
import apriltag


image = cv2.imread('apriltags_36h11.png')

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 定义AprilTag检测选项,然后检测AprilTags
print(f"[INFO] detection AprilTags ...")
options = apriltag.DetectorOptions(families="tag36h11")
detector = apriltag.Detector(options)
results = detector.detect(gray)
print(results)
print(f"[INFO] {len(results)} total AprilTags detected")

for r in results:
    # extract the bounding box (x, y)-coordinates for the AprilTag
    # and convert each of the (x, y)-coordinate pairs to integers
    (ptA, ptB, ptC, ptD) = r.corners
    ptB = (int(ptB[0]), int(ptB[1]))
    ptC = (int(ptC[0]), int(ptC[1]))
    ptD = (int(ptD[0]), int(ptD[1]))
    ptA = (int(ptA[0]), int(ptA[1]))
    # 绘制检测到的AprilTag的框
    cv2.line(image, ptA, ptB, (0, 255, 0), 2, lineType=cv2.LINE_AA)
    cv2.line(image, ptB, ptC, (0, 255, 0), 2, lineType=cv2.LINE_AA)
    cv2.line(image, ptC, ptD, (0, 255, 0), 2, lineType=cv2.LINE_AA)
    cv2.line(image, ptD, ptA, (0, 255, 0), 2, lineType=cv2.LINE_AA)
    # 绘制 AprilTag 的中心坐标
    (cX, cY) = (int(r.center[0]), int(r.center[1]))
    cv2.circle(image, (cX, cY), 5, (0, 0, 255), -1)
    # draw the tag family on the image
    tagFamily = r.tag_family.decode("utf-8")
    cv2.putText(image, tagFamily, (ptA[0], ptA[1] - 15),
                cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
    print("[INFO] tag family: {}".format(tagFamily))

cv2.imshow("Image", image)
cv2.waitKey(0)

2、检测结果如下图:

image.png

目录
相关文章
|
Python
ROS节点检测ArUco标签并记录空间坐标
利用Realsense D435i相机检测ArUco标签,使用Python程序订阅相机的ROS话题,记录Time和标签的XYZ值,储存在一个csv文件中;当出现识别不到标签或者反馈坐标为0,0,0的情况时,不进行记录。
882 0
|
传感器 C++ 计算机视觉
【opencv3】详述PnP测距完整流程(附C++代码)
【opencv3】详述PnP测距完整流程(附C++代码)
1794 0
|
7月前
|
传感器 边缘计算 自动驾驶
蚂蚁正式开源 LingBot-Depth,基于掩码深度建模的新一代空间感知模型
蚂蚁灵波科技开源LingBot-Depth空间感知模型,首创“掩码深度建模”技术,显著提升消费级双目相机对透明、反光物体的深度补全能力。实测精度与覆盖率超越顶级工业相机,支持机器人稳定抓取、4D场景理解,已轻量化部署。
1065 3
蚂蚁正式开源 LingBot-Depth,基于掩码深度建模的新一代空间感知模型
|
8月前
|
数据采集 人工智能 算法
具身智能:零基础入门睿尔曼机械臂(七)—— 衔接开源代码!机械臂手眼标定实操
本文详解睿尔曼机械臂手眼标定全流程,涵盖环境搭建、设备准备、眼在手上/外的标定步骤、常见问题解决及标定结果在视觉抓取中的应用,助你实现精准视觉引导操作。
1724 3
|
机器学习/深度学习 数据可视化 数据挖掘
基于YOLOv8的二维码QR码识别项目
本项目集成了 YOLOv8 二维码识别模型 与 PyQt5 图形界面工具,实现了包括图片、文件夹、视频与摄像头等多种输入方式的二维码自动检测功能。配套完整源码与训练流程说明,让你开箱即用、快速部署自己的二维码识别系统。适用于商场扫码识别、仓储物流标签、票务系统等多种实际应用场景。
基于YOLOv8的二维码QR码识别项目
|
Ubuntu
Ubuntu配置Udev规则固定设备口
本文介绍了如何在Ubuntu系统中通过配置udev规则来固定设备的端口,详细说明了如何查看设备信息、创建udev规则文件、设置设备权限,并加载及重启udev规则以应用更改。
2174 0
Ubuntu配置Udev规则固定设备口
|
Ubuntu 计算机视觉 C++
Ubuntu 20.04 编译 Opencv 4.11,详细步骤(带图)及报错解决,我的踩坑之旅~
Ubuntu 20.04 编译 Opencv 4.11,详细步骤(带图)及报错解决,我的踩坑之旅~
11044 0
|
算法 计算机视觉 Python
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
|
存储 Ubuntu 机器人
机械臂手眼标定详解
这篇文章是关于机械臂手眼标定的详细教程,包括了使用ROS1 Noetic和Realsense D415相机在Ubuntu 20.04环境下进行标定的步骤和配置方法。
3977 0
机械臂手眼标定详解
|
传感器 机器人 测试技术
ROS相机内参标定详细步骤指南
本文是关于ROS相机内参标定的详细步骤指南,包括了标定的目的、原理、所需材料、具体操作流程以及标定结果的分析。文章以Ubuntu20.04和ROS1 Noetic为测试环境,适用于单目RGB相机的内参标定,使用ros-noetic-camera-calibration工具包进行操作,并提供了标定过程中的注意事项和建议。
3237 1
ROS相机内参标定详细步骤指南