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

目录
相关文章
|
4月前
|
计算机视觉
OpenCV(三十八):二维码检测
OpenCV(三十八):二维码检测
146 0
|
计算机视觉
微信开源二维码检测识别-实时检测识别-opencv-Python
微信开源二维码检测识别-实时检测识别-opencv-Python
|
2月前
|
文字识别 开发工具
印刷文字识别使用问题之是否可以识别带有文字和二维码的商户码
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。
|
4月前
|
JSON 文字识别 数据可视化
印刷文字识别产品使用合集之有识别二维码并将识别二维码的内容通过接口返回的功能吗
印刷文字识别(Optical Character Recognition, OCR)技术能够将图片、扫描文档或 PDF 中的印刷文字转化为可编辑和可搜索的数据。这项技术广泛应用于多个领域,以提高工作效率、促进信息数字化。以下是一些印刷文字识别产品使用的典型场景合集。
|
4月前
|
小程序 JavaScript
微信小程序长按识别图片二维码功能
微信小程序长按识别图片二维码功能
276 0
|
4月前
|
存储 数据挖掘
[Halcon&识别] 二维码识别
[Halcon&识别] 二维码识别
208 0
|
移动开发 前端开发 JavaScript
纯web端实现二维码识别
最近公司的业务场景中有个生成二维码和识别二维码的需求。生成二维码之前有做过,选用的 qrcode.js这个前端库,操作比较简单。这里不再赘述。 刚开始看到二维识别这个需求觉得很简单,以为有相应的前端库直接用就行了。但当真正开始写功能时,发现二维识别会涉及到很多其他的功能。废话不再多说,还是来看看如何实现的吧。
|
算法 小程序 Java
图像中二维码的检测和定位
图像中二维码的检测和定位
1176 0
图像中二维码的检测和定位
|
存储 编解码 索引
OpenMV扫码识别
OpenMV扫码识别
167 1
|
移动开发 前端开发 JavaScript
网页长按保存及识别二维码
网页长按保存及识别二维码
259 0
网页长按保存及识别二维码