65.9K
CodeProject 正在变化。 阅读更多。
Home

Apple-tron:农民的 AI

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.55/5 (10投票s)

2019年1月1日

CPOL

12分钟阅读

viewsIcon

12103

Apple-tron 是一款为中小型农场设计的快速人工智能,用于给水果贴标签。

引言

人工智能非常神奇,学习和利用人工智能创造新解决方案令人兴奋。

在本文中,我们将尝试开发一个低成本、可扩展的人工智能,该人工智能能够根据颜色、高度和直径将苹果分类到不同的红色和绿色苹果类别中,然后根据苹果的实际尺寸分配相应的标签。

此外,由于有些苹果可能不符合质量标准,人工智能还将帮助我们判断并拒绝过大或过小的苹果。

在本例中,我们的自定义标签将包含 #small R、#Mid R、#Big R 或 #small G、#Mid G、#Big Green,如下图 1.0 所示。

本文还将提供有关可以使用哪些传感器来解决自动化测量的关键问题的信息,然后提供人工智能开发的代码。

本文的最终目标是创建一个能够复制人类思维并决定要给待评估的苹果贴什么标签的人工智能。

图 1.0

下表列出了我们要处理的六种不同类别的苹果标签。

红苹果类别 青苹果类别
#小红 #小绿
#中红 #中绿
#大红 #大绿

背景

本文将帮助谁?

本文旨在帮助农民和小型零售商,他们希望利用人工智能开发自动化机制,为产品增值,提高生产力,扩大经营规模,同时在水果分拣和贴标方面产生最低的劳动力成本。

众所周知,如今产品的品牌和标签是一项令人愉悦的要求,因为它是区分有价值产品的重要因素。人们倾向于购买贴有标签的产品而非未贴标签的产品。

此外,小型微型企业或小农户数量众多,但目前尚无如此低成本的解决方案来帮助他们开发自动化的水果贴标和分拣系统,这些系统还可以针对农产品的直径大小和高度进行。

AI 组件将如何提供帮助?

通常,在采摘苹果时,它们的大小各不相同,需要在加工过程中进一步分拣和分类。因此,有了人工智能,分拣和贴标将实现自动化。

  • 节省劳动力成本
  • 节省大量的设备采购成本
  • 提高产品加工速度,从而提高交付速度
  • 提供一个完全可重复使用的 AI,可以对其进行训练以识别和贴标其他水果和蔬菜

本文将提供什么?

它将推荐有关可能使用的传感器信息。

它将提供代码并解释如何构建、测试和使用 AI 组件。

不使用 AI 进行水果分拣和贴标处理

为了规划我们的 AI 构建,我们首先需要确定它需要解决的问题。

如果看上面的插图,手动分拣、测量和为 6 种不同标签类别的每个苹果贴标签将非常耗时、劳累且资源密集。

由于没有一棵树能产出大小均匀的苹果,想象一下,如果你有 30,000 个苹果需要按不同大小和颜色进行处理。

作为农民,你可能还会面临许多其他挑战,例如

  • 试图寻找临时工来应对工作量
  • 由于处理速度慢,水果腐烂变质
  • 由于包装和贴标速度慢而错过供应截止日期,因为你和你的工人不会全天候工作
  • 贴标容易出错
  • 贴标成本增加,因为你雇佣的工人越多,就需要购买越多的手动贴标机

开始使用人工智能

因此,要开始,我首先要做的是将我的思维和决策能力复制到机器上,在我们的例子中,是一台带有 4 GB RAM 的 Windows 10 Intel Core 7 CPU,通过设置开发环境、算法并提供训练数据,使其能够从中学习。

一旦机器完成训练,我们就会为其提供一些测试数据,以查看它能在多大程度上准确地复制我的能力以及其错误率。

最后,如果我们的 AI 模型的错误率较低且准确性相对较高,我们将认为开发完成并开始用于生产。

自动化高度和直径测量的挑战

在深入开发 AI 之前,重要的是要认识到 AI 将如何确定苹果的颜色并测量苹果的直径。

教程通常会提供如何制作 AI 的信息,但对于如何以自动化方式廉价收集数据却毫无头绪,而这却是最重要的一部分。

下面,我们解释了可以用来收集数据的传感器。

因为如果我们无法切实地收集数据供 AI 处理,那么 AI 开发的意义就丧失了,因为过度花费预算来利用 AI 是没有意义的。

