拓冰建站拓冰建站
首页 / 资讯中心 / 正文

用 IoT 与图像分类模型构建水果质量检测流水线:IoT-For-Beginners 制造篇实战指南

用 IoT 与图像分类模型构建水果质量检测流水线IoT-For-Beginners 制造篇实战指南【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners食品进入中央集散中心或加工厂后往往不会直接运往超市而是要经过按质量分拣等多道加工环节。这一过程曾经完全依赖人力——田间由采摘工只摘成熟果实工厂里果实沿传送带经过时由工人手动剔除碰伤或腐烂的果子。本指南基于 IoT-For-Beginners 开源课程12 周、24 课、面向所有 IoT 学习者的项目制课程的「制造与加工」模块4-manufacturing系统讲解如何用图像分类模型自动检测水果质量并从 IoT 设备调用模型、把模型部署到边缘设备、再用接近传感器触发整个检测流程。读完本文你将掌握一套可复现的训练图像分类器 → 设备拍照调用 → 边缘容器化部署 → 传感器触发端到端水果质检方案。 本模块会使用部分云端资源。若你不需要完成项目中所有课程请记得按照 clean-up.md 清理资源避免产生不必要的费用。为什么制造环节需要自动分拣并不是所有作物都会均匀成熟。以番茄为例当大部分果实可以收获时藤上可能还有一些青果。虽然提前采摘这些果实是浪费但对农民来说用机器一次性收完、之后再把未熟果实处理掉比人工挑选更便宜、更省力。自动化收割把分拣从田间搬到了工厂食物在长长的传送带上移动成队工人逐一检查并剔除不达标的产品。第一代分拣机器采用光学传感器通过检测颜色来控制执行机构——例如用杠杆或气流把绿色番茄推进废料箱让红色番茄继续在传送带网络上运输。这种分拣装置既可以部署在农田的收割机上也可以部署在加工厂里。新一代分拣机则引入 AI 与 ML用训练好的模型区分好坏果实不仅能识别绿 vs 红这种明显的颜色差异还能发现疾病、碰伤等更细微的外观问题。ML model机器学习模型指用一组数据训练机器学习软件后得到的产物。例如你可以训练一个区分成熟与未成熟番茄的 ML 模型之后把新图片输入模型即可判断番茄是否成熟。4 节课的课程脉络本模块通过 4 节课带你完成训练、调用、边缘化、触发的完整闭环课程入口如下训练水果质量检测器——用 Custom Vision 训练图像分类模型识别好果与坏果过熟、碰伤、腐烂等。从 IoT 设备检测水果质量——了解摄像头传感器让设备拍照并调用云端分类器。在边缘运行水果检测器——把模型部署到 Azure IoT Edge让设备在本地网络内完成推理。从传感器触发水果质量检测——用接近传感器触发拍照与分类设计完整的质检应用架构。所有课程均由 4-manufacturing/lessons 目录下的配套代码支撑覆盖 Wio TerminalArduino、Raspberry Pi单板计算机和虚拟 IoT 设备三种硬件路径。第一课训练水果质量检测器课程入口4-manufacturing/lessons/1-train-fruit-detector/README.md图像分类与传统编程的本质区别传统编程是输入数据 算法 → 输出结果而机器学习把顺序倒过来——先有数据和已知输出算法从数据中学习得到的产物模型再接收新输入并产生新输出。训练用的输入和已知输出合称训练数据模型输出的结果叫预测predictions。ML 模型不会给出二元答案而是给出概率。例如模型看到一张香蕉照片可能预测ripe99.7%、unripe0.3%代码再选取概率最高的标签作为结论。这种识别图像并打标签的模型称为图像分类器image classifier。迁移学习小样本也能训练训练图像分类器通常需要海量图片。但实践中一个已在数以百万计图片上训练好的分类器内部已经擅长识别形状、颜色和图案用迁移学习transfer learning你可以基于新数据重新训练它用很少的图片就得到不错的结果。这就像儿童形状书一旦认识半圆、矩形和三角形就能根据组合方式认出帆船或猫——分类器认识形状迁移学习教会它什么组合代表熟香蕉。Custom Vision 正是这样一款云端图像分类器训练工具通过门户、Web API 或 SDK 上传图片并给每张图打标签训练后发布模型供 Web API 或 SDK 调用。官方建议每个分类至少 5 张图即可训练但图片越多越好30 张以上效果更佳。Custom Vision 属于 Azure Cognitive Services提供免费层足够完成模型的创建、训练与开发调试。实操创建资源与训练模型创建认知服务资源Azure CLI先建资源组fruit-quality-detector再分别创建训练与预测两个资源az group create --name fruit-quality-detector --location location az cognitiveservices account create --name fruit-quality-detector-training \ --resource-group fruit-quality-detector \ --kind CustomVision.Training \ --sku F0 \ --yes \ --location location az cognitiveservices account create --name fruit-quality-detector-prediction \ --resource-group fruit-quality-detector \ --kind CustomVision.Prediction \ --sku F0 \ --yes \ --location location--sku F0为免费层若你的账户已使用过任一认知服务的免费层可改用S0。--yes表示同意认知服务条款。创建项目在 CustomVision.ai 新建项目命名为fruit-quality-detector务必绑定刚才的fruit-quality-detector-training资源项目类型选Classification、分类类型选Multiclass域选择Food。收集与上传图片每个标签至少 5 张训练图另留几张测试图。建议图片只有果实主体、背景一致或多样且背景中不要出现只与某一标签相关的内容——否则分类器可能学会识别背景而非果实。Custom Vision 虽然可接收最大 10240×10240 的图片但实际训练与推理在 227×227 分辨率上进行因此被分类的主体应在画面中占足够大的比例。图片须为 PNG/JPEG 且小于 6MBiPhone 拍摄的 HEIC 需要转换。仓库 4-manufacturing/lessons/1-train-fruit-detector/images 下提供了 ripe/unripe 香蕉训练与测试图片样本。上传时将熟果标记为ripe、未熟果标记为unripe然后选择Quick Training快速训练。测试与再训练训练完成后用之前预留的测试图不能是训练图在 Quick Test 中验证观察每个标签的概率输出。如果结果不理想可以再次训练——每次 Quick Test 的图片与结果都会被存储可用于再训练让模型逐步改进对错分样本的判断。训练完成后在 Performance 标签页可以看到 Precision、Recall、AP 等模型评估指标。第二课从 IoT 设备检测水果质量课程入口4-manufacturing/lessons/2-check-fruit-from-device/README.md摄像头传感器原理摄像头传感器是能接入 IoT 设备的相机可拍静图或视频。多数传感器内部是一块由成千上万光电二极管组成的图像传感器Active-Pixel Sensor最常见的是CMOS 传感器镜头把光线聚焦到传感器上每个像素记录落光量形成图像数据。由于图片数据量远大于温度等单值传感器读数摄像头通常通过 SPI 等协议高速传输数据。在单片机等资源受限硬件上图片尺寸是需要认真权衡的约束。仓库中三种硬件路径的拍照代码都遵循同一模式——初始化摄像头、设置 640×480 分辨率、预热后把画面写入 JPEG 文件。例如 Raspberry Pi 路径code-camera/pi/fruit-quality-detector/app.pyfrom picamera import PiCamera import io, time camera PiCamera() camera.resolution (640, 480) time.sleep(2) # 预热传感器 image io.BytesIO() camera.capture(image, jpeg) image.seek(0) with open(image.jpg, wb) as image_file: image_file.write(image.read())Wio Terminal 路径则通过 config.h 配置 WiFi 凭证SSID、PASSWORD在main.cpp中驱动摄像头虚拟设备路径使用 CounterFit 模拟CounterFitConnection.init(127.0.0.1, 5000)配合counterfit_shims_picamera。发布模型迭代每次训练都会产生一个迭代iterationPerformance 标签页会列出它们Quick Test 时可通过下拉框切换迭代对比效果。确定满意的迭代后点击Publish选择fruit-quality-detector-prediction作为预测资源命名如Iteration2。发布后点击Prediction URL取 If you have an image file 部分的 URL 与Prediction-Keyhttps://location.api.cognitive.microsoft.com/customvision/v3.0/Prediction/id/classify/iterations/Iteration2/imagelocation是你创建资源时使用的区域id是一长串字母数字。Prediction-Key 是调用模型必须携带的安全密钥只有持钥应用才被允许使用模型。设备端调用分类器仓库 code-classify/pi/fruit-quality-detector/app.py 展示了完整调用先拍照再解析预测 URL 提取 endpoint、project_id 与 iteration_name用CustomVisionPredictionClient的classify_image发送图片并打印每个标签的概率prediction_url prediction_url prediction_key prediction key parts prediction_url.split(/) endpoint https:// parts[2] project_id parts[6] iteration_name parts[9] prediction_credentials ApiKeyCredentials(in_headers{Prediction-key: prediction_key}) predictor CustomVisionPredictionClient(endpoint, prediction_credentials) image.seek(0) results predictor.classify_image(project_id, iteration_name, image) for prediction in results.predictions: print(f{prediction.tag_name}:\t{prediction.probability * 100:.2f}%)用设备实拍图改进模型设备端推理结果往往不如电脑上传图片准确——模型是用手机等设备拍摄的训练图训练出来的与 IoT 设备摄像头的画质、锐度、色彩存在差异。改进方法是直接用设备实拍图再训练先在设备上分类多张熟/生水果图片再到 Custom Vision 的 Predictions 标签页用这些图片重训模型参考第一课的再训练章节如果实拍图与原始训练图差异太大可在 Training Images 标签页删除旧图训练新迭代、重新发布并更新代码中的端点 URL重复迭代直到效果满意。第三课在边缘运行水果检测器课程入口4-manufacturing/lessons/3-run-fruit-detector-edge/README.md边缘计算取舍与权衡此前几课都是设备采集数据、把数据发到云端做分析与推理。**边缘计算edge computing**则把部分云服务搬到与 IoT 设备同一局域网内的计算机上只在必要时与云端通信。例如在边缘设备上运行水果成熟度分析模型只把熟果 vs 未熟果数量等统计结果回传云端。优点速度动作发生在设备所在局域网内无需跨公网往返。数据穿越跨大西洋光缆单程至少 28ms还没算上光电转换等开销局域网流量也更少降低带宽拥塞导致的数据延迟。远程可用性在网络有限或没有网络、或持续联网成本过高的场景如人道主义灾区依然可用。低成本数据采集、存储、分析与动作触发都在边缘完成减少云服务用量。近年来出现了如 NVIDIA Jetson Nano 等面向边缘计算、售价低廉的 AI 加速板。隐私与安全数据留在本地网络、不上传云端分析后甚至无需存储大幅降低数据泄露风险适合医疗数据、监控录像等敏感场景。处理不安全设备可让有已知安全缺陷的设备接入独立网络由边缘网关设备统一管理与外网的数据往来。兼容异构设备无法直连 IoT Hub 的设备如仅支持 HTTP 或仅有蓝牙可通过边缘网关转发消息。缺点扩展性与灵活性云端可以实时增减服务器应对负载边缘扩容需要人工加设备。可靠性与容灾云提供多地多服务器冗余边缘要达到同等冗余需要大量投入与配置。维护云端由服务商负责系统维护与更新边缘设备需要自建自管。实践中 IoT 系统往往是云边混合按需求、客户与维护方决定每个环节放在哪一层。本课还指出边缘推理不做网络跳转可能更快但边缘硬件也可能不如云端强大因此建议实测对比边缘与云端的调用耗时。Azure IoT Edge把云工作负载搬上边缘Azure IoT Edge 内置于 IoT Hub允许从云端向边缘设备部署代码。部署到 IoT Edge 的软件称为模块modules默认运行edgeAgent、edgeHub等与 IoT Hub 通信的模块图像分类器就是额外部署的一个模块。IoT Edge 通过**容器container**运行代码——容器是自包含、隔离运行的应用通过开放端口对外提供服务。用 Custom Vision 可以把训练好的图像分类器导出为容器运行后提供与云端一致的 REST API只是端点指向边缘设备。注册与配置边缘设备先创建 IoT Hub再注册启用边缘的设备az iot hub device-identity create --edge-enabled \ --device-id fruit-quality-detector-edge \ --hub-name hub_name az iot hub device-identity connection-string show --device-id fruit-quality-detector-edge \ --output table \ --hub-name hub_nameIoT Edge 运行时只运行 Linux 容器Raspberry PiDebian 系 Linux可直接安装运行时Windows 需借助 Linux 虚拟机macOS 可按 vm-iotedge.md 在云端创建 Linux 虚拟机作为边缘设备。安装后设置设备连接字符串。用紧凑域重训并导出模型Custom Vision 可以生成标准模型和**紧凑模型compact**两类紧凑模型体积更小适合下载到 IoT 设备部署。在项目Settings中把域切换为Food (compact)确认 Export Capabilities 选择Basic platforms (Tensorflow, CoreML, ONNX, ...)保存后重新 Quick Training。之后在 Performance 标签页选中紧凑域训练出的迭代点击Export→ 选择DockerFile按边缘设备架构选Linux或ARM (Raspberry Pi 3)版本下载并解压得到 DockerFile 与运行模型的应用代码。构建、推送并部署容器创建容器注册表Azure Container Registry 为付费服务用后务必按 clean-up.md 清理az acr create --resource-group fruit-quality-detector \ --sku Basic \ --name Container registry name az acr login --name Container registry name az acr update --admin-enabled true --name Container registry name az acr credential renew --password-name password \ --output table \ --name Container registry name构建并推送镜像在解压出的模型目录执行在树莓派上边缘端构建时--platform linux/armhf否则linux/amd64Linux 下可能需要sudodocker build --platform linux/amd64 -t Container registry name.azurecr.io/classifier:v1 . docker push Container registry name.azurecr.io/classifier:v1 az acr repository list --output table --name Container registry name构建日志显示Custom Vision 导出的容器基于python:3.7-slim安装 numpy、tensorflow、flask、pillow 与mscviplib并在容器内运行 Flask 应用托管模型与 REST API——这就是镜像内部会监听 80 端口的原因。创建部署清单code-deployment/deployment/deployment.json声明$edgeAgent、$edgeHub系统模块与ImageClassifier业务模块注册表凭证registryCredentials让边缘设备能拉取私有镜像ImageClassifier模块的createOptions暴露 80/tcp 端口。把三处Container registry name替换为你的注册表名把Container registry password替换为刚才生成的密码然后下发模块az iot edge set-modules --device-id fruit-quality-detector-edge \ --content deployment.json \ --hub-name hub_name验证部署SSH 登录边缘设备后执行iotedge list应看到ImageClassifier、edgeAgent、edgeHub均处于 running 状态iotedge logs ImageClassifier会输出 TensorFlow 加载模型与标签、Flask 服务监听http://0.0.0.0:80/的日志。用 curl 即可本地测试分类器curl --location \ --request POST http://IP address or name/image \ --header Content-Type: image/png \ --data-binary file_Name返回 JSON 中包含ripe/unripe两个标签的概率。注意边缘部署的模型不依赖 Azure 资源和 Prediction-Key安全由内部网络策略决定。一个隐含代价是边缘模型与 Custom Vision 项目不再关联Predictions 标签页看不到边缘端分类过的图片——这是隐私与离线能力的回报但再训练时需要另想办法收集可重新标注的图片。第四课用传感器触发水果质量检测课程入口4-manufacturing/lessons/4-trigger-fruit-detector/README.mdThings、Insights、Actions复杂 IoT 应用架构IoT 应用往往不是单一设备而是多个设备协作传感器采集物理世界数据、做出决策、再通过执行器或可视化与物理世界交互。一个经典描述是**things设备**发送数据产生insights洞察洞察驱动actions动作改善业务。参考架构reference architecture把系统划分为三层Things从传感器采集数据、可能借助边缘服务解释数据的设备数据发送到 IoT 服务Insights来自无服务器应用或对存储数据的分析Actions发送给设备的命令或供人决策的数据可视化。本课程对应的 Azure 组件为设备代码采集传感器数据、用 Custom Vision 在云端与边缘分析图像并发送到 IoT HubThings用 Azure Functions 响应 IoT Hub 消息、把数据存入 Azure Storage 供后续分析Insights根据云端决策控制执行器、用 Azure Maps 可视化数据Actions。设计架构时还要始终考虑数据与安全设备收发哪些数据、如何加密保护、如何控制设备与云服务的访问。水果质检系统的参考架构把上述模式套用到加工厂场景果实沿传送带到达系统自动检测、拍照并用边缘 AI 模型质检结果发到云端存储未熟果触发告警。仓库中 images/iot-reference-architecture-fruit-quality.png 展示了这个原型应用的参考架构带接近传感器的设备检测到果实到达发消息到云端云端无服务器应用向拍照设备发送命令带摄像头的设备拍照并把图片发给边缘图像分类器结果回传云端云端无服务器应用存储结果用于分析未熟果比例若未熟则向带 LED 的设备发送告警命令。原型可以全部实现在单台设备上把拍照、分类、LED 控制逻辑都内置只用 IoT Hub 统计未熟果数量与配置设备本课将其拆开是为了演示大规模 IoT 应用的设计概念。如果你用单片机则需要一台独立边缘设备运行分类器。消息结构应提前定义——几乎所有资深开发者都曾被发送数据与预期不符的 bug 折磨过温度字段叫temperature还是temp单位是 °C 还是 °F决策放在哪一层也要权衡若由 IoT Hub 决策需持续发送多个距离测量值消息过多会推高 IoT Hub 成本与带宽、拖慢设备若由设备决策则需要提供配置手段微调机器。接近传感器与原型实现触发点之一是接近传感器它发射激光或红外光束根据光束被物体反射回来的时间计算距离判断果实是否到达传送带上的正确位置。手机贴近耳朵时自动熄屏靠的就是这类传感器。仓库中 Raspberry Pi 路径的接近传感器示例code-proximity/pi/fruit-quality-detector/distance_sensor.py基于 VL53L0X 激光测距模块from grove.i2c import Bus from rpi_vl53l0x.vl53l0x import VL53L0X distance_sensor VL53L0X(bus Bus().bus) distance_sensor.begin() while True: distance_sensor.wait_ready() print(fDistance {distance_sensor.get_distance()} mm) time.sleep(1)多设备模拟与生产化单板计算机Raspberry Pi可同时运行多个应用把每个设备实现为独立 Python 文件、在不同终端会话运行即可模拟多个 IoT 设备注意部分硬件不能被多个并发应用同时访问。单片机无法并发运行多个应用需要把所有设备逻辑放进单一应用。建议做法为每个逻辑设备建一个类如DistanceSensor、ClassifierCamera、LEDController各带setup/loop方法供主程序调用命令集中处理并按需分发主loop里统一考虑各设备的节奏例如一个设备每 1 秒处理、另一个每 10 秒用计数器控制。生产化差异使用能耐受工厂噪声、高温、振动与冲击的加固组件部分组件直接在内部通信、只把数据上传云端存储可用网关设备把部分 IoT 服务放到边缘硬件需要可配置例如接近距离不要硬编码而是通过设备孪生device twin由云端配置用自动化装置替代 LED 告警来剔除未熟果。课程配套与收尾每个课程目录下都配有assignment.md作业如第一课的为多种果蔬训练分类器、第四课的构建水果质量检测器帮助你举一反三。学习过程中建议同步查看各课的 sketchnotes 速记图与配套讲解视频。由于本模块会创建认知服务、IoT Hub、容器注册表等云端资源完成第四课作业后务必按 clean-up.md 清理避免持续产生费用。【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门