终有花开见月明 2022-08-04 20:53 采纳率: 75%
浏览 116
已结题

在搞一个水果识别的小项目时,对不同水果分别计数时的问题。

问题遇到的现象和发生背景

最近在搞一个水果识别的小项目,遇到一些问题,大概就是利用k210进行云端训练,目前已经成功识别出了水果(红苹果),现在想要识别两种苹果,一种是青苹果,一种是红苹果;k210识别之后,分别统计两种苹果的数目(这一点我没有头绪),可以利用串口与上位机通信,获取到两种苹果的数目(比如说打印出来?),问题就是k210那端识别出来该怎么分别计数呢,如何避免对一个苹果重复识别?
求各位给点思路。

下面是k210单单只是识别红苹果的代码,识别绿苹果的我还没有训练

问题相关代码,请勿粘贴截图

generated by maixhub, tested on maixpy3 v0.4.8

copy files to TF card and plug into board and power on

import sensor, image, lcd, time
import KPU as kpu
import gc, sys

input_size = (224, 224)
labels = ['apple']
anchors = [3.28, 4.04, 2.75, 3.56, 4.44, 5.31, 3.16, 4.33, 3.62, 4.29]

def lcd_show_except(e):
import uio
err_str = uio.StringIO()
sys.print_exception(e, err_str)
err_str = err_str.getvalue()
img = image.Image(size=input_size)
img.draw_string(0, 10, err_str, scale=1, color=(0xff,0x00,0x00))
lcd.display(img)

def main(anchors, labels = None, model_addr="/sd/m.kmodel", sensor_window=input_size, lcd_rotation=0, sensor_hmirror=False, sensor_vflip=False):
sensor.reset() #初始化摄像头
sensor.set_pixformat(sensor.RGB565) #设置摄像为RGB565格式
sensor.set_framesize(sensor.QVGA)#分辨率为QVGA,即320x240
sensor.set_windowing(sensor_window)#设置摄像头为224,224
sensor.set_hmirror(sensor_hmirror)#设置摄像头水平镜像 enable 开启水平镜像
sensor.set_vflip(sensor_vflip)# 设置摄像头垂直镜像 表示开启垂直镜像
sensor.run(1)

lcd.init(type=1)
lcd.rotation(lcd_rotation) #反转LCD屏幕
lcd.clear(lcd.WHITE)

if not labels:
    with open('labels.txt','r') as f:
        exec(f.read())
if not labels:
    print("no labels.txt")
    img = image.Image(size=(320, 240))
    img.draw_string(90, 110, "no labels.txt", color=(255, 0, 0), scale=2)
    lcd.display(img)
    return 1
try:
    img = image.Image("startup.jpg")
    lcd.display(img)
except Exception:
    img = image.Image(size=(320, 240))
    img.draw_string(90, 110, "loading model...", color=(255, 255, 255), scale=2)
    lcd.display(img)

try:
    task = None
    task = kpu.load(model_addr) #加载模型
    kpu.init_yolo2(task, 0.5, 0.3, 5, anchors) # threshold:[0,1], nms_value: [0, 1]
    while(True):
        img = sensor.snapshot()#拍一张照片
        t = time.ticks_ms()
        objects = kpu.run_yolo2(task, img)#task:SD卡中的模型,img:目前相机拍照的图像,返回一个 kpu_yolo2_find 的列表
        t = time.ticks_ms() - t
        if objects:
            for obj in objects:#取出列表中的对象
                pos = obj.rect()#返回一个矩形元组(x, y, w, h) ,用于如色块边界框的 image.draw_rectangle 等
                img.draw_rectangle(pos)
                img.draw_string(pos[0], pos[1], "%s : %.2f" %(labels[obj.classid()], obj.value()), scale=2, color=(255, 0, 0))
        img.draw_string(0, 200, "t:%dms" %(t), scale=2, color=(255, 0, 0))
        lcd.display(img)
except Exception as e:
    raise e
finally:
    if not task is None:
        kpu.deinit(task) #释放模型占用的内存, 立即释放, 但是变量还在

if name == "main":
try:
# main(anchors = anchors, labels=labels, model_addr=0x300000, lcd_rotation=0)
main(anchors = anchors, labels=labels, model_addr="/sd/model-9043.kmodel")
except Exception as e:
sys.print_exception(e)
lcd_show_except(e)
finally:
gc.collect()#自动释放内存

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-08-05 06:03
    关注
    文章:图像处理实践 | 水果图像的识别与分类 中也许有你想要的答案,请看下吧
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月19日
  • 已采纳回答 8月11日
  • 创建了问题 8月4日

悬赏问题

  • ¥15 依据报错在原代吗格式的基础上解决问题
  • ¥15 在虚拟机中安装flash code
  • ¥15 单片机stm32f10x编写光敏电阻调节3.3伏大功率灯亮度(光强越大灯越暗,白天正常光强灯不亮,使用ADC,PWM等模块)望各位找一下错误或者提供一个可实现功能的代码
  • ¥20 verilog状态机方法流水灯
  • ¥15 pandas代码实现不了意图
  • ¥15 GD32H7 从存储器到外设SPI传输数据无法重复启用DMA
  • ¥25 LT码在高斯信道下的误码率仿真
  • ¥45 渲染完成之后将物体的材质贴图改变,自动化进行这个操作
  • ¥15 yolov5目标检测并显示目标出现的时间或视频帧
  • ¥15 电视版的优酷可以设置电影连续播放吗?