V831

文章目录

  • V831
  • 前言
  • 一、AprilTag 标记追踪测距
  • 二、 AprilTag 获取角度信息以及三维坐标的显示
  • 三、AprilTag多个三维坐标的显示
  • 总结

前言

AprilTag 标记追踪是视觉很常用的一个标签,V831也具备这个功能。

一、AprilTag 标记追踪测距

先看代码

#!/usr/bin/python3
from maix import display, camera f_x = (6 / 5.76) * 240 # 镜头的焦距是6MM,感光cmos的长是5.76mm,240像素是屏幕的长
f_y = (6 / 3.24) * 240 # 镜头的焦距是6MM,感光cmos的宽是3.24mm,240像素是屏幕的宽c_x = 240 * 0.5  # 屏幕分辨率的一半
c_y = 240 * 0.5  # 屏幕分辨率的一半while True:t = camera.capture()mks = t.find_apriltags(families = 16,fx = f_x,fy = f_y,cx = c_x,cy = c_y)for mk in mks:x_tran = mk['x_translation']y_tran = mk['y_translation']z_tran = mk['z_translation']#家族信息fam = mk['family']#外框数据x, y, w, h, id  =  mk['x'], mk['y'], mk['w'], mk['h'], mk['id']#内框数据x1,y1 = mk['corners'][0]   #访问字典的列表x2,y2 = mk['corners'][1]x3,y3 = mk['corners'][2]x4,y4 = mk['corners'][3]z1,z2 = mk['centroid']#虚拟距离length = (x_tran*x_tran + y_tran*y_tran + z_tran*z_tran)**0.5#画外框t.draw_rectangle(x, y, x + w, y + h, color=(0, 0, 255), thickness = 2) #打印IDt.draw_string(int(x + w*0.15) , int(y + h*0.15) , str(id), scale = 4.0, color = (255, 0, 0), thickness = 3)  #画内框t.draw_line(x1, y1, x2, y2, color = (0, 255, 0), thickness = 3)  t.draw_line(x2, y2, x3, y3, color = (0, 255, 0), thickness = 3)  t.draw_line(x3, y3, x4, y4, color = (0, 255, 0), thickness = 3)  t.draw_line(x4, y4, x1, y1, color = (0, 255, 0), thickness = 3)  if(fam == 16):t.draw_string(x, y-20, "TAG36H11", scale = 1.0, color = (255, 0, 0), thickness = 2)t.draw_string(x, y+h+15, str(int(length * 3.0649 - 2))+" cm", scale = 1.0, color = (255, 0, 0), thickness = 2)  display.show(t)


如果想要获取标签四个点的坐标只需要获取字典中键值为 corners 的列表中的值即可,而想获得外框(蓝色框)的坐标只需要获取字典中键值为 x , y , w , h 的的值,最后像代码中所操作的一样即可。

字典的键值如下所示: ‘x’ , ‘y’ , ‘w’ , ‘h’ , ‘id’ , ‘family’ , ‘centroid’ , ‘corners’ , ‘x_translation’ , ‘y_translation’ , ‘z_translation’ , ‘decision_margin’ , ‘hamming’ , ‘goodness’ , ‘x_rotation’ , ‘y_rotation’ , ‘z_rotation’。

介绍简单几个键值的含义。‘x’ , ‘y’ , ‘w’ , ‘h’ 键值返回的值分别是外框左上角 x 坐标和 y 坐标以及外框的长和宽。特别注意的是键值 ‘corners’ 返回的是一个列表,列表中的值代表着内框的四个顶点的坐标。

在这个代码里测距使用的原理同样类似于小孔成像,具体怎么用的可以去看之前的测距博客,我认识这个值并不是很准确(可能是追踪测距的缘故),后面我会将这个测距算法进行优化。

二、 AprilTag 获取角度信息以及三维坐标的显示

同样先看代码

