视觉识别摄像头积木块编程指南

视觉识别摄像头简介

(1)视觉识别摄像头可以作为Xtron的扩展来使用,它是一款用于图像识别的传感器。

(2)其内置的深度学习引擎可以识别多种目标物体,例如颜色检测、球体检测、人体检测、卡片识别等。

(3)检测结果可以通过 I2C 进行输出,体积小巧,功耗低,所有算法本地处理,无须联网,可广泛应用于人工智能教具、创客等产品或领域。

(4)提供了简单而实用的参数设置功能:摄像头帧率,LED 颜色,数码变焦,白平衡,算法性能设置。合理设置这些参数,将会有利于摄像头性能的提升。

下面我们将介绍视觉识别摄像头的使用方法。

视觉识别摄像头硬件连接

视觉识别摄像头的外设和接口如图所示:

../../../_images/MU_hard1.png

(1)将传感器左侧输出模式拨码开关1拨至下方,2拨至上方;

(2)将传感器连接到Xtron的I2C扩展接口;

(3)将传感器的地址选择拨码开关拨至对应位(默认地址0x60,对应MU00,1、2都在下方,只有在与其他传感器地址冲突时才需要进行更改,平时不推荐修改此设置),

视觉识别摄像头积木块介绍

  1. 初始化模块

    将视觉传感器的连接初始化为I2C模式。

    ../../../_images/initialization_port2.png
  2. 开启算法

    当前版本共有如下7种算法:

    • 色块检测:指定颜色,输出视野内该颜色色块的长度与中心点坐标

    • 颜色识别:视野内指定坐标点的颜色信息

    • 球体检测:球体识别算法并不能识别任何球体,仅支持橙色乒乓球(Label:1)和绿色网球(Label:2)的识别。

    • 人体检测:依据上半身轮廓

    • 形状卡片:识别5张形状卡片

    • 交通卡片:识别5张交通卡片

    • 数字卡片:识别10张数字卡片

    ../../../_images/MU21.png
  3. 设置算法性能

    • 不同算法性能下识别的速度与准确率会有所差异,可根据实际的应用需要选择合适的性能参数。

    • 速度优先:需要高速处理的场合,,如实时跟踪某个物体;对某个物体需要做出快速的响应;场地或背景可以控制的环境。识别速度快,误报率稍高;

    • 性能均衡:默认模式,适合一般场景的应用需求;

    • 准确率优先:复杂场景情况下使用,识别速度稍慢,误报率低;当多类识别算法同时开启时,譬如形状卡片与交通卡片混合摆放识别时,请采用该模式,以消除不同组卡片间的误报。

    ../../../_images/MU31.png
  4. 关闭/开启摄像头高帧率模式

    • 摄像头帧率指摄像头采集图片的速度,分为高速模式和标准模式,高速模式为 50fps,标准模式为 25fps。

    • 提高摄像头帧率可以提高图像处理的速度,缓解图像拖影问题,但功耗会有一定增加。环境较暗时,标准模式比高速模式成像要亮一些。

    • 默认使用高帧率模式,相对普通模式有更快的识别速度,但功耗和发热量随之增加,可用于快速检测的场景,如需要低功耗使用则可关闭。

      ../../../_images/high_frame_rate2.png
  5. 设置摄像头白平衡

    (1)当摄像头视野中出现大面积有颜色的物体时,摄像头会发生白平衡失真,产生偏色现象,通过事先锁定白平衡能够防止此问题的发生。

    (2)但白平衡功能并不总是有利于色彩还原的,合理使用白平衡对于颜色相关的算法是十分关键。

    (3)白平衡的调节分为自动调节方式和固定参数方式,对于一张构图颜色均衡的图像,其 R,G,B 三个通道的值应是分布均匀的,如果 R、G、B 通道分布出现了失衡,自动白平衡功能会适时的修改各通道的色彩增益值使其重新分布均衡,而固定白平衡是不会改变其色彩增益的。

    (4)模式介绍:

    • 自动模式:适用于光照良好且对颜色要求不高的环境中使用;

    • 锁定模式:适用于颜色还原要求较高的环境,让摄像头面对白纸进行白平衡校准,然后锁定白平衡参数,锁定后颜色不会随环境的改变而变化;

    • 白光模式:适合于白色灯光或者阴天环境中使用,该模式也属于自动白平衡模式;

    • 黄光模式:适合于黄色灯光或者阳光环境中使用,该模式也属于自动白平衡模式。

    (5)锁定白平衡的校准方法

    • 将摄像头面向一张白纸 10~20cm 处,确保摄像头中心区域完全面向白纸,灯光照向白纸,但尽量不要有阴影遮挡;

    • 调用锁定白平衡指令,或短按功能按键(摄像头左侧 mode 键);

    • 摄像头的 LED 会闪烁一下白色灯光,开始白平衡校准;

    • 几秒钟后,当 LED 闪烁一下青色灯光后,表明白平衡校准完成;

    • 如果 LED 闪烁为紫色灯光,则表明校准失败,可以再次重新校准。

    备注 1:由于校准白平衡需要几秒钟的时间,所以使用软件锁定白平衡时应该位于小 MU 设置最后使用,并设定 2 秒左右的暂停时间等待校准完成。

    备注 2:按键方式可以在小 MU 运行的任何时刻去校准白平衡,而指令模式只适合于开机后的配置阶段使用。

    备注 3:如果校准时使用的不是白纸,即便校准后显示为青色灯光,那么图像也可能是处于偏色状态的,因为该功能会将其他颜色尽量调节为白色。

    (6) 锁定白平衡模式的使用场景

    1. 摄像头视野中存在大面积单色物体:

      当图像中出现大面积红色时,红色 R 通道值明显高于 G、B两个通道,摄像头了为调节白平衡而将 G、B 增益提高,所以其周围的白色区域呈现出了淡青色。类似的,大面积绿色周围会呈现淡紫色,而大面积蓝色周围会呈现淡黄色。经过校准并锁定白平衡后,三种颜色周围的白色被正确的还原,不存在偏色现象。

    2. 摄像头近距离检测颜色:

      摄像头十分靠近单色物体时,自动白平衡为了还原白色,将原本的红绿蓝卡片调节到完全失衡的状态,此时已经失去了原本的颜色信息,校准并锁定白平衡后,其原本颜色可以得到正确的还原。

    ../../../_images/camera_white_balance2.png
  6. 设置摄像头数码变焦

    • 具有数码变焦功能,共有 5 个档位可以使用,利用镜头缩放功能可以看到远处的目标物体。

    • 数码变焦等级越大可检测的距离越远,但视野范围会变窄。

    • 数码变焦等级1(距离近,视野广)~数码变焦等级5(距离远,视野窄)。

    • 针对不同距离的物体通过试验测试合理设置数码变焦等级值可以取得较好的识别效果。

    • 使用等级3-5时,图像帧率会比等级1-2低。

    ../../../_images/MU41.png
  7. 板载LED灯光设置

    • 视觉传感器正面板载有两颗LED灯,左侧是LED1, 右侧是LED2. 每闪烁一次表示执行一帧图像识别。

    • 可通过设置识别到目标与未识别到目标时灯光的颜色来获得反馈。

    • 默认设置:未检测到闪红灯,检测到则闪蓝灯。当进行颜色识别时,默认LED关闭。

    ../../../_images/MU51.png
  8. 恢复模块默认设置

    • 该程序块用来关闭所有算法,重置所有硬件设置。

    • 在调试模式下,建议在程序开始的时候执行该程序块,或者是手动点一下reset按键。因为算法不会在程序结束后自动关闭,长期调试不同算法会导致占用过多的内存。

    ../../../_images/restore_the_default2.png
  9. 判断摄像头是否检测到目标

    检测到所选的目标后,返回True, 否则返回False。

    ../../../_images/MU61.png
  10. 判断摄像头是否检测到颜色

    (1)检测到目标位置的颜色后,返回true, 否则返回False。

    (2)色块检测与颜色识别的区别:

    色块检测:指定一种颜色和该颜色块尺寸的最小值,然后摄像头会在图像中寻找符合该要求的一个色块区域,返回其坐标和大小,解决“是不是”的问题。下图左侧设定为检测蓝色,摄像头会在图像中寻找蓝色色块方位。

    颜色识别:指定一个检测区域,然后摄像头统计该区域中像素的颜色,并返回该颜色的Label值标签以及具体的红 R,绿 G,蓝 B 通道的值,解决“是哪一个”的问题。下图右侧设定识别区域位于图像中心,图中识别结果为绿色,Label5

    ../../../_images/MU7_11.png ../../../_images/MU7_31.png

    (3)颜色Label分类标签的定义:

    ../../../_images/MU7_21.png
    ../../../_images/MU71.png
  11. 判断摄像头是否检测到色块

    检测的目标色块可以在下拉框里选择,摄像头检测到所选目标色块后,返回true, 否则返回False。

    ../../../_images/MU91.png
  12. 获取检测目标的坐标以及大小

    返回值是检测到的目标的坐标。检测目标可以在下拉框选择,获取的值有横向,纵向坐标,以及目标的宽度和高度。

    (1)X-Y 坐标:摄像头输出图像的宽高比例为 4:3。在图像坐标系中,水平与垂直坐标均被量化到了 0~100 的范围内,其含义是该坐标相对于完整图像的百分比位置。例如 X 为30时,即该物体的 X 坐标位于水平方向距离原点 30%的位置上。

    (2)W-H 宽高:当检测到物体后,返回物体的 Width 宽度值和 Height 高度值,其量程同样被量化到了 0~100 的范围内,其 W 宽度的含义是其在整个水平方向所占据的百分比值,H 高度的含义是其在整个垂直方向所占据的百分比值。需要注意的是,由于水平垂直的比例是 4:3,所以对于宽高相同的正方形物体而言,其输出的宽高值是存在一个 3:4 的比例关系的,而并不是相等的关系。

    (3)Label 分类标签:对于具有分类识别功能的算法而言,还会根据所检测到的不同物体输出其对应的分类标签值,该值是内部设定好的一系列数字,每一个数字对应一个特定的物体,以球体算法为例,当 Label 标签为 1 时,代表检测到了一个乒乓球,而如果 Label 标签输出为 2,则说明此刻检测到的是一个网球。Label 分类标签在颜色和卡片的算法中是一个十分关键的信息。

    ../../../_images/MU81.png ../../../_images/MU8_11.png
  13. 获取目标颜色里对应的RGB值

    颜色识别输出结果并不是坐标和宽高,而是颜色的 label 标签以及 R 红,G 绿,B 蓝三个通道的值(范围 0~255)。在使用颜色识别时可以指定识别区域的坐标,其余参数为默认值。

    ../../../_images/MU101.png
  14. 判断是否检测到形状卡片里所选形状

    检测到形状卡片里所选形状卡片后,返回true, 否则返回False。形状有钩,叉,圆形,方形,三角形可以选。

    ../../../_images/MU111.png
  15. 判断是否检测到交通卡片里所选图标

    检测到交通卡片里所选图标后,返回true, 否则返回False。图标有向前,向左,向右,掉头,停车可以选。

    ../../../_images/MU121.png
  16. 判断是否检测到数据卡片里对应数字

    检测到数字卡片里所选数字后,返回true, 否则返回False。数字有0-9可以选择。

    ../../../_images/MU131.png
  17. 判断是否检测到所选颜色

    检测到所选的颜色后,返回true, 否则返回False。颜色有9种可以选择。

    ../../../_images/MU141.png

