设为首页收藏labplus社区产品资料库
96
积分值+2
33
掌控币+1
0  关注
4  粉丝
7  帖子
虎威威
2021年11月25日

#人工智能#人工智能——AI摄像头-颜色追踪

随着社会的不断进步,视频监控的用途越来越广泛。基于颜色追踪对象是从一帧图像到下一帧图像追踪对象的最快,最简单的方法之一。这种技术的速度使其对于一些接近实时追踪的应用十分具有吸引力。那么这节课我们就利用掌中宝和AI摄像头一起来制作一个可以追踪颜色的作品吧!

【基础我来学】——使用AI摄像头进行颜色追踪

【任务介绍】

事先设置好要追踪的颜色,通过AI摄像头进行监控,当摄像头检测到设定的颜色时,返回检测到的颜色信息,包括颜色区块的大小、位置、色块的数量等信息,最后在AI摄像头的LCD屏幕上利用矩形框将检测到的颜色区域框选出来,并利用掌中宝上的RGB亮红灯预警。

【材料清单】

硬件 AI摄像头、掌中宝、USB数据线、4PIN连接线

软件 mPython  

一、查找图像中指定的颜色,查看返回的数据信息

1.首先使AI摄像头连接掌中宝,根据AI摄像头的引脚功能,在指令里定义掌中宝的串口通信引脚。



2.接下来设置摄像头输出的帧尺寸,以及帧格式。帧格式可以选择灰度图GRAYSCALE或者彩色图像RGB565,本案例中我们将会追踪彩色色块,因此选择RGB565。


3.摄像头默认白平衡是开启的,但是在颜色追踪中,需要关闭白平衡。


4.接下来开始拍摄图像。新建一个变量img,将它设定为摄像头拍摄到的图像,并显示在LCD屏幕上。


5.然后找到查找色块指令。在拍摄到的图像img上查找指定的颜色。

接下来设定Lab颜色阈值,这个参数是一个由元组构成的列表,列表里的每一个元组是一个特定的颜色阈值,可以设置一个或多个颜色阈值。对于彩色图像,颜色阈值元组里面有6项,前面两项是L的最小值和最大值,中间两项是a的最小值和最大值,最后两项是b的最小值和最大值。mPython软件设置了三个默认的颜色阈值,红色、绿色和蓝色。这里我们以红色为例来进行颜色追踪。

面积阈值是设定能被识别出来的颜色色块大小,如果色块的面积小于这个值,将会被过滤掉。


知识库:

Lab颜色模型:L代表像素亮度,其取值范围为0到100,0是纯黑100为纯白。a 和b是两个颜色通道,a的取值范围为127到-128,127是红色,-128是绿色。B的取值范围也为127到-128,127是黄色,-128是蓝色。混合L、a、b能够产生具有明亮效果的色彩。Lab是一种设备无关的颜色模型,也是一种基于生理特征的颜色模型。Lab模式既不依赖光线,也不依赖于颜料,它用数字化的方法来描述人的视觉感应,是CIE组织确定的一个理论上包括了人眼可以看见的所有色彩的色彩模式。


6.进行颜色查找之后,会返回所有查找到的色块信息,我们新建一个变量blobs,将blobs设定为返回的色块列表。为了看到返回的色块列表里面具体是什么信息,我们将其打印出来。


完整程序:


    7.将程序刷入运行,即可在控制台区域看到打印出的数据。


二、绘制矩形框,将识别出的颜色色块框选起来

1.为了便于阅读,我们将打印出的数据复制到一个记事本里整理好。从这些数据可看到,变量blobs是一个列表,它可以是空列表,这是没有检测到指定颜色的时候。当检测出颜色的时候,列表里面会有检测出的所有色块的信息,每个色块的信息保存在一个字典里面。

字典是python里面的一种数据类型,它是以“键:值”的形式存储数据,每个键值对之间用逗号隔开,整个字典包括在花括号{}中。

我们来了解一下字典中的数据。颜色识别的时候,多个重叠的色块会被合并成一个色块,键count指的就是这个数量。键h指识别色块的高度,键w指色块的宽度,pixels指识别色块的像素数量。rotation指色块的旋转角度,单位弧度。cx和cy指色块的中心坐标。x和y指色块坐标,即色块矩形区域的左上角顶点坐标。code指色块的代码值,如果只有一个颜色阈值,code为1,如果有多个颜色阈值,第一个阈值的code为1,第2个阈值的code为2,第3个code为4,第4个code为8,以此类推。通过code的值,可以判断是什么颜色的色块。


2. 现在我们已经知道查找颜色后返回的数据是怎样的。但是刚才查找的时候,并没有在屏幕上指出找到的色块是哪些。那么接下来我们将查找到的色块用矩形框框起来,可以更加直观地看到。

首先用条件判断指令判断是否识别出颜色。空列表的布尔值为False,非空列表的布尔值为True。因此当没有识别出颜色时,blobs为空列表,不会执行条件判断指令里面的程序。当识别出颜色,blobs不是空列表时,才会执行里面的程序。


3.检测到颜色后,blobs列表中有数据,我们可以用for循环遍历里面的每一个色块,循环变量名可以自行设置,例如修改为b。那么b就依次是blobs列表中的每一个字典。


4.对于每一个色块,都可以用绘制矩形指令在img图像上绘制一个矩形将其框起来。可以设定矩形框的颜色,例如这里设置为红色255,0,0,然后选择空心矩形。从字典指令中找到查找键值的指令。x和y分别设定为字典b中键x和键y的值,宽和高分别设定为字典b中键w和键h的值。


5.将矩形框绘制在img图像上以后,把前面LCD显示图像的指令移动到程序最后面进行显示,就可以显示出原图像以及在其上面绘制出来的矩形框。不需要查看返回数据的时候,可以把打印blobs这一行禁用,提高程序运行速度。


6.当识别出红色后,还可以设置亮红灯指示,否则关闭所有灯。


1

点赞

1538 次阅读1 人赞1 人订阅