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

目录
相关文章
|
7月前
|
JSON 文字识别 数据可视化
印刷文字识别产品使用合集之有识别二维码并将识别二维码的内容通过接口返回的功能吗
印刷文字识别(Optical Character Recognition, OCR)技术能够将图片、扫描文档或 PDF 中的印刷文字转化为可编辑和可搜索的数据。这项技术广泛应用于多个领域,以提高工作效率、促进信息数字化。以下是一些印刷文字识别产品使用的典型场景合集。
|
7月前
|
机器学习/深度学习 API Android开发
视觉智能平台常见问题之摄像头抓拍到包含人脸的照片如何解决
视觉智能平台是利用机器学习和图像处理技术,提供图像识别、视频分析等智能视觉服务的平台;本合集针对该平台在使用中遇到的常见问题进行了收集和解答,以帮助开发者和企业用户在整合和部署视觉智能解决方案时,能够更快地定位问题并找到有效的解决策略。
视觉智能平台常见问题之摄像头抓拍到包含人脸的照片如何解决
|
7月前
|
小程序 JavaScript
微信小程序长按识别图片二维码功能
微信小程序长按识别图片二维码功能
444 0
|
7月前
|
机器学习/深度学习 API Android开发
视觉智能平台常见问题之判断摄像头抓拍到包含人脸的照片如何解决
视觉智能平台是利用机器学习和图像处理技术,提供图像识别、视频分析等智能视觉服务的平台;本合集针对该平台在使用中遇到的常见问题进行了收集和解答,以帮助开发者和企业用户在整合和部署视觉智能解决方案时,能够更快地定位问题并找到有效的解决策略。
|
移动开发 前端开发 JavaScript
纯web端实现二维码识别
最近公司的业务场景中有个生成二维码和识别二维码的需求。生成二维码之前有做过,选用的 qrcode.js这个前端库,操作比较简单。这里不再赘述。 刚开始看到二维识别这个需求觉得很简单,以为有相应的前端库直接用就行了。但当真正开始写功能时,发现二维识别会涉及到很多其他的功能。废话不再多说,还是来看看如何实现的吧。
|
7月前
|
存储 数据挖掘
[Halcon&识别] 二维码识别
[Halcon&识别] 二维码识别
283 0
|
算法 小程序 Java
图像中二维码的检测和定位
图像中二维码的检测和定位
1278 0
图像中二维码的检测和定位
|
存储 编解码 索引
OpenMV扫码识别
OpenMV扫码识别
209 1
|
Java Maven
让一句话生成一张二维码图片
让一句话生成一张二维码图片
|
移动开发 前端开发 JavaScript
网页长按保存及识别二维码
网页长按保存及识别二维码
314 0
网页长按保存及识别二维码