前方有一个主要问题——我们如何使用传感器测量苹果的直径和高度?

是否有廉价、经济高效且易于使用且易于更换的传感器?

目前,关于如何轻松测量物体直径而无需进行中间数学计算和广泛校准的视觉信息非常匮乏,因此,对于我们的场景,我们开发了一个独特的解决方案,使用 3 个超声波传感器(HC-sr04)来近似测量苹果的直径。

其概念如下图 1.1 所示。

注意:超声波传感器图像来自 fritzing

测量苹果的直径

为了测量苹果的直径,我们将左侧超声波传感器和右侧超声波传感器垂直放置,相距 30 厘米,并将其表示为总距离。

然后通过传送带将苹果放在我们传感器的中心。

接下来,我们依次触发每个超声波传感器以获取两侧的读数。

当我们触发左传感器时,读数为 11.8 厘米;当在此示例中触发右传感器时,读数也是 11.8 厘米。

最后,我们从两个传感器之间的总距离中减去左侧传感器的读数和右侧传感器的读数。

上述操作的结果就是我们苹果的近似直径。

上述可以用以下公式表示

Approximated Diameter= Total Distance-(Left Sensor reading + Right Sensor reading)

6.4 厘米 = 30 厘米 - (11.8 厘米 + 11.8 厘米)

测量苹果的高度

同样,为了测量苹果的直径

我们将超声波传感器放置在距离地面 15 厘米处,并表示为地面高度,然后依次触发超声波传感器。

接下来,我们取顶部传感器读数,并从中减去我们的地面高度。

这可以用以下公式表示

Apple Height = Ground Height - Top sensor reading

6.8 厘米 = 15 厘米 - 8.2 厘米

上述操作的结果就是我们苹果的近似高度。

当然,您也可以使用激光测距传感器代替超声波传感器。我之所以选择超声波传感器,是因为它便宜、易于更换,并且在我所在地区随处可见。

目前的设置可以完美地适应其他水果或其他具有更大高度和直径的物品,而无需复杂的计算。

上述稳健的概念设置非常便宜,可以让您快速轻松地调整传感器以适应其他需要测量的物品,例如南瓜、芋头、土豆、菠萝、哈密瓜、百香果,无论高度和直径在定价或作为质量决定因素中扮演重要角色。

注意:剪贴画在 CC0 许可下,无需注明出处。

检测苹果的颜色

我们计划使用的下一个廉价且经济高效的传感器是 TCS3200 颜色传感器,用于测量我们关心的物品的颜色。

我们测量 R=红色值和 G=绿色值,以确定苹果颜色的差异。

由于我们的场景是为处理一个生产线上两种品种(红色和绿色)的苹果生产线开发的,因此颜色检测仅限于红色或绿色值。

在我们的概念中,一旦所有传感器收集了相关的颜色、直径和高度等数据,我们就会将其发送到我们的 AI 模型进行评估。

因此,在有效确定并解决了如何使用传感器为评估自动化感官输入的问题后,我们现在可以继续创建本文重点关注的 AI。

开发 AI

人工智能是我们尝试将人类般的思维复制到机器上。

因此,为了做到这一点,首先我们必须根据我们当前的行为和工作方式来获取和创建训练数据。

在我们的例子中,因为我们目前会分拣、测量、检测颜色,然后给苹果贴上合适的标签。

为了训练我们的 AI 像我们一样思考,我们将记录 600 个手动贴标过程的观察记录,涵盖各种类别,并记录我们用于决策的 3 个主要参数,例如直径、高度和颜色,存储在一个 CSV 文件中,并附带我们的分类。

下面是我们 CSV 文件的一个小片段

直径_厘米 高度_厘米 Color 分类
6.42 6.8 R #大红
5.46 6.0 R #中红
4.69 5.5 G #中绿

如果您查看“颜色”和“分类”列,您会注意到它们是非数字的,并且是 `varchar`。

所以为了进一步进行,将文本转换为数字形式总是好的。

对于我们的情况,我们将红色分配数值 1,将绿色分配数值 2,以表示“颜色”列下的每种颜色。

因为我们将根据 7 个不同的类别对苹果进行分类

红苹果类别 青苹果类别
#小红 = 1 #小绿 = 2
#中红 = 3 #中绿 = 4
#大红 = 5 #大绿 = 6

