• OpenMV VSCode 扩展发布了,在插件市场直接搜索OpenMV就可以安装
  • 如果有产品硬件故障问题,比如无法开机,论坛很难解决。可以直接找售后维修
  • 发帖子之前,请确认看过所有的视频教程,https://singtown.com/learn/ 和所有的上手教程http://book.openmv.cc/
  • 每一个新的提问,单独发一个新帖子
  • 帖子需要目的,你要做什么?
  • 如果涉及代码,需要报错提示全部代码文本,请注意不要贴代码图片
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • OpenMV IDE 4.4.4版本 OpenMV Cam H7启用不了TAG16H5



    • AprilTags Example

      This example shows the power of the OpenMV Cam to detect April Tags

      on the OpenMV Cam M7. The M4 versions cannot detect April Tags.

      import sensor, image, time, math, pyb
      from pyb import LED, UART

      #led灯的定义
      LedRed = LED(1)
      LedGreen = LED(2)
      LedBlue = LED(3)

      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(100)
      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()
      uart = UART(3,9600,timeout_char=1000)
      uart.init(9600, bits=8, parity=None, stop=1, timeout_char=1000)

      #apriltag 坐标信息存储列表
      apriltags = [[0,0],[0,0],[0,0],[0,0]]

      #坐标系的原点和宽高 x y w h
      coordinate = [1,1,1,1]

      #定义各个可能需要被识别的色块
      red_threshold = (40, 49, 30, 78, 32, 61)
      yellow_threshold = (62, 69, 0, 18, 12, 72)
      blue_threshold = (17, 38, -5, 34, -50, -22)

      #查询所有apritag,并将有用的apriltag保存到列表内
      #img:相机拍摄照片后的image对象
      #TAG16H5
      def search_apritags(img):
      for tag in img.find_apriltags(families=image.TAG16H5):
      img.draw_rectangle(tag.rect(), color = (255, 0, 0)) #用红色框出apriltag
      img.draw_cross(tag.cx(), tag.cy(), color = (0, 255, 0)) #用绿色十字标出apriltag的中心
      #将apriltag信息存放到apriltags列表内
      if tag.id() >= 0 and tag.id() <= 3:
      apriltags[tag.id()] = [tag.cx(), tag.cy()]

      #检测apriltags内是否保存有四个坐标点
      def check_apriltags():
      for i in range(0,4):
      if apriltags[i][0] == 0 and apriltags[i][1] == 0:
      return 0
      return 1

      ROI=(10,10,20,20)

      #确定原点坐标以及背景区域的宽高像素值
      #num:原点坐标apritag的ID号

      目前使用2号apritag为原点坐标

      2 0

      3 1

      def make_coordinate(num=2):
      if check_apriltags() == 1:
      coordinate[0] = apriltags[num][0]
      coordinate[1] = apriltags[num][1]
      coordinate[2] = (int)((apriltags[0][0] - apriltags[2][0] + apriltags[1][0] - apriltags[3][0])/2 + 0.5)
      coordinate[3] = (int)((apriltags[3][1] - apriltags[2][1] + apriltags[1][1] - apriltags[0][1])/2 + 0.5)
      print(coordinate)

      #寻找色块 red 1 blue 2 yellow 4
      #发送数据 一次只发送一个目标点的信息
      def find_color(img, roi):
      blobs = img.find_blobs([red_threshold, blue_threshold, yellow_threshold],roi=roi)
      if blobs:
      for b in blobs:
      if b.w() > 10 and b.h() > 10:
      img.draw_rectangle(b[0:4])
      img.draw_cross(b[5],b[6])
      for b in blobs:
      if b.w() > 10 and b.h() > 10:
      com_sendbyte(b.cx(),b.cy(),b.code())
      break

      #整合数据、串口发送
      #帧头 背景宽高位 背景宽低位 背景高高位 背景高低位 颜色 y高位 y低位 x高位 x低位 校验和
      def com_sendbyte(x, y, color):
      bwh = (coordinate[2] & 0xFF00) >> 8
      bwl = coordinate[2] & 0x00FF
      bhh = (coordinate[3] & 0xFF00) >> 8
      bhl = coordinate[3] & 0x00FF

      target_x = x - coordinate[0]
      target_y = y - coordinate[1]
      txh = (target_x & 0xFF00) >> 8
      txl = target_x & 0x00FF
      tyh = (target_y & 0xFF00) >> 8
      tyl = target_y & 0x00FF
      
      check = txh + txl + tyh + tyl + bwh + bwl + bhh + bhl + color
      
      print(bwh, bwl, bhh, bhl, color, txh, txl, tyh, tyl, check)
      arr = bytearray([bwh, bwl, bhh, bhl, color, txh, txl, tyh, tyl, check])
      uart.write(arr)
      

      find_aprtime = pyb.millis()
      find_blobtime = pyb.millis()
      while(True):
      img = sensor.snapshot().lens_corr(strength = 1.2, zoom = 1.2)
      ROI = tuple(coordinate)
      img.draw_rectangle(ROI)
      if pyb.millis() - find_aprtime > 1000:
      find_aprtime = pyb.millis()
      search_apritags(img) #寻找坐标点
      make_coordinate() #建立坐标系
      if pyb.millis() - find_blobtime > 100:
      find_blobtime = pyb.millis()
      find_color(img,ROI)

      0_1742461925120_111.png



    • 只用TAG36H11,其他的被删了。