AprilTag标记追踪

摘要:
AprilTag的类型称为family。AprilTag有以下类型:TAG16H5→ 0至29TAG25H7→ 0至241标签25H9→ 0至34TAG36H10→ 0至2319TAG36H11→ 0至586ARTOOLKIT→ 0to511注意:通常,它由TAG36H11 AprilTag识别:代码如下:importsensor,image,time,mathsensor.reset()sensor。东南方

AprilTag的种类叫家族(family),有下面的几种:

TAG16H5 → 0 to 29
TAG25H7 → 0 to 241
TAG25H9 → 0 to 34
TAG36H10 → 0 to 2319
TAG36H11 → 0 to 586
ARTOOLKIT → 0 to 511

注意:一般使用TAG36H11 

AprilTag识别:

代码如下:

import sensor, image, time, math

sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QQVGA) # we run out of memory if the resolution is much bigger...
sensor.skip_frames(30)
sensor.set_auto_gain(False)  # must turn this off to prevent image washout...
sensor.set_auto_whitebal(False)  # must turn this off to prevent image washout...
clock = time.clock()

while(True):
    clock.tick()
    img = sensor.snapshot()
    for tag in img.find_apriltags(): # defaults to TAG36H11 without "families".
        img.draw_rectangle(tag.rect(), color = (255, 0, 0))
        img.draw_cross(tag.cx(), tag.cy(), color = (0, 255, 0))
        degress = 180 * tag.rotation() / math.pi
        print(tag.id(),degress)   #输出标签的id值和摄像头旋转的角度

运行结果:输出标签的id值和摄像头旋转的角度

AprilTag标记追踪第1张

AprilTag3D定位:

代码如下:

import sensor, image, time, math
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QQVGA) # we run out of memory if the resolution is much bigger...
sensor.skip_frames(30)
sensor.set_auto_gain(False)  # must turn this off to prevent image washout...
sensor.set_auto_whitebal(False)  # must turn this off to prevent image washout...
clock = time.clock()
# 注意!与find_qrcodes不同,find_apriltags 不需要软件矫正畸变就可以工作。
# 注意,输出的姿态的单位是弧度,可以转换成角度,但是位置的单位是和你的大小有关,需要等比例换算
# f_x 是x的像素为单位的焦距。对于标准的OpenMV,应该等于2.8/3.984*656,这个值是用毫米为单位的焦距除以x方向的感光元件的长度,乘以x方向的感光元件的像素(OV7725)
# f_y 是y的像素为单位的焦距。对于标准的OpenMV,应该等于2.8/2.952*488,这个值是用毫米为单位的焦距除以y方向的感光元件的长度,乘以y方向的感光元件的像素(OV7725)
# c_x 是图像的x中心位置
# c_y 是图像的y中心位置
f_x = (2.8 / 3.984) * 160 # 默认值
f_y = (2.8 / 2.952) * 120 # 默认值
c_x = 160 * 0.5 # 默认值(image.w * 0.5)
c_y = 120 * 0.5 # 默认值(image.h * 0.5)
#实际的TX、TY、TZ的值需要通过公式计算
#Kz=实际距离(Z值)/Tz
#之后算出每一次的实际距离=Kz*Tz
def degrees(radians):
    return (180 * radians) / math.pi
while(True):
    clock.tick()
    img = sensor.snapshot()
    for tag in img.find_apriltags(fx=f_x, fy=f_y, cx=c_x, cy=c_y): # 默认为TAG36H11
        img.draw_rectangle(tag.rect(), color = (255, 0, 0))
        img.draw_cross(tag.cx(), tag.cy(), color = (0, 255, 0))
        print_args = (tag.x_translation(), tag.y_translation(), tag.z_translation(), 
            degrees(tag.x_rotation()), degrees(tag.y_rotation()), degrees(tag.z_rotation()))
        # 位置的单位是未知的,旋转的单位是角度
        print("Tx: %f, Ty %f, Tz %f, Rx %f, Ry %f, Rz %f" % print_args)
    #print(clock.fps())

运行结果:物体相对摄像头的(x,y,z)坐标位置,和(x,y,z)旋转角度

AprilTag标记追踪第2张

建立摄像头的空间直角坐标系:

AprilTag标记追踪第3张

正是步行者,一步步登峰!

免责声明:文章转载自《AprilTag标记追踪》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇eclipse创建项目(步骤加图片)EL,OGNL表达式 $ % #下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

读取写入Xaml的方法

一、读取Xaml文件的内容 我们首先使用StreamResourceInfo的GetResourceStream(Uri uri)方法读取xap包中的MainPage.xaml文件,然后StreamReader来读取信息。  private void LoadingXaml()         {            StreamResourceInfo...

上传图片,预览并保存成blob类型 和 base64

场景: 获取到一个file类型的图片,如果直接在html中预览?这里就是利用html5的新特性,将图片转换为Base64的形式显示出来。有两种方法: 方法一:利用URL.createObjectURL() <!DOCTYPE html><html>  <head>     <title>base</ti...

我的Python之路:浏览器模拟

一、浏览器模拟——Header属性    有的时候,我们无法爬取一些网页,也就是说会出现403错误,这是因为这些网页为了防止有人恶意去采集其信息所以进行了一些反爬虫的设置。   为了可以获取这些数据我们使用一些两种方法: 1、使用 build opener() 由于urlopen()不支持HTTP的高级运用所以我们要修改头报。可以使用urllib.requ...

vue_登录注册(前台验证)

一、前言                                                                                                             1、切换手机登录还是密码登录                                 2、显示发送验证码          ...

简单验证码识别程序(源码)

摘自:http://www.lafdc.com/captcha/20080708.htm 简单验证码是指验证码图片里的字符,固定不变,或者变化很小的验证码,比如:字符上会有一些感扰点感扰线等情况,或者只有少数几种字体变化和字体大小变化。    这里给出源代码都是非常简单的源代码,学过《C程序设计》的都可以看懂,不会超出书本范围,而且不使用指针,这样VB,D...

有道词典中的OCR功能:第三方库的变化

  之前有点好奇有道词典中的OCR功能,具体来说就是强力取词功能。我知道的最有名的OCR库是tesseract,这个库是惠普在早些年前开源的。   在用python做爬虫处理验证码的时候,就会用到这个库,对应的python封装版本名字叫pytesseract。在github上可以找到tesseract的源码。   不过,此前在有道词典安装之后的文件夹中,我...