已拒绝 = 7

因此,在将分类数据表示为数字形式后,我们的最终 CSV 如下所示

直径_厘米 高度_厘米 Color 分类
6.42 6.8 1 5
5.46 6.0 1 3
4.69 5.5 2 4

接下来,我们将再进行 600 次观察并保留用于测试。请注意,在测试时,我们只使用 3 个输入:苹果的直径、高度和颜色。

下面是我们 CSV 文件的一个小片段

直径_厘米 高度_厘米 Color
6.42 6.8 1
5.46 6.0 1
4.69 5.5 2

当我们开始测试 AI 时,有时,AI 最初会给出错误答案并错误地分类苹果。我们将不断训练 AI,直到它学会正确分类。

AI 错误分类我们苹果类别的次数称为错误率,但随着我们不断训练 AI,它的表现会越来越好,开始准确预测。

编码 AI

必备组件

Install Anaconda development environment
Install Python 3.5.2
Install scikit learn
Install pandas 

导入我们的依赖项

import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split

接下来,加载我们名为 apples.csv 的观察数据。

df=pd.read_csv('apples.csv')

如果您想查看带有文件头的内​​容,可以使用

print (df.head())

接下来,指定要从 CSV 文件中选择哪些列,即输入特征。

在我们的例子中,我们将使用苹果的 3 个输入特征,例如它的直径高度颜色

 input_features=df.loc[:,'Diameter_cm':'Height_cm':'Color']

接下来,我们选择一个包含目标结论的列,该结论是我们参照输入特征后得出的。这意味着我们查看了苹果的直径高度颜色,然后将其分类为以下类别之一:#small R、#Mid R、#Big R 或 #small G、#Mid G 或 #Big Green,以及已拒绝。

 targetted_output=df.loc[:,'claffification']

接下来,我们将 apples.csv 文件中的行拆分为训练数据和测试数据。

在我们的例子中,我们取 0.3 的值,即 30% 用于测试,70% 用于训练我们的 AI。

 train_x_data,test_x_data,train_Y_data,test_Y_data = 
 train_test_split(input_features, targetted_output, test_size = 0.3, random_state = 100)

接下来,初始化决策树分类器,其中 `max_leaf_nodes` 是得出结论所需的叶子数量。在本例中,我们选择 8。您可以更改此值以提高准确性。

apples_tree=DecisionTreeClassifier(max_leaf_nodes=8,random_state=0)

通过以下一行简单的代码,我们使用 Gini 方法训练我们的 AI。

clf=apples_tree.fit(train_x_data,train_Y_data) 

最后,我们取 30% 的测试数据,实际测试我们 AI 的准确性水平。

Test_predications =apples_tree.predict(test_x_data)

print ("Accuracy is", accuracy_score(test_Y_data,Test_predications)*100) 

测试完成后,准确性将显示如下。在我们的例子中,准确率约为 93.47%,仍有改进空间。

但对我们来说已经足够了。测试完成后,让我们继续对单个苹果进行有意义的使用。

因此,在我们的场景中,我们想要贴标签或因尺寸不符而拒绝苹果。我们通过将单个数组输入到 `predict()` 函数来完成此操作,输入直径高度颜色

 apple_prediction=apples_tree.predict([[6.4,6.5,1]])

预测结果是“大红苹果”,因此应贴上 #Big R 标签,这是正确的。

因此,使用非常简单的 `if then else` 逻辑,我们打印出 AI 的预测,显示应贴哪个标签。

当然,在生产中,我们会删除 `print` 语句,并调用子例程来驱动硬件,将实际标签贴在苹果上。

if apple_prediction==1:
  print("#SmallR")
if apple_prediction==2:
  print("#Small G")
if apple_prediction==3:
  print("#Mid R")
if apple_prediction==4:
  print("#Mid G")
if apple_prediction==5:
  print("#Big R")
if apple_prediction==6:
  print("#Big Green")
if apple_prediction==7:
  print("Rejected")

关注点

非常感谢阅读我的文章。如果您喜欢,请留下评分。

我学到的是,构建一个有意义的产品需要不止一个组件,而且直到现在,对于根据水果直径大小应用贴标签,仍然没有如此廉价的解决方案。

历史

  • 2018 年 12 月 31 日:添加了图片和注释
© . All rights reserved.