• OpenMV VSCode 扩展发布了,在插件市场直接搜索OpenMV就可以安装
  • 如果有产品硬件故障问题,比如无法开机,论坛很难解决。可以直接找售后维修
  • 发帖子之前,请确认看过所有的视频教程,https://singtown.com/learn/ 和所有的上手教程http://book.openmv.cc/
  • 每一个新的提问,单独发一个新帖子
  • 帖子需要目的,你要做什么?
  • 如果涉及代码,需要报错提示全部代码文本,请注意不要贴代码图片
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • 我现根据数字边缘模型实现数字识别,保存了百张数字边缘图进行模板匹配,然后根据roi在灰度图像上画框,运行太卡



    • import sensor, image, time, ml, uos, gc
      from image import SEARCH_EX, SEARCH_DS
      # 初始化传感器
      sensor.reset()
      sensor.set_pixformat(sensor.GRAYSCALE)    # 使用灰度图像减少内存占用
      sensor.set_framesize(sensor.QQVGA)        # 设置为 QQVGA(160x120)进一步减少内存占用
      sensor.skip_frames(time=2000)             # 等待传感器稳定
      
      # 加载模型和标签
      net = None
      labels = None
      templates_folder = "/number1" #保存多个模板
      
      try:
          # 加载模型文件
          net = ml.Model("ei-edge_num_identify1-openmv-v3/trained.tflite",
                         load_to_fb=uos.stat('ei-edge_num_identify1-openmv-v3/trained.tflite')[6] > (gc.mem_free() - (64*1024)))
      except Exception as e:
          raise Exception('模型加载失败: ' + str(e))
      
      try:
          :face_with_tears_of_joy: # 加载标签文件
          labels = [line.rstrip('\n') for line in open("ei-edge_num_identify1-openmv-v3/labels.txt")]
      except Exception as e:
          raise Exception('标签加载失败: ' + str(e))
      try:
          templates = [f for f in uos.listdir(templates_folder) if f.endswith('.pgm')]
      except Exception as e:
          raise Exception("无法加载模板文件夹: " + str(e))
      clock = time.clock()
      
      while True:
          clock.tick()
      
          # 捕获灰度图像
          gray_img = sensor.snapshot()
      
          # 创建边缘图像作为备份
          # try:
          edge_img = gray_img.copy()  # 备份原图像
          edge_img = edge_img.find_edges(image.EDGE_CANNY, threshold=(50, 80))  # 应用边缘检测
          for t in templates:
              template_path = templates_folder + "/" + t
              template = image.Image(template_path)
                 #对每个模板遍历进行模板匹配
              r = edge_img.find_template(template, 0.70, step=4, search=SEARCH_EX)
              if r:
                  gray_img.draw_rectangle(r)
          # except MemoryError:
          #     print("内存不足,跳过此帧")
          #     continue
      
          # 使用模型预测
          predictions_list = list(zip(labels, net.predict([gray_img])[0].flatten().tolist()))
          max_prediction = max(predictions_list, key=lambda x: x[1])
          detected_label = max_prediction[0]  # 获取预测结果
          print("识别结果: %s (置信度: %f)" % (detected_label, max_prediction[1]))
      
          # 检测 ROI 区域并绘制矩形框
          # for blob in edge_img.find_blobs([(0, 255)], pixels_threshold=50, area_threshold=50, merge=True):
          #     roi = blob.rect()  # 获取 ROI 矩形
          #     gray_img.draw_rectangle(roi, color=255)  # 在灰度图像上绘制矩形框
          #     gray_img.draw_string(roi[0], roi[1] - 10, detected_label, color=255, scale=1)  # 绘制标签
      
          # 显示灰度图像(包含矩形框和标签)
          print(clock.fps(), "fps")  # 打印帧率
      


    • 有没有直接在模型中获得roi的方法呀