0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

通过机器学习检测叶子颜色并对其健康状态作出判断

电子森林 来源:Aduino Project Hub 作者:Arduino “having11” 2021-04-01 10:10 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前提

就像人类一样,植物也可能染病,比如植物的叶子可能会因真菌或其他病原体而发黄或出现斑点。因此,通过机器学习的力量,可以扫描颜色,然后将其用于训练一个模型,该模型可以检测叶子的颜色并对其健康状态作出判断。

硬件

这个项目主要用Arduino Nano 33 BLE Sense,它之所以被选中主要是它具有一组功能强大的传感器,包括9DoF IMU,APDS-9960(颜色,手势,接近度和亮度),麦克风以及温度/湿度/压力传感器组合。为了使电路板围绕植物的叶子移动并进行测量,将一对步进电机与一对DRV8825驱动器板配合使用。

设置TinyML

对于此项目,列出的针对Arduino Nano 33 BLE Sense on Edge Impulse的内置传感器将不起作用,这意味着将我们必须使用data forwarder而不是serial daemon。

首先,创建一个新项目并将其命名。接下来需要通过Node.js以及NPM来安装EdgeImpulse CLI。然后运行:

npm install -g edge-impulse-cli

如果找不到安装路径,则可能需要将其安装路径添加到PATH环境变量中。接下来,运行

edge-impulse-data-forwarder

并确保其有效,然后按Ctrl + C退出。

d97068ba-9245-11eb-8b86-12bb97331649.jpg

颜色识别

APDS-9960的工作原理是:通过物体表面所反射的光线波长来读取颜色。为了与传感器通信,最好安装Arduino APDS9960库,该库可以访问一些有用的功能。

在代码中,首先初始化APDS-9960,然后程序进入循环功能,等待直到有颜色数据出现。如果有读数,则使用

APDS.readColor()

以及与表面的接近程度来读取颜色。每个RGB分量都从0-2 ^ 16-1数转换为其值与总和的比率。

扫描仪

扫描叶子的颜色是通过在两个轴上移动装备以使叶子在车载APDS-9960下方经过的各个位置进行的。通过沿顺时针或逆时针方向旋转丝杠来移动每个轴,以使程序段沿任一方向平移。整个系统是在Fusion 360中设计的,下面是这些设计的一些渲染图:

X轴位于Y轴的顶部,从而使顶部程序段在两个轴上移动。Y轴上有一个附加的V轮,以支撑步进电机的重量。零件是使用PLA打印的,填充量约为45%。

收集数据

当系统首次启动时,步进电机是不知道它的初始位置的,因此我们必须进行原点复位,(可通过限位开关实现)。接下来初始化APDS-9960。有一个定义为两个元素的数组的边界框,它们包含一个框的相对角。在这两个位置之间选择一个随机点,然后将步进器运行到该位置,同时读取它们之间的颜色。

处理和发送颜色信息

如前所述,使用

APDS.readColor()

来读取颜色。计算总和后,将计算百分比,然后通过调用

Serial.printf()

的方法通过USB发送百分比。值用逗号分隔,每个读数用换行符分隔。数据转发器程序接收到数据后,会将其作为带有给定标签(健康或不健康)的训练数据发送到Edge Impulse云端。

训练模型

收集完所有训练数据后,就该建立一个可以区分健康叶子和不健康叶子的模型了。我使用了由三轴时间序列,频谱分析模块和Keras模块组成的脉冲。查看以下屏幕截图可以了解我如何从数据中生成这些功能:

测验

为了测试新模型,这次我收集了一些新的测试数据,这是不健康的。该模型的准确性约为63%,并且在通过一些测试功能后,能够在大多数时间正确地对叶子进行分类。

可以通过添加更多训练数据并减慢训练速度来提高此准确性。

代码

#include 《Arduino_APDS9960.h》#include 《AccelStepper.h》#include 《MultiStepper.h》#include “pinDefs.h” int r, g, b, c, p;

float sum;

AccelStepper xStepper(AccelStepper::DRIVER, STEPPER_1_STEP, STEPPER_1_DIR);

AccelStepper yStepper(AccelStepper::DRIVER, STEPPER_2_STEP, STEPPER_2_DIR);

