不同分辨率下Apriltag识别精度测试

Posted 卓晴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不同分辨率下Apriltag识别精度测试相关的知识,希望对你有一定的参考价值。

简 介: 通过图片扩增的方法,对于给定的测试Apriltag定位图片进行扩增,然后通过apriltag Python软件包对不同缩放比例下的图片进行检测,统计了在不同压缩比例下识别Apriltag的数量。实验结果显示,在主要包含有Apriltag图片,宽、长像素需要在100以上,才能够比较可靠的被识别。

关键词 Apriltag分辨率

背景介绍
文章目录
智能车竞赛智能
视觉组辅助定位
测试方案
Apriltag检测
实验环境准备
检测算法
Apriltag图片扩增
不同尺寸识别
测试结果

 

§00 景介绍


0.1 智能车竞赛智能视觉组辅助定位

  在全国大学生智能车竞赛智能视觉组 中,利用 Apriltag进行车模辅助定位 。由于竞赛车模作品上的摄像头的分辨率相对较低(320×240),所以在实际应用中需要使用镜头角度范围相对较窄的摄像头,拍摄场地内的定位Apriltag定位码,才能够获取到足够多的像素用于定位码的识别。

▲ 图1 在半个比赛场地内的Apriltag定位立方体

  在比赛场地内的Apriltag 使用的为tag25H9 系列的Apriltag码,如果分辨率比较大,可以 在获取Apriltag的空间位置的同时获取它的法线走向 。为了进一步验证Apriltag在竞赛环境中的定位特性,下面通过不同的分辨率来测试检测算法定位精度。检测使用 Python中的apriltag检测算法

0.2 测试方案

  • 首先通过 深度学习中图片数据增强方法 对于采集到的标准Apriltag图库进行增强;
  • 然后通过图片resize,获得不同分辨率下的图片;
  • 利用Apriltag中的检测方法,分别统计检测后的指标;

 

§01 Apriltag检测


1.1 实验环境准备

  Ai Studio 是百度提供的人工智能云上开发环境,云端登录后是Linux工作环境,提供 BML CodeLab Notebook的交互式开发界面。之所以选择Ai Studio,是因为自己工作所使用的Windows 7 环境太旧,在安装apriltag Python软件包过程中总是出现错误。

1.1.1 安装Apriltag软件包

  在 Ai Studio Notebook环境下,安装Apriltag 软件包:

!pip install apriltag

Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting apriltag
  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/f2/e5/957bb26d575141bc25af7214c14e315c9ebb9a12ccf7c8d09ed40b59bb29/apriltag-0.0.16.tar.gz (201kB)
     |████████████████████████████████| 204kB 4.9MB/s eta 0:00:01
Building wheels for collected packages: apriltag
  Building wheel for apriltag (setup.py) ... done
  Created wheel for apriltag: filename=apriltag-0.0.16-cp37-cp37m-linux_x86_64.whl size=452177 sha256=0d36144f98ae62844ced9792df0dcd2a4476d12e95ed4aace765241708b35825
  Stored in directory: /home/aistudio/.cache/pip/wheels/7c/93/d0/f5128991a88d5609b5a87ab639a488d63f664cf5f862f26232
Successfully built apriltag
Installing collected packages: apriltag
Successfully installed apriltag-0.0.16

1.1.2 处理图片

  用于测试的Apriltag图片来自于 两个对于Apriltag图片处理问题讨论 中制作的Apriltag定位立方体。

▲ 图1.1.1 用于测试Apriltag图片

图片的尺寸:
:720
:543

1.2 检测算法

1.2.1 检测代码

atd = apriltag.Detector(apriltag.DetectorOptions(families='tag36h11 tag25h9'))
tags = atd.detect(gray)

print("tags:\\n".format(tags))

for tag in tags:
    for c in tag.corners:
        cv2.circle(img, tuple(c.astype(int)), 4, (255,0,0), 2)

    cv2.circle(img, tuple(tag.center.astype(int)), 8, (255,0,0), 4)

plt.clf()
plt.figure(figsize=(10,10))
plt.axis("off")
plt.imshow(img)

1.2.2 检测结果

  下面显示了检测到的两个Apriltag的位置以及相关的参数。

▲ 图1.2.1 检测输出的Apriltag中心与四个角落

