导航

    • 登录
    • 搜索
    • 版块
    • 产品
    • 教程
    • 论坛
    • 淘宝
    1. 主页
    2. bxr1
    3. 楼层
    B
    • 举报资料
    • 资料
    • 关注
    • 粉丝
    • 屏蔽
    • 帖子
    • 楼层
    • 最佳
    • 群组

    bxr1 发布的帖子

    • RE: 为什么模板匹配 我打印t 是一堆数字 按官方的应该是我的文件名

      @kidswong999 那请问 我该怎么样才能得到一个参数 让它输出的是这个扫描到的数字号 现在我只能知道它是否扫到 。不知道是数字几 传输不出去

      发布在 OpenMV Cam
      B
      bxr1
    • RE: 怎么才能知道扫描到这张图片在我的templates组中 是在什么位置 templates[1] 还是多少。

      我打印了一下 无论扫什么 photo,index(t) 打印出来都是 1 2 3 4 5 6 7 8 9 10 11

      发布在 OpenMV Cam
      B
      bxr1
    • RE: 为什么模板匹配 我打印t 是一堆数字 按官方的应该是我的文件名

      我的模板匹配为什么打印的是这个。 我目的是为了得到这个扫描到模板的文件名 然后写它在列表的哪个位置 现在它怎么打印这些东西

      发布在 OpenMV Cam
      B
      bxr1
    • 为什么模板匹配 我打印t 是一堆数字 按官方的应该是我的文件名
      import time, sensor, image,pyb
      from image import SEARCH_EX, SEARCH_DS
      from pyb import UART
      import ustruct
      from pyb import LED
      one=LED(1)
      #从imgae模块引入SEARCH_EX和SEARCH_DS。使用from import仅仅引入SEARCH_EX,
      #SEARCH_DS两个需要的部分,而不把image模块全部引入。
      clock = time.clock()
      # Reset sensor
      sensor.reset()
      
      # Set sensor settings
      sensor.set_contrast(1)      #设置对比度
      sensor.set_gainceiling(16)  #设定增益曲线
      sensor.set_framesize(sensor.QQVGA)
      sensor.set_pixformat(sensor.GRAYSCALE)
      #串口3定义
      uart1 = UART(3,115200)   #定义串口3变量
      uart1.init(115200, bits=8, parity=None, stop=1) # init with given parameters
      
      
      
      
      def sending_data(cx,cy):
          global uart1;
          #frame=[0x2C,18,cx%0xff,int(cx/0xff),cy%0xff,int(cy/0xff),0x5B];
          #data = bytearray(frame)
          datasum=ustruct.pack("<bbhhhhb",      #格式为俩个字符俩个短整型(2字节)
                          0x2C,                      #帧头1
                          0x12,                      #帧头2
                          int(cx), # up sample by 4   #数据1
                          int(cy), # up sample by 4   #数据1
                          0x5B)
      
          uart1.write(datasum);   #必须要传入一个字节数组
          
      
      #初始模板
      templatedemo = ["/1.pgm", "/2.pgm", "/3.pgm", "/4.pgm","/5.pgm", "/6.pgm", "/7.pgm", "/8.pgm"]
      ##分类模板
      templates = (["/3.pgm", "/32.pgm", "/33.pgm", "/34.pgm","/35.pgm", "/36.pgm"],
                  ["/4.pgm", "/42.pgm", "/43.pgm", "/44.pgm","/45.pgm", "/46.pgm"],
                  ["/5.pgm", "/52.pgm", "/53.pgm", "/54.pgm","/55.pgm", "/56.pgm"],
                  ["/6.pgm", "/62.pgm", "/63.pgm", "/64.pgm","/65.pgm", "/66.pgm"],
                  ["/7.pgm", "/72.pgm", "/73.pgm","/74.pgm","/75.pgm", "/76.pgm","/701.pgm","/702.pgm","/703.pgm","/704.pgm","/705.pgm","/706.pgm"],
                  ["/8.pgm","/82.pgm", "/83.pgm", "/84.pgm","/85.pgm", "/86.pgm","/801.pgm","/802.pgm","/803.pgm","/804.pgm","/805.pgm","/806.pgm"]) #8\
      
      imgarray=[0,0,0,0,0,0,0,0]
      imgarrays=[0,0,0,0,0,0,0,0,0,0,0,0]
      
      first=0
      cx=0
      cy=0
      
      def get_first(img):#病房号识别输入 返回一到八 判断初始模板
          #print("get_first")
          global imgarray
          r = img.find_template(imgarray[0], 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
          if r:
              img.draw_rectangle(r)
              return 1
          r = img.find_template(imgarray[1], 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
          if r:
              img.draw_rectangle(r)
              return 2
          r = img.find_template(imgarray[2], 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
          if r:
              img.draw_rectangle(r)
              return 3
          r = img.find_template(imgarray[3], 0.7 ,step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
          if r:
              img.draw_rectangle(r)
              return 4
          r = img.find_template(imgarray[4], 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
          if r:
              img.draw_rectangle(r)
              return 5
          r = img.find_template(imgarray[5], 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
          if r:
              img.draw_rectangle(r)
              return 6
          r = img.find_template(imgarray[6], 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
          if r:
              img.draw_rectangle(r)
              return 7
          r = img.find_template(imgarray[7], 0.7, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
          if r:
              img.draw_rectangle(r)
              return 8
          return 0
      
      
      '''def isget(num):#判断是否输入成功
          if num is not 0:
              for i in range (num):
                  one.on()
                  print(num) #使用时删除 给自己看的
                  time.sleep_ms(100)
                  one.off()
                  time.sleep_ms(100)
                  cx = num'''
      
      
      
      def getimgs(imgarr):
          i=0
          #print("getimgs")
          for t in imgarr:
              imgarrays[i]=image.Image((t))
              #print(imgarrays[i])
              i+=1
          return imgarrays
      
      def match_img(photos,img):#模板匹配
          isget=0
          #print("match_img")
          for t in photos:
              print("tt",t)
              r = img.find_template(t, 0.50, step=4, search=SEARCH_EX)#不能将int转换为type
             
              if r:
                  img.draw_rectangle(r)
                  isget=1
                 
                  break
              else:
                  pass
          if isget==1:
              sending_data(0x37,0x12) #55
              isget=0
          else:
              sending_data(0x73,0x21)  #115
      
      def loadimg():  #导入正常图片八张
          #print("loading")
          i=0
          for t in templatedemo:
              imgarray[i]=image.Image(str(t))
              i+=1
          return imgarray
      
      
      imgarray=loadimg()  #加载初始八张图
      
      
      while (True):
          clock.tick()
          img = sensor.snapshot()
          if imgarrays[0]!=0:
              match_img(imgarrays,img)#比对当前帧图片与加载进来的模板库匹配
              '''cy=int(img)'''
              print("y:",cy)
          else:
              if first==0:  #获取初始图片标志位
                  first=get_first(img)  #first用于判断当前是那张图片
                  if first is not 0:
                      for i in range (first):
                          one.on()
                          print(first) #使用时删除 给自己看的
                          time.sleep_ms(100)
                          one.off()
                          time.sleep_ms(100)
                          cx = first#亮灯提醒是否识别到初始图片
                          print("1:",cx)
              elif first==1:
                  sending_data(0x10) # 确定是1
              elif first==2:
                  sending_data(0x20) #确定是2
              elif imgarrays[0]==0:  #确定图片缓冲区第一次是空
                  imgarrays=getimgs(templates[first-3])#load photo 加载图片 执行一次
              else:#之后程序只会在这里执行
                  pass
         
          FH = bytearray([0x2C,0x12,cx,cy,0x5B])
          print("6:",cx)
          uart1.write(FH)
          print("FPS:",clock.fps())#帧率显示
      
      

      print(t)的值:tt {"w":70, "h":96, "type"="grayscale", "size":6720}
      tt {"w":60, "h":68, "type"="grayscale", "size":4080}
      tt {"w":60, "h":68, "type"="grayscale", "size":4080}
      tt {"w":60, "h":68, "type"="grayscale", "size":4080}
      tt {"w":60, "h":68, "type"="grayscale", "size":4080}
      tt {"w":60, "h":68, "type"="grayscale", "size":4080}
      tt {"w":60, "h":65, "type"="grayscale", "size":3900}
      tt {"w":60, "h":48, "type"="grayscale", "size":2880}
      tt {"w":60, "h":53, "type"="grayscale", "size":3180}
      tt {"w":60, "h":53, "type"="grayscale", "size":3180}
      tt {"w":60, "h":47, "type"="grayscale", "size":2820}
      tt {"w":60, "h":53, "type"="grayscale", "size":3180}

      发布在 OpenMV Cam
      B
      bxr1
    • RE: 我在使用bytearray([0x2C,0x12,0x5B]) 函数的时候 想在里面插入元素 报错的问题

      @bxr1 复制多了 那个cx 是我添加的

      发布在 OpenMV Cam
      B
      bxr1
    • RE: 我在使用bytearray([0x2C,0x12,0x5B]) 函数的时候 想在里面插入元素 报错的问题

      @kidswong999 我之前写了一个 list=[0x2C,0x12,cx,0x5B] 然后再添加进list 再把list放入bytearray 变成bytearray(list)
      然后我打印bytearray 加入的东西是不在里面的

      发布在 OpenMV Cam
      B
      bxr1
    • 怎么才能知道扫描到这张图片在我的templates组中 是在什么位置 templates[1] 还是多少。

      全部的程序在上面

      def match_img(photos,img):#模板匹配
      isget=0
      #print("match_img")
      for t in photos:
      #print(t)
      r = img.find_template(t, 0.50, step=4, search=SEARCH_EX)#不能将int转换为type
      if r:
      img.draw_rectangle(r)
      isget=1

      这段是在做模板匹配 我想知道 我怎么样才能知道 我识别到的图片是数字几 然后从串口传出来。
      换种方式问 就是 我想知道 怎么才能知道扫描到这张图片在我的templates组中 是在什么位置 templates[1] 还是多少。

      发布在 OpenMV Cam
      B
      bxr1
    • RE: 我在使用bytearray([0x2C,0x12,0x5B]) 函数的时候 想在里面插入元素 报错的问题

      @bxr1 0_16364371ng 版本

      发布在 OpenMV Cam
      B
      bxr1
    • RE: 我在使用bytearray([0x2C,0x12,0x5B]) 函数的时候 想在里面插入元素 报错的问题

      怎么解决 我查了网上资料 bytearray([0x2C,0x12,0x5B]) 我用了 bytearray.insert(2,cx) 却给报错

      发布在 OpenMV Cam
      B
      bxr1
    • 我在使用bytearray([0x2C,0x12,0x5B]) 函数的时候 想在里面插入元素 报错的问题
      import time, sensor, image,pyb
      from image import SEARCH_EX, SEARCH_DS
      from pyb import UART
      import ustruct
      from pyb import LED
      one=LED(1)
      #从imgae模块引入SEARCH_EX和SEARCH_DS。使用from import仅仅引入SEARCH_EX,
      #SEARCH_DS两个需要的部分,而不把image模块全部引入。
      clock = time.clock()
      # Reset sensor
      sensor.reset()
      
      # Set sensor settings
      sensor.set_contrast(1)      #设置对比度
      sensor.set_gainceiling(16)  #设定增益曲线
      sensor.set_framesize(sensor.QQVGA)
      sensor.set_pixformat(sensor.GRAYSCALE)
      #串口3定义
      uart1 = UART(3,115200)   #定义串口3变量
      uart1.init(115200, bits=8, parity=None, stop=1) # init with given parameters
      
      
      
      
      def sending_data(cx,cy):
          global uart1;
          #frame=[0x2C,18,cx%0xff,int(cx/0xff),cy%0xff,int(cy/0xff),0x5B];
          #data = bytearray(frame)
          datasum=ustruct.pack("<bbhhhhb",      #格式为俩个字符俩个短整型(2字节)
                          0x2C,                      #帧头1
                          0x12,                      #帧头2
                          int(cx), # up sample by 4   #数据1
                          int(cy), # up sample by 4   #数据2 
                          0x5B)
      
          uart1.write(datasum);   #必须要传入一个字节数组
          
      
      #初始模板
      templatedemo = ["/1.pgm", "/2.pgm", "/3.pgm", "/4.pgm","/5.pgm", "/6.pgm", "/7.pgm", "/8.pgm"]
      ##分类模板
      templates = (["/3.pgm", "/32.pgm", "/33.pgm", "/34.pgm","/35.pgm", "/36.pgm"],
                  ["/4.pgm", "/42.pgm", "/43.pgm", "/44.pgm","/45.pgm", "/46.pgm"],
                  ["/5.pgm", "/52.pgm", "/53.pgm", "/54.pgm","/55.pgm", "/56.pgm"],
                  ["/6.pgm", "/62.pgm", "/63.pgm", "/64.pgm","/65.pgm", "/66.pgm"],
                  ["/7.pgm", "/72.pgm", "/73.pgm","/74.pgm","/75.pgm", "/76.pgm","/701.pgm","/702.pgm","/703.pgm","/704.pgm","/705.pgm","/706.pgm"],
                  ["/8.pgm","/82.pgm", "/83.pgm", "/84.pgm","/85.pgm", "/86.pgm","/801.pgm","/802.pgm","/803.pgm","/804.pgm","/805.pgm","/806.pgm"]) #8\
      
      imgarray=[0,0,0,0,0,0,0,0]
      imgarrays=[0,0,0,0,0,0,0,0,0,0,0,0]
      
      first=0
      
      
      def get_first(img):#病房号识别输入 返回一到八 判断初始模板
          #print("get_first")
          global imgarray
          r = img.find_template(imgarray[0], 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
          if r:
              img.draw_rectangle(r)
              return 1
          r = img.find_template(imgarray[1], 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
          if r:
              img.draw_rectangle(r)
              return 2
          r = img.find_template(imgarray[2], 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
          if r:
              img.draw_rectangle(r)
              return 3
          r = img.find_template(imgarray[3], 0.7 ,step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
          if r:
              img.draw_rectangle(r)
              return 4
          r = img.find_template(imgarray[4], 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
          if r:
              img.draw_rectangle(r)
              return 5
          r = img.find_template(imgarray[5], 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
          if r:
              img.draw_rectangle(r)
              return 6
          r = img.find_template(imgarray[6], 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
          if r:
              img.draw_rectangle(r)
              return 7
          r = img.find_template(imgarray[7], 0.7, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
          if r:
              img.draw_rectangle(r)
              return 8
          return 0
      
      
      '''def isget(num):#判断是否输入成功
          if num is not 0:
              for i in range (num):
                  one.on()
                  print(num) #使用时删除 给自己看的
                  time.sleep_ms(100)
                  one.off()
                  time.sleep_ms(100)
                  cx = num'''
      
      
      
      def getimgs(imgarr):
          i=0
          #print("getimgs")
          for t in imgarr:
              imgarrays[i]=image.Image((t))
              #print(imgarrays[i])
              i+=1
          return imgarrays
      
      def match_img(photos,img):#模板匹配
          isget=0
          #print("match_img")
          for t in photos:
              #print(t)
              r = img.find_template(t, 0.50, step=4, search=SEARCH_EX)#不能将int转换为type
              if r:
                  img.draw_rectangle(r)
                  isget=1
                  break
              else:
                  pass
          if isget==1:
              sending_data(0x37,0x12) #55
              isget=0
          else:
              sending_data(0x73,0x21)  #115
      
      def loadimg():  #导入正常图片八张
          #print("loading")
          i=0
          for t in templatedemo:
              imgarray[i]=image.Image(str(t))
              i+=1
          return imgarray
      
      
      imgarray=loadimg()  #加载初始八张图
      
      FH = bytearray([0x2C,0x12,0x5B])
      while (True):
          clock.tick()
          img = sensor.snapshot()
          if imgarrays[0]!=0:
              match_img(imgarrays,img)#比对当前帧图片与加载进来的模板库匹配
      
          else:
              if first==0:  #获取初始图片标志位
                  first=get_first(img)  #first用于判断当前是那张图片
                  if first is not 0:
                      for i in range (first):
                          one.on()
                          print(first) #使用时删除 给自己看的
                          time.sleep_ms(100)
                          one.off()
                          time.sleep_ms(100)
                      cx = first#亮灯提醒是否识别到初始图片
                      bytearray.insert(2,cx)
                      print(FH)
                      uart1.write(FH)
              elif first==1:
                  sending_data(0x10) # 确定是1
              elif first==2:
                  sending_data(0x20) #确定是2
              elif imgarrays[0]==0:  #确定图片缓冲区第一次是空
                  imgarrays=getimgs(templates[first-3])#load photo 加载图片 执行一次
              else:#之后程序只会在这里执行
                  pass
          print("FPS:",clock.fps())#帧率显示
      ![0_163.png](https://fcdn.singtown.com/f30779fd-a09c-47ef-b3f8-65e78a52cfb6.png) 
      

      0_16364357N.png

      发布在 OpenMV Cam
      B
      bxr1
    • 我在用多模板匹配的时候,遇到帧率低的问题

      我在用多模板匹配的时候,用了三个组,测试的时候一共11张图,目前帧率2.0多一点。 我减少四张,帧率变成3.0多一些。 还有别的方法能解决帧率低问题吗,这样我没有保存几个模板就已经快运行不动了,然后神经网络又不能同时识别两个数字,只能用匹配了0_1636245115380_002808c7-af65-4d4b-8758-1a56f677aaca-image.png 0_1636245115396_59d1d1b6-eadf-4305-8238-4860ae5ac45c-image.png

      发布在 OpenMV Cam
      B
      bxr1
    • 模板匹配和神经训练可以一起用吗
      # Template Matching Example - Normalized Cross Correlation (NCC)
      #
      # 这个例子展示了如何使用OpenMV凸轮的NCC功能将小部分图像与图像的各个部分
      # 进行匹配...期望获得极其可控的环境NCC并不是全部有用的。
      #
      # 警告:NCC支持需要重做!到目前为止,这个功能需要做大量的工作才能有用。
      # 这个脚本将重新表明功能的存在,但在目前的状态是不足的。
      
      import time, sensor, image
      from image import SEARCH_EX, SEARCH_DS
      #从imgae模块引入SEARCH_EX和SEARCH_DS。使用from import仅仅引入SEARCH_EX, 
      #SEARCH_DS两个需要的部分,而不把image模块全部引入。
      
      # Reset sensor
      sensor.reset()
      
      # Set sensor settings
      sensor.set_contrast(1)
      sensor.set_gainceiling(16)
      # Max resolution for template matching with SEARCH_EX is QQVGA
      sensor.set_framesize(sensor.QQVGA)
      # You can set windowing to reduce the search image.
      #sensor.set_windowing(((640-80)//2, (480-60)//2, 80, 60))
      sensor.set_pixformat(sensor.GRAYSCALE)
      
      # Load template.
      # Template should be a small (eg. 32x32 pixels) grayscale image.
      templates = ["/0.pgm", "/1.pgm", "/2.pgm", "/6.pgm"] #保存多个模板
      #加载模板图片
      
      clock = time.clock()
      
      # Run template matching
      while (True):
          clock.tick()
          img = sensor.snapshot()
      
          # find_template(template, threshold, [roi, step, search])
          # ROI: The region of interest tuple (x, y, w, h).
          # Step: The loop step used (y+=step, x+=step) use a bigger step to make it faster.
          # Search is either image.SEARCH_EX for exhaustive search or image.SEARCH_DS for diamond search
          #
          # Note1: ROI has to be smaller than the image and bigger than the template.
          # Note2: In diamond search, step and ROI are both ignored.
          for t in templates:
              template = image.Image(t)
              #对每个模板遍历进行模板匹配
              r = img.find_template(template, 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
          #find_template(template, threshold, [roi, step, search]),threshold中
          #的0.7是相似度阈值,roi是进行匹配的区域(左上顶点为(10,0),长80宽60的矩形),
          #注意roi的大小要比模板图片大,比frambuffer小。
          #把匹配到的图像标记出来
              if r:
                  img.draw_rectangle(r)
                  print(t) #打印模板名字
      
          #print(clock.fps())
      
      发布在 OpenMV Cam
      B
      bxr1