k210用maixpy实现二维码与颜色同时识别

2021-03-196696
AI 快速预览详细 收起
本文介绍了如何使用K210和MaixPy实现二维码与颜色的同时识别。代码示例展示了如何初始化摄像头、设置识别区域,并输出识别结果。针对内存不足的问题,文章提供了具体的解决方案,包括使用KPU.memtest查看内存状态,以及通过调整utils.gc_heap_size来重新分配内存。最终实现了稳定的二维码与颜色识别功能。

k210用maixpy实现二维码与颜色同时识别

代码如下

import sensor
import image
import lcd
import time

#设置clock对象
clock = time.clock()

#初始化LCD显示屏
lcd.init()

#初始化摄像头
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_vflip(1)
sensor.set_hmirror(1)
sensor.run(1)
sensor.skip_frames(10)
mylist = [0,0,0]
while True:
    clock.tick()
    #寻找二维码,并获取二维码信息
    img_QRCode = sensor.snapshot()
    QRCode = img_QRCode.find_qrcodes()
    img = sensor.snapshot()
    #设置识别颜色的区域
    img = img.draw_rectangle([135,95,50,50],image.lab_to_rgb(mylist),2,0)

    #创建直方图对象
    color = img.get_histogram(roi=[135,95,50,50])

    #计算直方图频道的CDF
    mylist[0]=color.get_percentile(0.5).l_value()
    mylist[1]=color.get_percentile(0.5).a_value()
    mylist[2]=color.get_percentile(0.5).b_value()

    #输出颜色的三个通道值
    txts = (str((str((str((mylist[0])))) + str(","))) + str((str((str((str((mylist[1])))) + str(","))) + str((str((mylist[2])))))))
    img = img.draw_string([0,0][0],[0,0][1],txts,image.lab_to_rgb(mylist),3,mono_space=0)
    img = img.draw_rectangle([270,0,50,50],image.lab_to_rgb(mylist),1,1)
    #输出所识别到的二维码信息
    if len(QRCode) > 0:
        img.draw_string(10,30, QRCode[0].payload(), color=(0,128,0), scale=2)
    lcd.display(img)

问题

一开始写完代码,运行的时候就报错了

抛出内存不足的错误,这时我们可以用

import KPU
KPU.memtest()

来查看gc和sys的内存大小

此时sys的内存只有992k,所以会抛出内存不足
可以用

from Maix import utils
import machine

print(utils.gc_heap_size())

utils.gc_heap_size(838860)
machine.reset()

将gc中的一些内存转移到sys中,此时sys内存为

大概的测试了一下,1200kb为最小值≈1.2mb,如果少于这个值就会抛出内存不足的错误。

最后的运行结果:

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(2)
猪百岁
猪百岁
大佬,我顶!
米老鼠m
米老鼠m
大佬的解说十分详细,太感谢大佬的解答啦,感恩的心,感谢有您
- 没有更多了 -