#!/usr/bin/python3
from maix import display, camera
import mathf_x = (6 / 5.76) * 240 # 镜头的焦距是6MM,感光cmos的长是5.76mm,240像素是屏幕的长
f_y = (6 / 3.24) * 240 # 镜头的焦距是6MM,感光cmos的宽是3.24mm,240像素是屏幕的宽c_x = 240 * 0.5 # 屏幕分辨率的一半
c_y = 240 * 0.5 # 屏幕分辨率的一半while True:t = camera.capture()mks = t.find_apriltags(families = 16,fx = f_x,fy = f_y,cx = c_x,cy = c_y)for mk in mks:#内框数据x1,y1 = mk['corners'][0]   #访问字典的列表x2,y2 = mk['corners'][1]x3,y3 = mk['corners'][2]x4,y4 = mk['corners'][3]#获取角度信息x_rol = mk['x_rotation']y_rol = mk['y_rotation']z_rol = mk['z_rotation']#画内框t.draw_line(x1, y1, x2, y2, color = (0, 255, 0), thickness = 3)  t.draw_line(x2, y2, x3, y3, color = (0, 255, 0), thickness = 3)  t.draw_line(x3, y3, x4, y4, color = (0, 255, 0), thickness = 3)  t.draw_line(x4, y4, x1, y1, color = (0, 255, 0), thickness = 3)  #显示当前角度t.draw_string(2, 2, "X rotation is: "+str(int(180*x_rol/3.14))+" Angle", scale = 1.0, color = (0, 0, 255), thickness = 1)    #90° ~ 270°  正对着是180°。上下t.draw_string(2, 15, "Y rotation is: "+str(int(180*y_rol/3.14))+" Angle", scale = 1.0, color = (0, 0, 255), thickness = 1)   #0° ~ 90°,270° ~ 360°   正对着是0°。 左右t.draw_string(2, 30, "Z rotation is: "+str(int(180*z_rol/3.14))+" Angle", scale = 1.0, color = (0, 0, 255), thickness = 1)   #0° ~ 360°   正对着是0°。 顺时针旋转增加    #右下角画框t.draw_string(140, 120, "Space", scale = 1.0, color = (125, 0, 0), thickness = 2)  t.draw_rectangle(140, 140, 235, 235, color=(128, 128, 128), thickness=2) #画出三维坐标系t.draw_line(180, 200, int(180 - 40 * math.sin(z_rol)), int(240 - 40 * math.cos(z_rol) + 40 * math.cos(x_rol)), color = (255, 0, 0), thickness = 3)   t.draw_line(180, 200, int(140 + 40 * math.cos(z_rol) + 40 * math.cos(y_rol)), int(200 - 40 * math.sin(z_rol)), color = (0, 255, 0), thickness = 3) t.draw_line(180, 200, int(180 + 40 * math.sin(y_rol)),int(200 - 40 * math.sin(x_rol)), color = (0, 0, 255), thickness = 3) display.show(t)


如果想要获取标签的角度信息只需要获取字典中键值分别是 x_rotation,y_rotation,z_rotation 的的值即可,需要指出的是获取的值是弧度,需要转换成角度的话需要使用弧度转角度公式。将获取的弧度其乘上 180 再除以 3.14 即可(3.14选取了圆周率小数点后两位)。

x_rotation 转为角度后取值范围是 [90°,270°] 正对着标签时显示为 180° ,在标签前后移动时变化。 y_rotation 转为角度后取值范围是 [0°,90°]U[270°,360°] 正对着标签时显示为 0° ,在标签左右移动时变化。z_rotation 转为角度后取值范围是 [0°,360°] 正对着标签时显示为 0° ,在标签旋转时变化。

三、AprilTag多个三维坐标的显示

