K210人工智能Scratch目标颜色识别追踪Mixly编程Micropython源码
齐护
编辑于 2023年10月19日 06:38
收录于文集
共2篇

齐护机器人 AIstart 颜色追踪实操详解教程

 

在很多情况下我们会让机器人追踪某个目标,比如通过目标的某个特性,如光,颜色,尺寸等,这里我们以追踪颜色块的方式来实现这个目的。

应用示例:颜色追踪技术的激光点追踪应用。

操作步骤

软硬件:

采用的是齐护机器人的 K210(AIstart)主机,软件可以齐护编程或 Mixly 图形化软件,当然你也可以用支持 micropython 的其它软件进行代码编程的方式。

概念:

LAB 颜色模型:

 Lab颜色模型是有国际照明委员会(CIE)于1976年公布的一种颜色模型,Lab颜色模型弥补了RGB和CMYK两种色彩模式的不足。Lab颜色模型由三个要素组成。一个要素是亮度(L),a 和是两个颜色通道。a包括的颜色是从深绿色(低亮度值)到灰色(中亮度值)再到亮粉红色(高亮度值);b是从亮蓝色(底亮度值)到灰色(中亮度值)再到黄色《高亮度值)。因此,这种颜色混合后将产生具有明亮效果的色彩。

LAB分布原理图

 

L(Lightness):表示颜色的亮度,取值范围从0到100,其中0表示纯黑色,100表示纯白色。

a(Green-Red Axis):表示颜色的红绿色度,取值范围从-128到+127,其中-128表示绿色,+127表示红色。

b(Blue-Yellow Axis):表示颜色的黄蓝色度,取值范围从-128到+127,其中-128表示蓝色,+127表示黄色。

Lab色彩空间是一种与人眼感知颜色相关的色彩空间,可以用来描述任何一种颜色,包括明亮的颜色、暗淡的颜色、浅色和深色等等。它具有无视觉量纲的特点,也就是说,它的三个参数相对于人眼感知颜色的差异更加均匀和稳定,因此可以更好地描述颜色之间的差异和相似度。

在色差测量中,Lab色彩空间可以用来比较标准颜色和实际颜色之间的差异,以评估产品的色彩质量和一致性。同时,Lab色彩空间也被广泛应用于颜色管理、图像处理、设计等领域,以保证颜色的准确度和稳定性。

注:传入的颜色阈值参数按照 LAB 格式 (l_lo,l_hi,a_lo,a_hi,b_lo,b_hi) 

l_lo,l_hi :L颜色值的设置,最高l_hi及最低l_lo的偏差范围其它同理为 A-B 颜色模型值的上下偏差范围。

实操:

1, LAB 值采样:上传【35 颜色识别_识别采集图片中间框区域的颜色值】例程文件,如果是 Mixly 软件例程同理,记得最后打印或显示出来的 LAB 值不要转成 RGB 值,让其直接显示 LAB 值。

齐护编程或Mixly软件编程

 

Micropython 源码:

代码块
JavaScript
自动换行
复制代码
 

import machine, sensor, lcd, image, image as pic

 

img = 0

color = 0

mylist = 0

 

sensor.reset()

sensor.set_pixformat(sensor.RGB565)

sensor.set_framesize(sensor.QVGA)

sensor.run(1)

sensor.skip_frames(10)

sensor.set_hmirror(0)

sensor.set_vflip(0)

lcd.init(freq=15000000,color=(0xff,0xff,0xff),invert = 0)

mylist = [0,0,0]

while True:

# 从摄像头获取图象

img = sensor.snapshot()

# 颜色识别

color = img.get_histogram(roi=[135,95,50,50])

# 保存颜色到列表

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()

# 画出检测区域

img = img.draw_rectangle([135,95,50,50],image.lab_to_rgb(mylist),1,False)

# 画个方块用于显示检测到的颜色

img = img.draw_rectangle([270,0,50,50],image.lab_to_rgb(mylist),1,True)

# 显示文本

img = img.draw_string(0, 0, (str('LAB:') + str(mylist)), scale=1, color=(0x00,0x00,0x00), x_spacing=1, y_spacing=1, mono_space=False)

lcd.display(img)
复制成功

 

2,摄像头中心要全覆盖要识别的颜色区,记录 LAB 值,如图:49,-23,14   得到当前色块的L值为49,A 值为-23,B 值为14。

采样LAB值

 

3,设置 LAB 值的上下偏差,如 L 值49 我们设它的区间为20~70之间,A值-23设置区间为-50~0之间,B 值14设置区间为0~40,这个区间越小说明精度超高,反之就识别要求更低,这个要根据用户的实际使用场景要求来设置。将上面的设置以数组的方式放入程序【34 颜色追踪_追踪采集图片中设定色域的颜色】例程文件中,如果是 Mixly 软件例程同理的 ,LAB 值处填入,如图,并将识别到色块区的显示框颜色设为红色或其它你喜欢的颜色。

 

Micropython 源码:

代码块
JavaScript
自动换行
复制代码
import machine, lcd, sensor, image

 

img = 0

 

lcd.init(freq=15000000,color=(0x61,0x74,0x63),invert = 0)

sensor.reset()

sensor.set_pixformat(sensor.RGB565)

sensor.set_framesize(sensor.QVGA)

sensor.run(1)

sensor.skip_frames(10)

sensor.set_hmirror(0)

sensor.set_vflip(0)

while True:

img = sensor.snapshot()

for i in img.find_blobs([(20, 70, -50, 0, 0, 40)],roi=[0,0,320,240],area_threshold=10,pixels_threshold=10,merge=True,margin=10):

img = img.draw_rectangle(i.rect(),(0xff,0x00,0x00),1,False)

lcd.display(img)
复制成功

 

4,上传程序运行,这时可以看到当识别到对应的采样LAB区,移动摄像头时,红色框会一直在色块边上,这样就成功追踪到颜色区了,如果你要设计外部机构得到这个框中心的坐标值,可以在程序把这个坐标输出去控制对应的机构。这样类似于定点跟踪,目标定位。。。。项目就可以用这种方式实现。

 

更多详细的关于 K210的应用可以到齐护机器人资料中心去查找学习!

结束!!祝您学习愉快!