不同分辨率下Apriltag识别精度测试
Posted 卓晴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不同分辨率下Apriltag识别精度测试相关的知识,希望对你有一定的参考价值。
简 介: 通过图片扩增的方法,对于给定的测试Apriltag定位图片进行扩增,然后通过apriltag Python软件包对不同缩放比例下的图片进行检测,统计了在不同压缩比例下识别Apriltag的数量。实验结果显示,在主要包含有Apriltag图片,宽、长像素需要在100以上,才能够比较可靠的被识别。
关键词
: 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以上,才能够比较可靠的被识别。
■ 相关文献链接:
- 智能车竞赛相关的教高司公函:公函[2005]201号文、教高司[2005]13号
- 第十七届智能车竞赛智能视觉组比赛细则
- 第十七届全国大学生智能车竞赛智能视觉组规则补充说明(1)
- APRILTAG 标准图片:TAG25H9
- 根据Apriltag进行角度和距离检测
- 基于Python下的Apriltag检测
- 深度学习中图片数据增强方法
- 搭建AI Studio 中Python开发环境
- 两个对于Apriltag图片处理问题讨论
● 相关图表链接:以上是关于不同分辨率下Apriltag识别精度测试的主要内容,如果未能解决你的问题,请参考以下文章