MultiStepper steppers;// a random location will be chosen within the bounding box

const long boundingBox[2][2] = { {0,0}, {40,40}};

void setup(){ Serial.begin(115200); while(!Serial);

if(!APDS.begin()) { Serial.println(“Could not init APDS9960”); while(1); }

pinMode(X_AXIS_HOMING_SW, INPUT_PULLUP); pinMode(Y_AXIS_HOMING_SW, INPUT_PULLUP); //Serial.println(digitalRead(X_AXIS_HOMING_SW) + digitalRead(Y_AXIS_HOMING_SW)); xStepper.setPinsInverted(X_AXIS_DIR); yStepper.setPinsInverted(Y_AXIS_DIR); xStepper.setMaxSpeed(150); yStepper.setMaxSpeed(150); steppers.addStepper(xStepper); steppers.addStepper(yStepper); homeMotors();}

void loop(){ long randomPos[2]; randomPos[0] = random(boundingBox[0][0], boundingBox[1][0]) * STEPS_PER_MM; randomPos[1] = random(boundingBox[0][1], boundingBox[1][1]) * STEPS_PER_MM; steppers.moveTo(randomPos);

while(steppers.run()) { if(!APDS.colorAvailable() || !APDS.proximityAvailable()){} else { APDS.readColor(r, g, b, c); sum = r + g + b; p = APDS.readProximity();

if(!p && c 》 10 && sum 》= 0) { float rr = r / sum, gr = g / sum, br = b / sum; Serial.printf(“%1.3f,%1.3f,%1.3f

”, rr, gr, br); } } }}

void homeMotors(){ // home x //Serial.println(“Now homing x”); while(digitalRead(X_AXIS_HOMING_SW))

xStepper.move(-1);

// home y //Serial.println(“Now homing y”); while(digitalRead(Y_AXIS_HOMING_SW)) yStepper.move(-1); xStepper.setCurrentPosition(0); yStepper.setCurrentPosition(0);}

原理图

dae9a12a-9245-11eb-8b86-12bb97331649.png

原文标题:Arduino使用TinyML扫描植物的叶子确定植物的健康

文章出处:【微信公众号:FPGA入门到精通】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2573

    文章

    54368

    浏览量

    786015
  • 驱动器
    +关注

    关注

    54

    文章

    9012

    浏览量

    153339
  • 机器学习
    +关注

    关注

    66

    文章

    8541

    浏览量

    136232

原文标题:Arduino使用TinyML扫描植物的叶子确定植物的健康

文章出处:【微信号:xiaojiaoyafpga,微信公众号:电子森林】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何深度学习机器视觉的应用场景

    深度学习视觉应用场景大全 工业制造领域 复杂缺陷检测:处理传统算法难以描述的非标准化缺陷模式 非标产品分类:对形状、颜色、纹理多变的产品进行智能分类 外观质量评估:基于学习的外观质量标
    的头像 发表于 11-27 10:19 49次阅读

    设备的状态监测可以通过哪些方式实现?

    设备状态监测的核心是 通过 “硬件传感 + 软件自检 + 通信反馈 + 远程联动”,实现对设备 “健康状态、运行状态、安全
    的头像 发表于 11-07 09:44 496次阅读

    基于FPGA的肤色检测方案简介

    ,绝大多数人的肤色分量位于这个区间中。基于此,可以通过判断图像中像素点的Cb和Cr分量,从而判断是否存在人脸以及人脸位置。当然,这种检测方法十分容易出现误差,只要
    发表于 10-28 07:07

    如何判断谐波检测设备的环境干扰强度?

    判断谐波检测设备的环境干扰强度,需结合 “定性场景识别 + 定量工具测量 + 设备状态反馈”,从 “是否有干扰源、干扰强度数值、干扰对设备的影响” 三个维度综合判断,核心是区分 “弱干
    的头像 发表于 10-13 17:26 514次阅读

    “芯”助力健康监测:新洁能NCE6050A如何点亮血压检测仪的精准信号

    在当今数字化医疗蓬勃发展的时代,精准的健康监测设备成为守护人们健康的坚实防线。而血压检测仪作为其中的关键一环,精准度直接关系到人们对自身健康
    的头像 发表于 10-10 16:56 513次阅读
    “芯”助力<b class='flag-5'>健康</b>监测:新洁能NCE6050A如何点亮血压<b class='flag-5'>检测</b>仪的精准信号

    机器视觉检测PIN针

    物理损伤)必须进行极其精密的测量与核查。以往依赖人眼的检测方式存在明显短板:不仅作业速度慢、受人员状态影响大(易疲劳导致误判),而且在面对日益严苛的微米级精度标准时显得力不从心。相比之下,基于机器视觉
    发表于 09-26 15:09

    如何通过日常数据判断电源纹波是否超标?

    可观测的异常表现。结合日常可获取的数据(如设备运行状态、简单监测值、故障日志),可通过以下 4 个维度间接判断,覆盖工业、消费电子等常见场景: 一、通过 “设备运行
    的头像 发表于 09-23 11:06 526次阅读
    如何<b class='flag-5'>通过</b>日常数据<b class='flag-5'>判断</b>电源纹波是否超标?

    如何在机器视觉中部署深度学习神经网络

    图 1:基于深度学习的目标检测可定位已训练的目标类别,通过矩形框(边界框)对进行标识。 在讨论人工智能(AI)或深度
    的头像 发表于 09-10 17:38 692次阅读
    如何在<b class='flag-5'>机器</b>视觉中部署深度<b class='flag-5'>学习</b>神经网络

    如何根据设备健康状态数据进行分析决策?

    要根据设备健康状态数据做好分析决策,需先明确数据核心价值,再通过 “数据预处理→多维度分析→风险评估→决策落地” 的闭环流程推进,既依托技术工具挖掘数据规律,又结合生产实际确保决策可行。
    的头像 发表于 08-20 10:07 444次阅读
    如何根据设备<b class='flag-5'>健康</b><b class='flag-5'>状态</b>数据进行分析决策?

    机器学习异常检测实战:用Isolation Forest快速构建无标签异常检测系统

    本文转自:DeepHubIMBA无监督异常检测作为机器学习领域的重要分支,专门用于在缺乏标记数据的环境中识别异常事件。本文深入探讨异常检测技术的理论基础与实践应用,
    的头像 发表于 06-24 11:40 1197次阅读
    <b class='flag-5'>机器</b><b class='flag-5'>学习</b>异常<b class='flag-5'>检测</b>实战:用Isolation Forest快速构建无标签异常<b class='flag-5'>检测</b>系统

    精准监测,健康无忧--XC3576H工控主板赋能亚健康检测

    健康风险。核心功能包括:1.生理指标监测:通过生物电、光学传感器等技术,检测心率、血氧、血压、血糖趋势等关键指标,无需抽血即可获取身体数据。2.疲劳度
    的头像 发表于 05-28 17:56 453次阅读
    精准监测,<b class='flag-5'>健康</b>无忧--XC3576H工控主板赋能亚<b class='flag-5'>健康</b><b class='flag-5'>检测</b>仪

    【「# ROS 2智能机器人开发实践」阅读体验】视觉实现的基础算法的应用

    : 一、机器人视觉:从理论到实践 第7章详细介绍了ROS2在机器视觉领域的应用,涵盖了相机标定、OpenCV集成、视觉巡线、二维码识别以及深度学习目标检测等内容。
    发表于 05-03 19:41

    如何检测电机的好坏?

    检测电机的好坏可以通过多种方法综合判断,以下是一些常用的检测方法:   一、外观检查 首先,通过观察电机的外观,可以初步
    的头像 发表于 04-23 17:23 5085次阅读

    断路器的检测方法

    断路器的检测方法多种多样,以下是一些常见的检测方法: 一、直观检查 直观检查是断路器检测的基础步骤,主要通过观察断路器的外观来判断
    发表于 12-27 10:29

    如何用SS1系列颜色传感器示教多通道颜色

    同时检测多种颜色呢?本期深视课堂通过实际操作演示的方式帮助大家更直观了解深视智能SS1系列颜色传感器的多通道颜色设置小技巧。01物料准备Te
    的头像 发表于 12-23 08:17 1063次阅读
    如何用SS1系列<b class='flag-5'>颜色</b>传感器示教多通道<b class='flag-5'>颜色</b>?