教程|别人都造AI鼻子了,快来打造你的第二嗅觉
大家都知道,柴火创客空间一直都是个藏龙卧虎的地方,这不前段时间,我们的海外社区伙伴Benjamin Cabé的“第二嗅觉:搭建一个联网的人工智能鼻子”项目就登上了无线电杂志第10期的封面👏👏
《无线电杂志》
作|者|介|绍
[法国]Benjamin Cabé
Benjamin Cabé是微软的一位软件工程师和物联网万事通,他目前生活在法国图卢兹。项目作者更多动态更新,可关注其Twitter@kartben。
Make:杂志第77期期刊
此前这个项目也曾被国际知名创客杂志Make:收录并登上其封面,今天柴火菌就跟大家分享这个精彩的项目。
项目所涉及的代码及制造文件,欢迎点击下方教程原文链接或点击文末“阅读原文”获取:
https://makezine.com/projects/second-sense-build-an-ai-smart-nose/
2020年5月的某天,因为新冠肺炎疫情爆发,我跟其他很多人一样被困在家。呆在家里的时间多了之后,我便开始着手完善我的面包食谱。就在几天前,我在Seeed官方商城买了一个气体传感器(下图1),我觉得它非常适合用来监控我的面包发酵程度,还可以帮助我在面团发酵到合适的时候进行烘烤。
图1 气体传感器
接着,我又想到,这或许是我开始学习当下最流行的机器学习的完美借口了。但是……如果要获取足够多的数据来建立一个训练模型,让AI能深刻了解面团发酵程度与完美面包之间的关系,我或许得烤出几十个法式长棍面包才能获取这些数据量。真的要这么大费周章吗?更何况,疫情之下,面粉还相当稀缺呢!”
图2 人工智能鼻子识别面包
就这样,在接下来的几天里,我最终还是搭建了一个DIY通用的人造鼻子(如图2)——它几乎可以闻出你教它识别的任何气味,并在屏幕上显示气味的浓度!人造鼻子由人工智能AI驱动,我使用了免费在线工具Edge Impulse 训练了一个嵌入式机器学习Tiny ML神经网络,然后再将其上传到兼容Arduino的微控制器——Wio Terminal上。
在做这个项目的过程中,除了机器学习,我还学到了很多东西。比如,我设计了生平第一个3D外壳,还学习了基础的流体动力学(其实,用一个鼻子里的气流来研究流体动力学,并非最佳途径)。这个项目是我从零开始搭建的第一个实体项目,所以我很开心能跟整个大家分享这个项目。以下是这个项目的详细制作步骤,非常期待能和你一起动手做一个人工智能鼻子。
项目材料
带有LCD屏幕的Wio Terminal微型控制器(Seeed Studio官方商城购买 )
Grove多通道气体传感器(Seeed Studio官方商城购买, 这个传感器可以测量二氧化氮 (NO2)、一氧化碳 (CO)、乙醇 (C2H5OH) 和挥发性有机化合物 (VOC)
3D打印鼻子外壳,你可以在Thingvers官网上搜索4493907,免费下载模型文件
Grove MOSFET模块(Seeed Studio官方商城购买 )
4 针 Grove 接口到公头跳线 (Seeed Studio官方商城购买)
散热扇, 5V DC, 25×25×10mm (NMB科技)
风扇护指,25×25mm (Sunon FG-2)
USB-C 直角连接线(非必选)
Wio Terminal电池套(非必选,Seeed Studio官方商城购买)
M2 和 M3 螺丝、螺母和垫圈
面包板跳线,10cm,2根
工具
3D打印机
联网的计算机
搭建
01
准备好所有的材料
你可以从Thingiverse下载鼻子外壳的3D打印文件(见图3)。或者,带上一台Miniaturizer3000扫描仪飞往复活节岛,自己扫描一个1:100比例的摩艾石像鼻子文件!
图3 鼻子外壳的3D打印文件
不过鼻子外壳的外观不是最重要的,最重要的还是所需的所有电子元器件要准备好(见图4)。它们都采用了统一的grove接口,很容易通过即插即用的接线来连接,根本不涉及焊接。
图4 所需的电子元器件
02
连接所有电子元器件
这个鼻子的大脑就是一个Wio Terminal,Wio Terminal是一个与Arduino兼容的微型控制器平台,它具有足够的处理能力,来实时分析气味。而且它自带一个LCD屏幕,所以我们可以拥有一个漂亮的用户界面。设如何设置用户界面,可前往Seeed Studio 官网了解更多库文件信息。
Wio Terminal的侧面也留出了多个Grove接口,非常方便。而且其背面也带有一个与Raspberry Pi 兼容的扩展槽,可以连接各种传感器和执行器,所有接线都巧妙地被隐藏在其外壳内,因此整个外观接线也会非常简洁整齐。
图5 电路连接示意图
将气体传感器连接到I²C接口,MOSFET模块(这个模块主要用于打开或关闭风扇,使鼻子可以“吸气”)连接到数字输出D0接口。按照接线图(见图5)连接所有电子元器件。
03
组装整个鼻子
使用带有垫圈和螺母的短M2螺丝将Wio Terminal和直流风扇固定在鼻子外壳的背面(见图6)。风扇应该有一个箭头指示其旋转或气流的方向,但你可能需要先给它接上5V电源供电,检查它的旋转方向,确保它是让鼻子吸气,而不是呼气!
图6 固定风扇和Wio Terminal
将多通道气体传感器滑入鼻子外壳预留的专用插槽,让传感器正对鼻孔(见图7)。
04
让鼻子的“大脑”聪明起来
了解这个人工智能鼻子到底有什么功能,最快方法是用我已经训练过的基本模型。借用这个模型,这个鼻子就可以检测一些基础气味,例如它可以识别出咖啡的气味。
前往这个网站(github.com/kartben/artificial-nose/releases)下载这个固件(firmware.uf2)。用USB将Wio Terminal连接到电脑,然后快速连续按下Wio Terminal的电源开关两次,进入bootloader模式。此时,该Wio Terminal将在电脑上显示为外部驱动,你可以将刚刚下载的固件复制到它上面。
如果你想自己编译固件,或者你想自己部署一个全新的AI模型,那么你可以进行新模型训练(识别其他味道),然后在PlatformIO进行编译并上传更新的代码即可。
05
开始气味识别
成功复制固件后,Wio Terminal将在训练模式下自动重启,并在其lcd屏幕上以图表形式,实时显示人工鼻检测到的各种气体。
按下Wio Terminal屏幕右下方的蓝色5向操纵杆按钮进入气味侦测模式。屏幕将会显示鼻子检测并识别到的最有可能的某种气味。用这个基本模型,可以识别出咖啡、茶、威士忌和朗姆酒的味道。
用户界面操作
操纵杆(5 向开关)—按下时,可选择进入“气味侦测模式”(鼻子将显示其当前识别出的气味)或“训练模式”(显示原始的传感器数据)。向左或向右拨动操纵杆,则可浏览应用程序的各个屏幕。
左上角按钮 - 又名按钮1或 A键。按下可打开和关闭风扇。
气体传感器
气体传感器如何发挥作用?
市面上常见的气体传感器很多,但最常用的技术是使用MOS(金属氧化物半导体)来检测气体。当其被加热时,它会与空气中的气体发生反应,导致其电阻发生变化,最终识别具体的气体。
在这个项目里面,有关化学知识的部分你完全不用太关心,因为一个好的分压器,就可以轻松测量出电阻值(也就是气体浓度)。而且,我用的这个气体传感器甚至还有一个微控制器,可以帮忙读取电阻值,然后通过I²C接口以数字形式显示相应的读数。
由于气体传感器涉及将金属氧化物传感层加热到一定温度,因此它们通常需要相当大的功率才能正常运转。例如,此项目中所用到的4个传感器,每个仅用于内部加热就会消耗20mA电流!如果你需要用电池给整个项目供电,需要记住这一点。
此外,气体传感器正常运转也需要一段时间:根据产品说明书,在气体传感器开始预热24小时后,其读数会比较准确。因此,如果你只在需要读数时,将其打开几秒钟,获得的数据的准确程度可能相当糟糕。
更多气味
说到这里,你可能也发现了,受限于传感器的功能和检测准确性,这个鼻子目前所能识别的气味是有限的。根据我的实践,它已经可以很好地区分几种气味了。但如果你想要让这个鼻子可以识别数十种非常相似的气味,或者检测我所用这个气体传感器无法明显检测的气味,那么你可能需要加入更多传感器。
你可以去一些电子产品供应商的官网,查看相应的产品目录,并根据你想要的项目应用场景,考虑如何使用新的传感器替换原来的传感器。如果你想让鼻子检测并识别甲烷、臭氧、氨、烟味等气味,市场上很可能已经有相应的传感器可以做到。
未来改进
当初在设计这个鼻子外壳时,我其实很希望我可以用不同的方式来处理。回想起来,我当时用Blender而不是CAD软件来做,可能是一个坏主意。鼻子看起来很漂亮,Blender也可以做令人惊叹的3D渲染,但一旦涉及到3D调整模型,Blender的操作非常复杂。
另一个我想改善的,是希望鼻腔和鼻孔能将气流直接集中到气体传感器上,这样检测效果可能会做得更好。现在的问题可能是因为风扇吹得太猛了,没有给气体传感器留出足够的时间,让其与空气中的分子发生反应。无论是哪种原因,都可以再尝试检测,或者不用鼻子外壳来做测试。
我的下一步计划是:把Wio Terminal的内置Wi-Fi用起来,让这个人工智能鼻子连接一个无线设备。这样一来,它就可以在偏远或难以接近的使用场景下,发挥更大的作用。例如,在办公楼洗手间的吊顶中部署这样一个鼻子,便可以帮助物业团队检测并决定何时需要清扫。
或许在你看到这篇项目教程时,我的GitHub账号很可能已经上传了相关的代码和教程更新,可以将检测到的气味直接实时上传到物联网平台。我还计划实现远程自动更新鼻子的神经网络,而无需任何人工干预。
另外,要是所有的创客都可以整理一个开源的气味指纹目录,并且共享出来,那么任何人都可以从中受益,识别出不同气味,来满足不同的应用场景。
学会新技巧
这部分内容将会告诉你,如何让你的人工智能鼻子学会一些新的技巧。
01
如何使用Edge Impulse平台训练
你可能觉得,现在这样一个可以识别咖啡和茶的人工智能鼻子好像不怎么实用。但如果这个鼻子可以在识别出食物烧焦燃烧甚至发出警报,或者在你最喜欢的水果完全成熟时给出提醒,这样的人工智能鼻子,还是很有用吧。
这里我们需要用到嵌入式机器学习,比如在Edge Impulse上训练AI模型,这是一个可以把部署变得极其简单且可以在微型控制器上运行的平台。
接下来,我就跟大家分享,如何使用Edge Impulse 平台来给我们的鼻子训练新的模型,这样,鼻子就可以识别其他你想让它识别的气味了。
(1) 前往studio.edgeimpulse官网搜索“artificial_nose”,复制一个基础的Edge Impulse 项目到你的个人账户(如图8)。这样以来,你就可以使用你采集的气味类别来扩充深职替换原始数据库。
(2) 通过USB将鼻子连接到电脑,并确保它处于训练模式(如图9)。
(3)在电脑上安装EdgeImpulse 命令行工具并使用以下命令启动数据转发器。
edge-impulse-data-forwarder--frequency 10
(4)按照控制台中的数据转发器说明,登录你的Edge Impulse帐户。数据转发器会将鼻子的串行输出远程连接到你在第一步中创建的Edge Impulse 项目中,并且传感器的数据也会直接出现在这个项目中!
(5)给4个传感器轴依次命名为 二氧化氮、一氧化碳、乙醇和挥发性有机化合物,如图10所示。
(6)现在,你的设备应该出现在Edge Impulse项目中的数据采集环节。获取并标记尽可能多的数据样本,这样你就可以让这个鼻子来检测和识别更多不同的气味了。不过你要确保为每种气味采集至少2-3min的传感器数据,并为每种气味获取大致相同数量的样本。这样你的AI模型可以更简单、正确地训练出来。
(7) 基于你采集到的数据样本,重新训练模型,并将这一操作命名为:重新训练模型。如果你对训练的模型性能不满意(图11),可以重新再收集更多样本。重复多次,直到你满意为止!
图11 训练出的模型
(8) 最后,使用“模型部署”菜单将你的项目导出为Arduino库。这样,你就可以将你刚刚训练好的神经网络模型,以ZIP文件下载。然后用新ZIP文件替换掉鼻子原先的固件中的lib/ei-artificial_nose-arduino源文件夹。
(9)用 pio run 重新编译固件并将其上传到Wio Terminal。现在,你的鼻子就已经被重新训练,并习得新技能了。
02
把人工鼻子变成一个物联网设备
TinyML最有趣的一点是,它支持在微型控制器上以超低功耗来执行机器学习的模型推理(例如识别气味),特别适合很多供电受限的应用场景。而且它的功能也非常强大,可以在微型控制器上实现数据的采集和处理,不需要依赖任何中心化的云端AI服务。但另一方面,这也意味着这个设备自成一个节点,它可能没有那么智能。
物联网解决方案的核心通常就是“联网的边缘设备”,将这些边缘端设备设计得尽可能智能是很有意义的。因为依赖任何形式的网络通信或基于云的高度中心化的数据处理,在很多场景之下是不切实际的,有时甚至是完全不可能的。所以,我决定要把我这个人工智能鼻子连接到微软Azure IoT中心云平台,在这一场景下,这个人工智能鼻子就是一个IoT Plug and Play设备。
在我觉得人工鼻子的嗅觉已经足够灵敏时,而且我也完成了图形化用户界面的开发,我就开始使用了Azure IoT SDK,让鼻子能接入Azure IoT云平台(见图12)。
图12 连接到AZure loT 云平台
这就意味着你可以非常轻松地借助Wio Terminal自带的Wi-Fi模块,将人工智能鼻子连接到Azure IoT中心云平台,在远程、近乎实时地访问气体传感器数据,查看鼻子所闻到的气味等。更重要的是,当检测到难闻的气味时,你还可以设置自动触发某一操作规则(例如打开抽风系统等),从而使鼻子比其他的物联网离线设备更智能。将人工智能鼻子接入微软Azure IoT中心云平台后,就能实时查看鼻子所闻到的气味数据了。
那么应该如何把这个鼻子接入到微软Azure IoT中心云平台呢?操作步骤如下:
首先,请确保Wio Terminal上运行的是最新的WiFi固件(可参考这个网址来更新固件:https://wiki.seeedstudio.com/Wio-Terminal-Network-Overview/)。
接着,在Azure IoT Central创建一个新的应用程序(如果你之前已经有创建过,也可以直接使用!)。
在IoT Central 应用程序的Administration管理部分,查找设备连接(Device Connection)菜单。然后打开SAS-IoT-Devices注册组并记下连接AI鼻子所需的以下凭据:ID Scope和SAS Primary Key。
将最新的人工智能鼻子模型固件(或部署你自己的训练的模型)烧录到Wio Terminal,在Wio Terminal 通电时,按住其顶部的三个按钮(A、B、C),然后滑动重置按钮。此时,Wio Terminal应该显示黑屏。
通过串口把人工智能鼻子连接到Wio Terminal,并通过键入help来检查它是否正在运行配置提示,它应该会显示可支持的命令列表。输入以下命令来配置WiFi连接和AzureIoT凭据
set_wifissid <your_wifi_ssid>
set_wifipwd <your_wifi_password>
set_az_iotc <id_scope> <sas_primary_key> <device_id>
id_scope和sas_primary_key如前所述device_id是你希望在AzureIoT Central 中为你的设备提供的ID
最后,重置Wio Terminal。你现在就可以在IoT Central 应用程序的“设备”部分看到一个新设备弹出了,接入完成!
正如我前面提到的,人工智能鼻子接入物联网平台,可以完全满足以下一些实际应用场景的诉求,例如,当鼻子闻到难闻的气味时,它可以自动触发警报或其他指令。但每个场景对于难闻的气味的定义是不同的。这里我拿一家负责芝加哥市周围建筑物的房地产清洁公司作为案例进行说明,这家公司的信息系统已经实现了跟踪所有清洁人员和建筑清洁计划的功能,但是以一种非常静态的追踪方式:例如清洁人员每天都会固定去指定位置保洁一次。但其实很多时候,这个指定位置并不需要清洁。在这种情况下,如果能让清洁人员真的去到真正需要打扫的地方,这对于该公司的人员运营成本和效率,都会大有裨益。
嗅觉缺失是指嗅觉能力暂时或永久性丧失。在美国,40 岁以上的成年人中,大约 3% 的人患有完全性嗅觉障碍,23% 的人反馈他们的嗅觉能力曾有所改变。如果再将新冠肺炎疫情考虑进来,其实很多人的日常生活都会有嗅觉受损的困扰。
自从我开始在各平台分享我这个人工智能鼻子项目以来,我了解到了很多人其实都深受嗅觉障碍困扰。那瓶牛奶变酸了吗?狗狗是否需要洗澡了?对于一些人,这些日常问题是无法直接依靠自己的嗅觉来作出回答的。虽然便宜的 DIY人工智能鼻子可能没办法很快取代功能齐全的鼻子,但我相信它对于患有嗅觉障碍的人来说,肯定会是一个好伴侣。
🤖️🤖️🤖️
新一代信息技术赋能|人才升级|产业创新
硬件入门|物联网应用实战|社区联名
提升技能 尽在👇人才赋能课程
人才升级 推动双创事业合作
国际权威认证 技能加持合作(点击图片获取合作详情&报名)
新基建 撬动产业数字化方案(点击图片获取详情&报名)
----END----
Chaihuo x.factory|深圳,河北