星瞳实验室APP,快速收到回复
  • 我们只解决官方正版的OpenMV的问题(STM32),其他的分支有很多兼容问题,我们无法解决。
  • 如果有产品硬件故障问题,比如无法开机,论坛很难解决。可以直接找售后维修
  • 发帖子之前,请确认看过所有的视频教程,https://singtown.com/learn/ 和所有的上手教程http://book.openmv.cc/
  • 每一个新的提问,单独发一个新帖子
  • 帖子需要目的,你要做什么?
  • 如果涉及代码,需要报错提示全部代码文本,请注意不要贴代码图片
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • 我在使用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



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



    • @bxr1 0_16364371ng 版本



    • 报错提示很清楚了, bytearray不能insert。bytearray不是列表,是不能插入的。

      解决办法:只在uart.write()的时候生成bytearray。其他情况下用list。



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



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



    • @bxr1我在使用bytearray([0x2C,0x12,0x5B]) 函数的时候 想在里面插入元素 报错的问题 中说:

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

      发一个新帖子,附上全部代码。
      最好是可以马上复现错误的,否则查起来太费劲,你的无关代码太多。


    Locked