from maix import display, camera
import mathf_x = (6 / 5.76) * 240
f_y = (6 / 3.24) * 240 c_x = 240 * 0.5
c_y = 240 * 0.5 while True:t = camera.capture()mks = t.find_apriltags(families = 16,fx = f_x,fy = f_y,cx = c_x,cy = c_y)for mk in mks:#内框数据x1,y1 = mk['corners'][0]   #访问字典的列表x2,y2 = mk['corners'][1]x3,y3 = mk['corners'][2]x4,y4 = mk['corners'][3]x_rol = mk['x_rotation']y_rol = mk['y_rotation']z_rol = mk['z_rotation']#画内框t.draw_line(x1, y1, x2, y2, color = (0, 255, 0), thickness = 3)  t.draw_line(x2, y2, x3, y3, color = (0, 255, 0), thickness = 3)  t.draw_line(x3, y3, x4, y4, color = (0, 255, 0), thickness = 3)  t.draw_line(x4, y4, x1, y1, color = (0, 255, 0), thickness = 3)  t.draw_string(x4, y4, "xR: "+str(int(180*x_rol/3.14)), scale = 1.0, color = (255, 0, 0), thickness = 2)    #90° ~ 270°  正对着是180°。上下t.draw_string(x4, y4 + 15, "yR: "+str(int(180*y_rol/3.14)), scale = 1.0, color = (255, 0, 0), thickness = 2)   #0° ~ 90°,270° ~ 360°   正对着是0°。 左右t.draw_string(x4, y4 + 30, "zR: "+str(int(180*z_rol/3.14)), scale = 1.0, color = (255, 0, 0), thickness = 2)   #0° ~ 360°   正对着是0°。 顺时针旋转增加t.draw_line(x4, y4, int(x4 - 40 * math.sin(z_rol)), int(y4 + 40 - 40 * math.cos(z_rol) + 40 * math.cos(x_rol)), color = (255, 0, 0), thickness = 3)   t.draw_line(x4, y4, int(x4 - 40 + 40 * math.cos(z_rol) + 40 * math.cos(y_rol)), int(y4 - 40 * math.sin(z_rol)), color = (0, 0, 0), thickness = 3) t.draw_line(x4, y4, int(x4  + 40 * math.sin(y_rol)),int(y4 - 40 * math.sin(x_rol)), color = (0, 0, 255), thickness = 3) display.show(t)

总结

感觉加上一个jy-901陀螺仪,V831可以无限发挥他的功能。