完整示例

  1. 球体与人体检测:

    球体算法的特殊性:球体算法分为搜索阶段和跟踪阶段,在球体未检测到时处于搜索阶段,此时处理速度相对比较慢,检测距离也会比较近。一旦检测到球体后,会进入跟踪阶段,处理速度会有所提升,检测距离也会变远。当球体丢失后,会再次进入搜索阶段。

    人体算法的有效特征:人体检测实际是检测人体的上半身特征,上半身特征是指由头部(必须包含人脸)和胸部以上(肩膀)构成的特征组合,如果图像中具有符合人体上半身特征,那么会被认为是有人体被检测到。

    初始程序:采用I2C连接,启用人体检测算法,其余设置为默认。

    循环程序:如果视觉传感器检测到人体,会通过I2C向Xtron发送检测到的数据,Xtron会通过屏幕显示位置和类型信息,否则循环显示未检测到人体,球体检测同理。

    实验现象:未检测到人体则视觉传感器闪红灯,屏幕显示”body undetected”。检测到人体则视觉传感器闪蓝灯,屏幕显示返回的坐标等信息。

    ../../../_images/MUlizi11.png
  2. 卡片识别

    我们具有 3 类卡片算法:形状卡片,交通卡片,数字卡片。摄像头只能识别下述特定图案的卡片。在一幅图像中,同一个算法只能返回一个卡片的检测结果,但可以同时运行不同类型的卡片算法。

    初始程序:采用I2C连接,启用交通卡片识别算法,其余设置为默认。

    循环程序:如果视觉传感器检测到交通卡片,会通过I2C向Xtron发送检测到的数据,Xtron会通过屏幕显示位置和类型信息,否则循环显示未识别,其他类型的卡片识别同理。

    实验现象:未检测到卡片则视觉传感器LED闪红灯,屏幕显示”card undetected”。识别到则视觉传感器LED闪蓝灯,屏幕显示返回的坐标信息和交通卡片的具体图案信息。

