• 免费好用的星瞳AI云服务上线!简单标注,云端训练,支持OpenMV H7和OpenMV H7 Plus。可以替代edge impulse。 https://forum.singtown.com/topic/9519
  • 我们只解决官方正版的OpenMV的问题(STM32),其他的分支有很多兼容问题,我们无法解决。
  • 如果有产品硬件故障问题,比如无法开机,论坛很难解决。可以直接找售后维修
  • 发帖子之前,请确认看过所有的视频教程,https://singtown.com/learn/ 和所有的上手教程http://book.openmv.cc/
  • 每一个新的提问,单独发一个新帖子
  • 帖子需要目的,你要做什么?
  • 如果涉及代码,需要报错提示全部代码文本,请注意不要贴代码图片
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • 瞳孔识别的坐标通过串口发不出去,例程也看了,都试了试,也不好使,新手,求教



    • # 瞳孔识别例程
      #
      # 这个例子展示了如何找到图像中的眼睛后的瞳孔(瞳孔检测)。 该脚本使用
      # find_eyes函数来确定应该包含瞳孔的roi的中心点。 它通过基本上找到瞳孔
      # 中心的眼睛最黑暗的区域的中心。
      #
      # 注意:此脚本首先不会检测到脸部,请将其与长焦镜头一起使用。
      #import time
      #from pyb import UART
      
      #uart = UART(3, 19200)
      
      #while(True):
      #   uart.write("Hello World!\r")
      #   time.sleep(1000)
      
      import sensor, time, image
      from pyb import UART
      # Reset sensor
      sensor.reset()
      
      # Sensor settings
      sensor.set_contrast(3)
      sensor.set_gainceiling(16)
      
      # Set resolution to VGA.
      sensor.set_framesize(sensor.VGA)
      
      #拉近镜头,使眼睛的更多细节展现在摄像头中。
      # Bin/Crop image to 200x100, which gives more details with less data to process
      sensor.set_windowing((220, 190, 200, 100))
      
      sensor.set_pixformat(sensor.GRAYSCALE)
      
      # Load Haar Cascade
      # 默认情况下,这将使用所有阶段,较低的阶段更快但不太准确。
      # 加载眼睛的haar算子
      eyes_cascade = image.HaarCascade("eye", stages=24)
      print(eyes_cascade)
      
      # FPS clock
      clock = time.clock()
      
      
      uart = UART(3, 19200)
      iris=[]
      while (True):
          clock.tick()
          # Capture snapshot
          img = sensor.snapshot()
          # Find eyes !
          # Note: Lower scale factor scales-down the image more and detects smaller objects.
          # Higher threshold results in a higher detection rate, with more false positives.
          eyes = img.find_features(eyes_cascade, threshold=0.5, scale=1.5)
          #先利用find_features函数识别人眼。image.find_features(cascade, threshold=0.5, scale=1.5),thresholds越大,匹配速度越快,错误率也会上升。scale可以缩放被匹配特征的大小。
          
          # Find iris
          #在识别到的人眼中寻找瞳孔。
          
          for e in eyes:
              iris = img.find_eye(e)
              #image.find_eye((x, y, w, h)),find_eye的参数是一个矩形区域,左上顶点为
              #(x,y),宽w,高h,注意(x,y,w,h)是一个元组,不要漏掉括号()。上行代码中
              #的e即代表识别到的眼睛的矩形区域。
              #find_eye的原理是找到区域中颜色最深处的中心。
              img.draw_rectangle(e)
              img.draw_cross(iris[0], iris[1])
              #用矩形标记人眼,用十字形标记瞳孔。
              print(iris)
              uart.write("11111") 
              id=iris.id()
              uart.writechar(id)
          # Print FPS.
          # Note: Actual FPS is higher, streaming the FB makes it slower.
          # print(clock.fps())
      


    • 先确定,是串口的问题?还是瞳孔识别的问题?

      首先,运行串口的例子,推荐OpenMV 的串口调试扩展板,确定可以串口可以正常发送数据。

      然后,确定瞳孔识别确实识别出数据。可以print识别到的瞳孔



    • 串口我写的有问题



    • 试了好多次都不对,帮看看哪里的问题吧



    • 你确定你是否会看串口的数据,是否会通过示波器或者USB转串口模块,查看串口的数据。



    • 这个我会,其实就是我不知道怎么将瞳孔的坐标发出去,
      id=iris.id()
      uart.writechar(id)
      我是这么写的,有问题,而且我确定问题出在这里,因为我如果不让串口发送坐标,而是发送
      11111是没有问题的我是这么写的串口助手也显示了出来
      uart.write("11111")



    • 我真的很需要你的帮助,下周我就要交毕设了。帮帮忙



    • iris里面id哪来的?瞎猜的?瞎猜的肯定运行不了。

      你应该早把报错提示贴出来。

      iris[0], iris[1]是两个瞳孔的坐标,下面是代码

      瞳孔0的x坐标=iris[0][0]
      瞳孔0的y坐标=iris[0][1]

      瞳孔1的x坐标=iris[1][0]
      瞳孔1的y坐标=iris[1][1]

      如果你要发送数字,那就
      uart.writechar(瞳孔0的x坐标)
      uart.writechar(瞳孔0的y坐标)
      uart.writechar(瞳孔1的x坐标)
      uart.writechar(瞳孔1的y坐标)

      如果你要发送字符串,那就
      uart.write(str(瞳孔0的x坐标))
      uart.write(str(瞳孔0的y坐标))
      uart.write(str(瞳孔1的x坐标))
      uart.write(str(瞳孔1的y坐标))



    • 此回复已被删除!


    • @sfdw 我刚写了这样写的
      iri[0]=iris[0][0]
      iri[1]=iris[0][1]
      uart.writechar(iri[0])
      uart.writechar(iri[1])
      还是报错,报错如下
      "int" object is not subscriptable



    • 你的语法有问题……你直接a,b,c,d当变量名算了。



    • @kidswong999
      我刚写了这样写的
      iri[0]=iris[0][0]
      iri[1]=iris[0][1]
      uart.writechar(iri[0])
      uart.writechar(iri[1])
      还是报错,报错如下
      "int" object is not subscriptable
      后来又这样写
      x_1=iris[0][0]
      Y_1=iris[0][1]
      uart.writechar(x_1)
      uart.writechar(Y_1)
      还是报错,报错如下
      "int" object is not subscriptable
      两次报错一样,



    • @kidswong999
      a=iris[0][0]
      b=iris[0][1]
      uart.writechar(a)
      uart.writechar(b)
      这样写也是报错一样的错误



    • 应该是id=iris.id()这里错了,这个地方要加数据转换,如果坐标是浮点型数据的话这样写,id=“%.2f”%(iris.id())



    • 我之前颜色识别发送中心坐标的时候,是这样写的,
      output=“%.2f,%.2f”%(int(blob[5]),int(blob[6]))
      uart.write(output)道理应该差不多,你可以参考一下