V831——AprilTag标签识别相关推荐

  1. 产品经理也能动手实践的AI(四)- 多标签识别,图像分割

    上一篇讲了产品经理也能动手实践的AI(三)- 深入图像识别,在线辨猫,形象的说明了SGD的原理,就是如何将一个线性函数你和到我们预设的散点图上.今天主要讲2个案例,1个核心模块,分别是卫星图像的多标签 ...

  2. 【2021 第五届“达观杯” 基于大规模预训练模型的风险事件标签识别】1 初赛Rank12的总结与分析

    目录 相关链接 1 赛题分析 2 引言 3 方案 3.1 传统DL方案 3.2 预训练方案 4 提分技巧 5 加快训练 6 总结和反思 7 参考资料 相关链接 [2021 第五届"达观杯&q ...

  3. 2021 第五届“达观杯” 基于大规模预训练模型的风险事件标签识别】3 Bert和Nezha方案

    目录 相关链接 1 引言 2 NEZHA方案 2.1 预训练 2.2 微调 3 Bert 方案 3.1 预训练 3.2 微调 3 模型融合和TTA测试集数据增强 4 总结和反思 5 参考资料 相关链接 ...

  4. HTML img标签识别base64图片格式

    img标签识别base64图片格式 红色框框为需要带上的格式,有这个格式img标签才能对base64进行解码,后面白色框框为base64编码 还有一些其他格式为: data:,文本数据 data:te ...

  5. 假如把二维码类似的标签识别技术做成语音片段,优势劣势有哪些?

    假如把二维码类似的标签识别技术做成语音片段,优势劣势有哪些? 优势1:如果能把二维码信息转到人耳朵识别不到对人体无害的频率,那语音二维码的用户体验应该更高. 优势2:在o2o产业里以往的一个二维码只能 ...

  6. 阿里天池FashionAI服装属性标签识别Top1%方案分享

    前言 上周六刚刚结束FashionAI2018服装属性标签识别的复赛,比赛竞争十分激烈.比赛总共报名近3000支队伍,经过3个月的比拼,我们队伍最终获得了第11名的成绩.虽然离第十名只有一步之遥,但是 ...

  7. 阿里天池服装标签识别比赛新人赛练习经验心得 Tianchi FashionAI Attributes Recognition of Apparel

    服装标签项目总结与心得 先放项目代码仓库:https://github.com/JosephPai/FashionAI-Attributes 强烈欢迎Star/Follow 关于代码或者数据集如果有任 ...

  8. FashionAI服装属性标签识别竞赛

    初赛结束前一个月在Gluon论坛上看到了hetong007的帖子实战阿里天池竞赛--服饰属性标签识别,正好当时并无太多事情要忙,于是下载了代码和数据集,准备小试一下. 两个月后,比赛终于落下帷幕.尽管 ...

  9. 基于动物标签识别的基础知识以及FDX-B协议与结构介绍。

    在此之前,要先了解一下动物识别标准. 1  国际动物识别标准介绍 ISO 11784:动物的射频识别--代码结构. ISO 11785:动物的射频识别--技术标准. ISO 11784和11785分别 ...

  10. 解决vscode开发小程序的标签识别问题

    用vscode开发小程序,发现无法识别view标签,即使安装了小程序开发助手.wechat-snippet,问题依然存在. 在此记录一下解决方法:打开vscode的设置(ctrl+,)---- 选择编 ...

最新文章

  1. Java Setamp;HashSet
  2. java memcachedclient_Java memcached client怎样建立长连接
  3. 十进制与二进制间的相互转换
  4. 超级封装RecyclerView的适配器Adapter 只需二三十行代码
  5. 1.1 sql注入分类与详解
  6. [JavaWeb-XML]约束(DTD,Schema)
  7. 新浪云python示例_Python Web框架Flask中使用新浪SAE云存储实例
  8. mysql 进阶方向_mysql数据库入门、进阶和提升(续二)
  9. 检查eth是否到账_花费32个ETH参与以太坊2.0是件很难的事吗?
  10. 【codevs1295】N皇后问题
  11. 在OSPF网络中,如何判断LSA的新旧?
  12. Java配置文件读取写入通用类库:PropUtils 属性文件类
  13. linux下c语言 读取文件
  14. Gentoo Linux 内核指南
  15. 树莓派4支持多大tf卡_树莓派入门指南(Raspberry Pi)
  16. mysql 1786_【MySQL案例】ERROR 1786 (HY000)
  17. 高一计算机函数公式,求高一数学函数所有公式
  18. 各种异常产生原因及如何处理解决 --
  19. 使用eNSP配置防火墙USG6000v双机热备(VGMP+HRP+OSPF+NAT)
  20. 产品经理 网文20年

热门文章

  1. FireFox新标签页打开搜索和书签
  2. edge microsoff 连不上网_win10电脑连不上网的三种解决方法
  3. JS 格林威治时间格式(GMT)与普通时间格式的互相转换
  4. GlusterFS(上)
  5. CSMA(carrier sense multiple access)
  6. 笔记本未指定打印机服务器,打印机未指定怎么办_win10打印机未指定设备的解决方法...
  7. 2015 iMac如何绕过TMP安装Windows11(不用Parallels虚拟机实现macOS与Windows11双系统)
  8. 手机dlna到linux,linux dlna服务器
  9. rac的FAILOVER 和LOAD_BALANCE参数,yes和on是否通用!
  10. OpenWrt使能mt7620a第二个uart