../../../_images/MUlizi11.png
  1. 颜色识别

    在使用颜色识别算法时,需要指定一个颜色识别区域,算法运行后只返回该区域内的颜色信息。颜色识别区域小,像素少,速度快,但容易因各别像素的偏色而造成可信度的降低;颜色识别区域大,像素多,速度慢,但容易受背景的干扰。颜色识别区域应根据实际需求而合理设置。

    颜色识别输出结果并不是坐标和宽高,而是颜色的 label 标签以及 R 红,G 绿,B 蓝三个通道的值(范围 0~255)。

    初始程序:采用I2C连接,启用颜色识别算法,锁定摄像头白平衡防止偏色,其余设置为默认。

    循环程序:视觉传感器识别坐标(50,50)处的颜色,通过I2C向Xtron发送检测到的数据,Xtron会通过屏幕显示识别到的通道信息和颜色类别。

    实验现象:视觉传感器始终不闪灯,屏幕显示返回的通道值和颜色的类别。

  2. 色块检测

    色块检测在不更改设置的情况下只能检测一种选定的颜色,摄像头会寻找视野中符合该色块的地方,返回结果最好的那一个,

    初始程序:采用I2C连接,启用色块检测算法,锁定摄像头白平衡防止偏色,其余设置为默认。

    循环程序:如果视觉传感器检测到红色块,会通过I2C向Xtron发送检测到的数据,Xtron会通过屏幕识别到的位置和类型信息,否则循环显示未检测到。

    实验现象:未识别到时视觉传感器闪红灯,控制台显示”color block undetected”。识别到红色块则视觉传感器闪蓝灯,屏幕显示获得的红色块坐标大小信息。

    ../../../_images/MUlizi41.png

后续将更新更多案例,敬请期待。。。