配色: 字号:
《AI硬件与Pyhthon编程实践》03计算机视觉与颜色追踪写字字帖
2023-05-24 | 阅:  转:  |  分享 
  
计算机视觉与颜色追踪人工智能开源硬件与python编程实践情境导入在无人智能驾驶系统中,红绿灯识别是一项基本技术。利用无人车的前置摄像系统,
对实时捕捉到的图像帧进行图像处理和分析,发现前方的交通指示装置,然后对交通装置区域里的颜色块进行检测,实现红绿灯的识别,引导无人车
的运动。颜色的识别与追踪不仅应用于智慧交通、机器人等智慧装备之中,在工业、农业及日常生活中都有广泛应用。任务与目标了解图像颜色识别
技术的基本原理、相关算法和应用框架;掌握运用人工智能开源硬件设计颜色识别系统的方法,提升Python编程方法;应用人工智能开源硬件
和Python相关算法模块设计颜色跟踪功能;针对生活应用场景,进一步开展创意设计,设计具有实用价值的颜色跟踪应用系统。知识拓展:颜
色空间模型光的颜色由不同波长的电磁波所决定。人的眼睛内有几种辨别颜色的锥形感光细胞,分别对黄绿色、绿色和蓝紫色(或称紫罗兰色)的光
最敏感(波长分别为564、534和420纳米)。表征颜色的模型的不止一种,主要可以通过RGB、HSV、LAB、CMYK等色域模型将
可见光的颜色描述出来。知识拓展:RGB模型在模型的三维直角坐标系中,x、y、z轴相当于红、绿、蓝三通道,原点vec3(0.0, 0
.0, 0.0)代表黑色,顶点vec3(1.0, 1.0, 1.0)代表白色,原点到顶点的中轴线x = y = z代表灰度线。RG
B模型适用于计算机表示,将RGB以不同的比例混合后,人的眼睛可以形成与其它各种频率的可见光等效的色觉。知识拓展:HSV模型HSV模
型(Hue色相、Saturation饱和度、Value/Brightness亮度)比较适合人类习惯;模型中H即光谱颜色所在的位置,
用角度来表示,红、绿、蓝分别相隔120°,互补色(CMY)分别相差180°。纯度S范围在[0, 1],表示所选颜色的纯度和该颜色最
大的纯度之间的比率,当S = 0时,代表灰度。V表示色彩的明亮程度,范围[0, 1],与光强度无直接关系。知识拓展:Lab模型La
b模型又称亮度-对比度模型,是由亮度(Luminosity)和有关色彩的a、b三个要素组成。a表示从洋红色到绿色的范围,b表示由黄
色到蓝色的范围;L取值范围是[0, 100],当L = 50时,相当于50%的黑。a、b的值域都是[-128, 127];Lab模
型具有不依赖设备的优点,如果想在数字图像处理中保留宽阔的色域和丰富的色彩,最好选择Lab模型。基于Lab色彩空间的图像分割Lab颜
色空间中,L:亮度层,a:颜色在红绿轴的分量,b:颜色在蓝黄轴的分量。通过计算每个像素点和六种颜色平均值的欧氏距离,这六种距离中最
小的距离既为该像素点的颜色;LAB阈值分割法有两个关键步骤: 第一, 确定进行正确分割的阈值; 第二, 将图像的所有像素与阈值进行
比较, 以进行区域划分, 达到目标与背景分离的目的。设计与实践颜色追踪摄像头参数设置时钟控制设计颜色追踪编程红绿蓝三颜色追踪调试、
验证及完善颜色追踪摄像头参数设置# 设置摄像头工作参数sensor.reset() #初始化摄像头组件;sensor.set_p
ixformat(sensor.RGB565)#设置为彩色;sensor.set_framesize(sensor.QVGA)#设
置图像的大小;sensor.skip_frames() #在更改设置后,跳过若干帧,等待摄像头组件的稳定;# 自动增益/白平衡se
nsor.set_auto_gain() #自动增益开启或者关闭。在使用颜色追踪算法时,需要关闭自动增益。sensor.set_a
uto_whitebal() #自动白平衡开启或者关闭。在使用颜色追踪算法时,需要关闭此功能。时钟控制设计time.ticks(
)返回以毫秒计的通电后的运行时间。time.sleep(ms)休眠 ms 毫秒数。class time.clock返回一个时钟物件
。clock.tick()开始追踪运行时间。clock.fps()停止追踪运行时间,并返回当前FPS(每秒帧数)。在调用该函数前一
定要先调用tick()方法;clock.avg()停止追踪运行时间,并返回以毫秒计的当前平均运行时间。在调用该函数前始终首先调用
tickclock.reset()重置时钟物件。颜色追踪编程方法image.find_blobs()方法,用于查找图像中所有色块
,并返回一个所搜索到的色块物件的列表。thresholds 元组列表中每个元组需要有六个参数值(l_lo,l_hi,a_lo,a_
hi,b_lo,b_hi) ,分别是LAB颜色模型的L、A和B三个参数的最小值和最大值。roi参数用来设置颜色识别的视野区域,ro
i是一个元组, roi = (x, y, w, h),代表从左上顶点(x,y)开始的宽为w高为h的矩形区域,roi默认设置为整个图
像视野。颜色追踪的实现设置好摄像头视频采集工作参数,将待追踪颜色的LAB阈值传入find_blobs函数中,即可在指定的图像区域
内启动颜色追踪过程:red_threshold_01 = (41, 60, 44, 84, -10, 63)#设置红色的阈值,括号
里面的数值分别是L A B 的最大值和最小值(minL, maxL, minA,while(True): clock.tic
k() # 跟踪两次snapshots()间消耗的时间(milliseconds); img = sensor.snapsh
ot() # 捕获图像帧; blobs = img.find_blobs([red_threshold_01], area
_threshold=150) #搜索指定颜色色块; if blobs: #如果找到了目标颜色 pr
int(blobs) for b in blobs: #迭代找到的目标颜色区域
img.draw_rectangle(b[0:4]) #用矩形标记出目标颜色区域 img.draw_cro
ss(b[5], b[6]) # 在cx, cy坐标处画上十字标记拓展:实现红绿蓝三种颜色追踪thresholds = [(4
1, 60, 44, 84, -10, 63), # 红色阈值 (53, 72, -59, -
15, -3, 52), # 绿色阈值 (48, 71, -25, -5, -53, -26)]
# 蓝色阈值# 可同时设置<=16种颜色阈值while(True): clock.tick() img = sen
sor.snapshot() # 捕捉一帧图像,保存到image对象中; for blob in img.fi
nd_blobs(thresholds, pixels_threshold=200, area_threshold=200):
# 如果所检出色块的像素数或像素面积大于阈值200则会被确认,返回给blob对象; img.draw_recta
ngle(blob.rect()) # 画矩形 img.draw_cross(blob.cx(), blob
.cy()) # 画十字调试及验证分析与思考利用find_blobs函数可以实现某种特定颜色的识别和追踪,实际生活中会有同时
追踪几种颜色的需求。请思考,要进行多种颜色的同时追踪,Python程序应该如何设计?在颜色追踪应用中,你有没有遇到过环境光照变化对
识别追踪结果的影响?光照的影响严重到什么程度?请找到一种对策,并设计解决方案。实际应用中,同一种颜色物体在不同场景中表现会有偏差,颜色也有色系,如浅蓝、湖蓝、深蓝等。如何利用find_blobs方法中Thresholds参数支持多组阈值的特点,设计具有通用性的颜色追踪应用系统? 如果要设计一款颜色追踪机器人,如何利用find_blobs方法进行运动色块的追踪,让机器人跟随色块进行运动?请给出AIE控制板与机器人系统间的接口设计。
献花(0)
+1
(本文系大高老师首藏)