tags: [Detection(tag_family=b'tag25h9', tag_id=1, hamming=0, goodness=0.0, decision_margin=87.13029479980469, homography=array([[ 5.25277050e-01,  3.99535001e-02,  1.37315504e+00],
       [ 2.48140105e-01,  8.12493111e-01,  1.86261033e+00],
       [-1.40731593e-04,  1.15162457e-04,  6.18912300e-03]]), center=array([221.86585028, 300.94899259]), corners=array([[130.00233459, 129.04534912],
       [313.23223877, 218.81126404],
       [314.49154663, 474.27890015],
       [137.75471497, 376.56430054]])), Detection(tag_family=b'tag25h9', tag_id=1, hamming=0, goodness=0.0, decision_margin=55.70514678955078, homography=array([[-6.66538170e-01, -3.00824606e-02, -2.71129491e+00],
       [ 2.11909359e-01, -7.69185216e-01, -1.82710635e+00],
       [-9.33389035e-05, -8.40349506e-05, -5.91966396e-03]]), center=array([458.01500415, 308.65034919]), corners=array([[350.84857178, 221.13659668],
       [564.64306641, 142.6912384 ],
       [558.94610596, 391.07223511],
       [351.05123901, 475.13195801]]))]

  应用上面的代码对于【图1】进行检测,无法检测到任何Apriltag。

1.3 Apriltag图片扩增

  对上面测试的Apriltag图片通过旋转、上下左右翻转、亮度、对比度的变化等方法进行扩增,总数达到27张图片。

▲ 图 Apriltag增强后的图片

1.3.1 处理扩增图片

def procdir(dirstr):
    filedim = os.listdir(dirstr)
    tagdim = []

    for f in filedim:
        fn = os.path.join(dirstr, f)
        if fn.find('.jpg') < 0: continue

        img = cv2.imread(fn)
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        tags = atd.detect(gray)

        tagdim.append(len(tags))

    return tagdim

imgdir = '/home/aistudio/work/apriltag'
dim = procdir(imgdir)
print("len(dim): ".format(len(dim)))

  所有图片识别的结果为: 27个。这说明图片本扩增对于Apriltag检测没有影响。

1.4 不同尺寸识别

1.4.1 处理代码

from paddle.vision.transforms import Resize
from tqdm import tqdm

def resizeImage(indir, outdir, ratio):
    fdim = os.listdir(outdir)
    for f in fdim:
        fn = os.path.join(outdir, f)
        if os.path.isfile(fn):
            os.remove(fn)

    fdim = os.listdir(indir)
    for f in fdim:
        fn = os.path.join(indir, f)
        if not os.path.isfile(fn): continue

        img = cv2.imread(fn)
        imgsize = img.shape
        width = int(imgsize[1] * ratio)
        height = int(imgsize[0] * ratio)
        img1 = Resize((height, width))(img)

        outfn = os.path.join(outdir, f)
        cv2.imwrite(outfn, img1)

    return procdir(outdir)

outdir = '/home/aistudio/GIF'
indir = '/home/aistudio/work/apriltag'

ratiodim = linspace(-2, 0, 100)
tagsdim = []

for r in tqdm(ratiodim):
    rr = exp(r*log(10))
    ret = resizeImage(indir, outdir, rr)
    tagsdim.append(sum(ret))

print(tagsdim)

1.4.2 识别精度

  下面显示了将原图进行缩小之后对应的Apriltag识别个数的变化。横坐标为缩小倍数对应的 log ⁡ 10 ( r ) \\log _10 \\left( r \\right) log10(r),纵坐标对应的识别出的Apriltag的个数总和。

  当压缩比例为0.226时,识别错误率开始出现,当压缩比例小于0.077时,便基本无法识别所有的图片中的Apriltag了。

▲ 图1.4.1 不同尺寸下的识别数量

  下面显示了原始图像以及压缩比率分别为0.226、0.077对应的图片相关尺寸。

▲ 图1.4.2 原图与压缩后的图片

 

试结果 ※


  过图片扩增的方法,对于给定的测试Apriltag定位图片进行扩增,然后通过apriltag Python软件包对不同缩放比例下的图片进行检测,统计了在不同压缩比例下识别Apriltag的数量。实验结果显示,在主要包含有Apriltag图片,宽、长像素需要在100以上,才能够比较可靠的被识别。


■ 相关文献链接:

● 相关图表链接:以上是关于不同分辨率下Apriltag识别精度测试的主要内容,如果未能解决你的问题,请参考以下文章

在 Keras 的 MNIST 数字识别中获得不同的测试数据精度

视觉系统 分辨率/精度/公差计算公式说明(Kyence)

利用棋盘格重新校正摄像头,求取Apriltag取向

如何快速生成不同系列的Apriltag码?

一个简单的Apriltag,数字,动物水果分类器

技术分享 | apriltag_ros的基础讲解