尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

IoT-For-Beginners 制造篇:从图像分类到边缘部署的果蔬质量检测实战指南

发布时间:2026/9/15 17:46:56

资讯中心
01
ARTICLE

IoT-For-Beginners 制造篇:从图像分类到边缘部署的果蔬质量检测实战指南

IoT-For-Beginners 制造篇:从图像分类到边缘部署的果蔬质量检测实战指南
IoT-For-Beginners 制造篇从图像分类到边缘部署的果蔬质量检测实战指南【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners导读本文围绕IoT-For-Beginners开源课程的第 4 大模块「制造与加工」Manufacturing and processing系统讲解如何用 IoT 技术改善食品加工环节中的水果质量检测从训练基于图像的 AI 分类模型Custom Vision、在 IoT 设备上调用云端分类 API到把模型下沉到 IoT Edge 设备本地推理最后用接近传感器触发完整的质量检测流程。读完本文你将掌握图像分类模型训练、IoT 摄像头取图、模型发布与端点调用、边缘计算部署容器 Azure IoT Edge 部署清单以及复杂 IoT 应用架构设计的完整实战链路并能在仓库源码的支撑下直接复现每一步。一、食品加工中的 IoT 质量检测从人工分拣到 AI 分拣当食物抵达中央集散中心或加工厂后并不总是直接发往超市。大量食物要经过一系列加工步骤其中最重要的就是按质量分拣。这个流程在过去完全依赖人工田间采收时工人只摘取成熟的果实工厂里果实沿传送带运输员工手动剔除碰伤或腐烂的水果。课程作者在描述中坦言自己学生时代曾在暑期工中亲手分拣过草莓——这显然不是一份轻松的差事。更现代的方案则依赖 IoT 完成分拣。早期设备例如 Weco 的分拣机使用光学传感器检测农产品质量例如剔除青色番茄。这类设备既可以部署在农场内的收割机上也可以部署在加工厂中。随着人工智能AI与机器学习ML的进步这些机器可以做得更高级使用 ML 模型来区分水果与石块、泥土、昆虫等异物甚至识别碰伤、疾病等早期问题。ML 模型是指在数据集上训练机器学习软件后得到的产物。例如你可以训练一个 ML 模型区分成熟与未成熟的番茄然后用它对新图片做判断。围绕这一主题制造篇共包含 4 个递进式课程对应仓库 4-manufacturing/lessons 目录构成一条完整的工程链路课程核心任务仓库目录1. 训练水果质量检测器用 Custom Vision 训练图像分类模型1-train-fruit-detector2. 从 IoT 设备检测水果质量摄像头取图并调用云端分类 API2-check-fruit-from-device3. 在边缘运行检测器用 Azure IoT Edge 把模型部署到本地设备3-run-fruit-detector-edge4. 用传感器触发检测用接近传感器编排完整质量检测流程4-trigger-fruit-detector 这些课程会使用部分云资源。若未完成本项目所有课程务必按 clean-up.md 中的指引清理云资源避免产生持续费用。二、第一课训练水果质量检测器图像分类模型2.1 为什么需要 AI/ML 分拣养活全球人口并不容易尤其是要让价格对所有人都可负担。人力是最大成本之一因此农民越来越依赖自动化与 IoT 工具来降低人工成本。机械收割虽省钱却带来了新问题——收割时分拣能力的缺失。并非所有作物都均匀成熟例如番茄当大部分已可采摘时藤上可能仍有青果。提前采收是浪费但对农民来说用机械统一收割、事后弃置未熟果实反而更便宜、更省事。自动化收割把分拣从田间转移到了工厂食物沿长长的传送带移动成队的工人人工剔除不达标的果实。下一阶段是使用机器分拣——无论是内置于收割机还是在加工厂。第一代这类机器使用光学传感器检测颜色通过杠杆或气流把青色番茄推进废料箱让红色番茄继续在传送带网络上前进。最新的分拣机则利用 AI/ML用模型区分优劣农产品——不再仅仅依靠「青 vs 红」这样明显的颜色差异而是识别疾病或碰伤这类更细微的外观特征。2.2 什么是图像分类传统编程 vs 机器学习传统编程是「输入数据 → 应用算法 → 得到输出」而机器学习把这个过程反转过来——从数据和已知输出出发让算法从数据中学习得到被称为machine learning modelML 模型的训练结果再用它接收新输入并产生新输出。 机器学习算法从数据中学习的过程叫training训练输入与已知输出合称training data训练数据ML 模型给出的结果被称为predictions预测。例如用数百万张未熟香蕉图片作为输入训练数据输出标记为unripe再用数百万张熟香蕉图片输出标记为ripe算法便建立起模型。之后给模型一张全新的香蕉照片它就能预测该香蕉是熟还是未熟。ML 模型并不给出二元答案而是给出概率。例如模型可能预测ripe为 99.7%、unripe为 0.3%你的代码再挑选最佳预测并判定香蕉成熟。这类用于图像检测的 ML 模型称为image classifier图像分类器它接受带标签的图像然后基于标签对新图像分类。 这是简化说法还存在无需标签输出的其他训练方式如无监督学习。想深入可参考课程 ML for beginners24 节机器学习课程。2.3 迁移学习Transfer Learning训练图像分类器通常需要数百万张图片。但事实是一旦你有了一个在数百万甚至数十亿张杂项图像上训练好的分类器就可以用少量新图片复用它并重新训练得到极佳结果——这个过程叫transfer learning迁移学习。 迁移学习是把现有 ML 模型已学到的知识迁移到基于新数据构建的新模型上。可以把它类比为儿童积木书一旦你认识半圆、矩形和三角形就能根据它们的组合识别帆船或猫。分类器已经会识别形状迁移学习则教会它什么组合构成船或猫——或是一根熟香蕉。这类模型的训练通常需要大量算力GPU而云端可以按需租用带 GPU 的强算力机器。2.4 Custom Vision云端训练图像分类器Custom Vision是一款基于云的图像分类器训练工具只需少量图片即可训练通过 Web 门户、Web API 或 SDK 上传图片为每张图片打上tag分类标签训练模型并测试其表现满意后即可发布模型通过 Web API 或 SDK 访问。 Custom Vision 每个分类最少 5 张图即可训练但越多越好至少 30 张图效果更佳。免费层足够完成创建模型、训练与开发使用。Custom Vision 隶属微软 Cognitive Services认知服务系列 AI 工具包含语音识别与翻译、语言理解、图像分析等能力在 Azure 中以免费层提供服务。实操创建认知服务资源使用 Custom Vision 前需要先用 Azure CLI 创建两个认知服务资源——一个用于训练、一个用于预测。创建名为fruit-quality-detector的资源组创建免费版 Custom Vision训练资源az cognitiveservices account create --name fruit-quality-detector-training \ --resource-group fruit-quality-detector \ --kind CustomVision.Training \ --sku F0 \ --yes \ --location locationF0即免费层--yes表示同意认知服务的条款。若你的账号已在任何 Cognitive Services 上用过免费额度则改用S0计费层。创建免费版 Custom Vision预测资源az cognitiveservices account create --name fruit-quality-detector-prediction \ --resource-group fruit-quality-detector \ --kind CustomVision.Prediction \ --sku F0 \ --yes \ --location location实操创建分类器项目在 CustomVision.ai 用你的 Azure 账号登录新建项目fruit-quality-detector并注意资源选择fruit-quality-detector-training项目类型选择Classification分类分类类型选择Multiclass多分类域Domain选择Food食物域。✅ 多花点时间熟悉 Custom Vision 门户中图像分类器的界面。实操采集并上传训练图片训练需要多张不同质量的果实照片分别标记为 good 与 bad例如一根熟香蕉与一根过熟香蕉。图片采集要点每张图片应只包含目标果实背景保持一致或足够多样且背景中不能存在与「熟/未熟」相关的专属特征——课程举了一个著名反例皮肤癌分类器曾因恶性痣图片中都放了直尺而被训练成「识别直尺」图像分类器在极低分辨率下运行Custom Vision 可接收最大 10240×10240 的训练与预测图但模型实际按227×227训练与推理大图会被缩小因此被分类物体要占画面足够大的比例每个标签至少 5 张训练图越多越好另留几张用于测试建议熟/未熟各准备两根香蕉从多个角度拍摄至少凑出 5 张训练 2 张测试图片须为 PNG 或 JPEG、小于 6MBiPhone 拍摄的 HEIC 高分辨率图需要转换与缩小。仓库 1-train-fruit-detector/images 目录下已经准备了现成的熟/未熟香蕉样本如 training/ripe 与 training/unripe可直接用于练习。上传时把熟果标记为ripe、未熟果标记为unripe然后选择Quick Training快速训练训练通常需要几分钟完成。 如果你决定在训练期间把水果吃掉请确保测试图已足够。实操测试与重新训练分类器训练完成后用未曾用于训练的测试图片测试模型观察各标签的概率输出例如未熟香蕉可能被预测为unripe98.9%、ripe1.1%。分类器并不「理解」图片内容——它只是基于图像特征与标签的匹配概率做预测因此预测结果可能出乎意料。改进方法是用预测错误的图片重新训练每次 Quick Test 的图片与结果都会被存储你可以在 Custom Vision 的预测结果中为图片打上正确标签并重新训练迭代。三、第二课从 IoT 设备检测水果质量3.1 摄像头传感器原理图像分类器要用于 IoT 应用就必须用某种摄像头采集图片并发送到云端分类。摄像头传感器Camera sensor就是可连接到 IoT 设备的摄像头能拍静止图像或流视频有的返回原始图像数据有的压缩为 JPEG/PNG 文件。大多数摄像头传感器采用图像传感器每个像素是一个光电二极管镜头把图像聚焦到传感器上数百万个光电二极管检测落在其上的光并记录为像素数据。 图像传感器即 Active-Pixel SensorAPS最常见类型是互补金属氧化物半导体传感器即CMOS传感器。摄像头传感器属于数字传感器通常借助通信库发送数字图像数据并通过 SPI 等协议连接——因为图像数据量远大于温度传感器输出的单个数值。课程设计了思考题微控制器硬件上图像大小的限制是什么需要考虑内存与带宽约束。3.2 发布图像分类器Model Iterations上一课训练好的模型还不能直接调用必须先发布Publish。每次训练都会产生一个新的iteration迭代例如Iteration 1、Iteration 2用于追踪不同数据集上的模型版本Quick Test 时可用下拉框切换迭代对比结果。发布步骤在 Custom Vision 门户打开fruit-quality-detector项目选择顶部Performance页签在侧边Iterations列表选中最新迭代点击该迭代的Publish按钮在发布对话框中把Prediction resource设为fruit-quality-detector-prediction名称保持Iteration2点击发布发布后点击Prediction URL取If you have an image file区块中的 URL 与Prediction-Key。预测 URL 形如https://location.api.cognitive.microsoft.com/customvision/v3.0/Prediction/id/classify/iterations/Iteration2/image其中location是创建资源时使用的区域id是字母数字组成的长 ID。Prediction-Key 是安全密钥只有携带该密钥的应用才被允许调用模型。✅ 发布新迭代时名字会不同。想想如何让 IoT 设备切换使用新的迭代答案更新代码中的预测 URL 端点。3.3 从 IoT 设备调用分类 API仓库源码剖析调用分类器需要针对不同硬件写设备端代码仓库提供了三种硬件的完整实现Raspberry Pi / 虚拟 IoT 设备Python仓库 app.py虚拟设备版在 virtual-iot-device/fruit-quality-detector/app.py展示了一条完整的「取图 → 解析端点 → 调用分类」链路import io import time from picamera import PiCamera from azure.cognitiveservices.vision.customvision.prediction import CustomVisionPredictionClient from msrest.authentication import ApiKeyCredentials camera PiCamera() camera.resolution (640, 480) camera.rotation 0 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()) 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}%)关键点摄像头分辨率设为640×480、JPEG 格式通过字符串解析把预测 URL 拆解为endpointhttps:// 主机名、project_idURL 第 7 段与iteration_name第 10 段无需手工配置三个独立参数ApiKeyCredentials把Prediction-key放入请求头打印每个标签的百分比概率。虚拟设备版仅将PiCamera替换为counterfit_shims_picamera并先行初始化 CounterFit 连接逻辑完全一致。Wio TerminalArduino / C微控制器版在 main.cpp 中用WiFiClientSecure建立 HTTPS 连接按 C 键触发buttonPressed()通过camera.readImageToBuffer()读取图像字节流再以POST方式把原始字节发到PREDICTION_URL响应用 ArduinoJson 解析出predictions数组并打印标签与概率int httpResponseCode httpClient.POST(buffer, length); if (httpResponseCode 200) { String result httpClient.getString(); DynamicJsonDocument doc(1024); deserializeJson(doc, result.c_str()); JsonObject obj doc.asJsonObject(); JsonArray predictions obj[predictions].asJsonArray(); // 逐条打印 tagName 与 probability }其中PREDICTION_URL、PREDICTION_KEY与 WiFi 凭据都在 config.h 中通过占位符配置该文件还内置了Microsoft Azure DigiCert Global Root G2根证书用于 TLS 握手保证请求不会被中间人窃听。请求头同时包含Content-Type: application/octet-stream与Prediction-Key。 三类硬件的取图说明分别见 wio-terminal-camera.md、pi-camera.md、virtual-device-camera.md分类调用说明见 wio-terminal-classify-image.md 与 single-board-computer-classify-image.md。3.4 用设备实拍图改进模型设备实拍的预测结果未必符合预期——因为训练数据与预测数据的成像环境不同。想让分类器表现最佳训练图片应尽量接近预测图片手机拍摄的清晰度、锐度与色彩和 IoT 设备摄像头拍摄的差异明显课程对比图中 Raspberry Pi Camera 与 iPhone 拍摄同一根香蕉画质差异肉眼可辨。改进流程用 IoT 设备分类多张熟/未熟果实图片在 Custom Vision 门户的Predictions页签中用这些实拍图重新训练参考 第一课的重新训练章节若实拍图与原始训练图差异过大可在Training Images页签勾选旧图并Delete删除训练新迭代并按上文步骤发布更新代码中的端点 URL重新运行应用重复直到结果满意。四、第三课在边缘运行水果检测器4.1 边缘计算 vs 云计算前几课把图片经互联网发给云端服务分类这些调用耗时、花钱且对某些图像数据存在隐私顾虑。边缘计算Edge computing把数据处理移到离数据产生地尽可能近的地方——即你自己的内部网络而不是云端。边缘计算的优势速度——动作在同一网络内完成无需跨互联网往返数据走更短距离、更快到达。课程举了一个直观例子从欧洲向美国云服务发数据仅跨大西洋光缆至少就要 28ms还没算光电转换与排队。此外边缘计算网络流量更少不易被有限的互联网带宽拥塞拖慢远程可达性——在连接受限、无连接或连接费用过高的场景如人道主义灾区、发展中地区依然可用更低成本——在边缘设备上完成数据采集、存储、分析与动作触发减少云服务用量近年还出现了专为边缘计算的 AI 加速板卡隐私与安全——数据留在本地网络不上传云端分析后无需长期存储大幅降低数据泄露风险典型如医疗数据、安防监控画面处理不安全设备——有已知安全缺陷的设备可接入独立网络通过网关 IoT Edge 设备再连主网/互联网由边缘设备管理数据流支持不兼容设备——只能走 HTTP 或仅支持蓝牙、无法直连 IoT Hub 的设备可通过 IoT Edge 网关转发消息。边缘计算的劣势本质是云优势的反面规模与弹性——云可实时增减服务器应对需求边缘扩容需要人工添加设备可靠性与韧性——云通常多地域多服务器冗余边缘要达到同等冗余需要大量投入与配置维护——云服务商负责系统维护与更新。课程同时指出部分风险会被边缘计算的性质天然缓解例如工厂里处理机械数据的边缘设备若工厂断电生成数据的机器也断电并不需要额外备份边缘设备。实际 IoT 系统往往采用云 边缘的混合架构按系统、客户与维护者需求各取所长。4.2 Azure IoT Edge 与模块/容器机制Azure IoT Edge帮助你把工作负载从云端下沉到边缘把一台设备设为边缘设备即可从云端向它部署代码。例如在云端训练图像分类器再从云端部署到边缘设备IoT 设备向边缘设备发图分类而非把图发到互联网。需要新模型时在云端重新训练并借助 IoT Edge 更新边缘设备上的模型。Workloads工作负载指做某种工作的任何服务AI 模型、应用、serverless 函数部署到 IoT Edge 的软件称为modules模块默认运行与 IoT Hub 通信的edgeAgent与edgeHub模块。IoT Edge 内建于 IoT Hub因此可以用管理 IoT 设备的同一服务同一安全级别管理边缘设备。IoT Edge 运行的代码来自容器containers——在计算机上隔离运行的自包含应用像「电脑中的另一台电脑」默认无法访问主机资源通过开放端口对外提供或暴露服务。Custom Vision 模型可导出为容器运行时对外暴露与云版本相同的 REST API只是端点指向运行容器的边缘设备。4.3 注册并设置 IoT Edge 设备先在fruit-quality-detector资源组创建 IoT Hub唯一名称基于fruit-quality-detector再注册边缘设备与普通设备命令几乎相同仅多一个--edge-enabled标志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 容器可跑在 Linux 上或 Windows 上通过 Linux 虚拟机运行。选型参考Raspberry Pi树莓派 OS 是 Debian Linux 变体→ 按官方 Linux 安装指南安装 IoT Edge 并写入连接字符串其他 Linux 电脑 → 同上Windows → 在 Linux 虚拟机中安装 IoT Edge 运行时macOS → 按仓库 vm-iotedge.md 在云端创建装有 IoT Edge 的 Linux 虚拟机。4.4 导出模型并构建容器要在边缘运行分类器必须先从 Custom Vision导出。Custom Vision 能生成标准模型与compact 模型紧凑模型——后者通过各种技术压缩模型体积使其小到可以下载部署到 IoT 设备。创建项目时用的Food域在 Custom Vision 中同时提供 standard 与 compact 两种形态只需在项目Settings中把域切换为Food (compact)勾选Basic platforms (Tensorflow, CoreML, ONNX, ...)导出能力保存后重新用Quick training训练。训练完成后进入Performance页签对最新迭代点Export选择DockerFileLinux 电脑 / Windows / 虚拟机运行 IoT Edge → 选Linux版本Raspberry Pi 运行 IoT Edge → 选ARM (Raspberry Pi 3)版本。 Docker 是最流行的容器管理工具之一DockerFile 是构建容器的指令集。导出后你会得到一个包含 DockerFile 与模型托管应用代码内含 REST API的 zip 包。接下来需要把模型构建成容器并推送到容器注册表container registry——本课使用Azure Container Registry非免费服务使用完务必按 clean-up.md 清理。整体流程为「构建容器 → 推送到注册表 → IoT Edge 从注册表拉取并部署到设备」。# 创建容器注册表名称需全局唯一仅限字母数字 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 # 生成密码并记下 PASSWORD az acr credential renew --password-name password \ --output table \ --name Container registry name在解压后的模型目录中构建并打标签docker build --platform platform -t Container registry name.azurecr.io/classifier:v1 .平台Raspberry Pi 用linux/armhf其余用linux/amd64若就在 IoT Edge 设备本机构建可省略--platform默认当前平台Linux/树莓派 OS 上可能需要sudo容器标签classifier:v1定义名称与版本更新时可换新版本号重新构建。课程给出了真实构建日志示例其中 Dockerfile 内部执行了pip install numpy~1.17.5 tensorflow~2.0.2 flask~1.1.2 pillow~7.2.0与mscviplib2.200731.16等依赖安装——说明导出的容器是一个内置 TensorFlow 推理 Flask REST API 的完整服务。推送容器到注册表并验证docker push Container registry name.azurecr.io/classifier:v1 az acr repository list --output table --name Container registry name4.5 部署清单deployment.json详解部署到边缘设备需要一个deployment manifest部署清单——列出要部署到边缘设备的模块的 JSON 文档。仓库提供了完整可用的示例 deployment.json其结构包含四大部分$edgeAgent.properties.desired运行时配置。runtime.type为dockerminDockerVersion为v1.25registryCredentials声明拉取私有镜像所需的注册表凭据用户名、密码、地址systemModules指定系统模块edgeAgent与edgeHub的镜像mcr.microsoft.com/azureiotedge-agent:1.1、azureiotedge-hub:1.1后者用createOptions暴露 5671/8883/443 三个端口modules业务模块ImageClassifier镜像为Container registry name.azurecr.io/classifier:v1restartPolicy为alwayscreateOptions中ExposedPorts与HostConfig.PortBindings把容器 80 端口映射到主机 80 端口使分类 REST API 可通过http://edge设备/image访问$edgeHub.properties.desired路由upstream: FROM /messages/* INTO $upstream把消息转发到云端storeAndForwardConfiguration.timeToLiveSecs设为 7200离线时消息缓存存活时间。使用前把三处Container registry nameImageClassifier模块与registryCredentials内和Container registry password替换为实际值然后执行az iot edge set-modules --device-id fruit-quality-detector-edge \ --content deployment.json \ --hub-name hub_name部署后 SSH 连接边缘设备用iotedge list查看模块状态用iotedge logs ImageClassifier查看日志日志中应出现Loading model...Success!与Running on 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 中包含predictions数组如ripe0.9996、unripe0.0004。值得注意的是这里不需要 Prediction-Key因为不经过 Azure 资源安全交由内部网络策略管理而不是依赖公共端点与 API 密钥。 在边缘运行分类器的代价是模型与 Custom Vision 项目不再连接Predictions 页签看不到边缘分类的图片——因为图片从未离开你的网络。这正是隐私与离线能力的来源但「用新图片改进模型」就需要另想存储与重标注的方案。五、第四课用传感器触发水果质量检测5.1 复杂 IoT 应用的架构Things → Insights → ActionsIoT 应用由大量组件构成可以被概括为things物设备发送数据并产生insights洞察洞察驱动actions动作以改进业务或流程。例如发动机thing发送温度数据用数据评估发动机是否正常insight据此主动安排维护计划action。课程给出的参考架构Reference IoT architecture详见 iot-reference-architecture.png中Things从传感器采集数据、可能借助边缘服务解释数据如图像分类器解释图像数据发往 IoT 服务Insights来自 serverless 应用或对存储数据的分析Actions发给设备的命令或供人决策的数据可视化。Azure 生态对应关系见 iot-reference-architecture-azure.png设备代码采集传感器数据、用 Custom Vision云端与边缘分析图像并发往 IoT HubThingsAzure Functions 响应 IoT Hub 消息、Azure Storage 存储数据供后续分析Insights根据云端决策控制执行器、用 Azure Maps 可视化数据Actions。在架构设计时必须持续考虑数据与安全设备收发什么数据如何保护这些数据如何控制设备与云服务的访问5.2 设计水果质量控制系统原型假设要为加工厂构建质量检测系统果实沿传送带到达需要检测到果实后拍照、用边缘 AI 模型检查结果发送到云端存储若未熟则发出告警以便剔除。按 Things/Insights/Actions 拆解Things检测果实到达的探测器拍照并分类的摄像头运行分类器的边缘设备通知未熟果实的设备Insights决定检查果实成熟度存储成熟度分类结果判断是否需要告警Actions向设备发送「拍照并用分类器检查」的命令向设备发送「告警果实未熟」的命令原型的工作流带接近传感器的 IoT 设备检测到果实到达 → 发消息到云端 → 云端 serverless 应用向另一设备发命令拍照并分类 → 带摄像头的设备拍照、发送给边缘图像分类器结果发回云端 → 云端 serverless 应用存储数据供后续分析如统计未熟果实占比若未熟则向另一台设备发命令用 LED 告警工厂工人。 整个应用也可用单台设备实现把触发、分类、LED 控制逻辑内建IoT Hub 仅用于统计与配置本课拆分为多设备是为了演示大规模 IoT 应用的架构理念。5.3 接近传感器触发检测的时机IoT 设备需要一个「果实就位」的触发信号——一个自然的选择是测量果实与传感器之间的距离。接近传感器proximity sensor通常发射一束电磁辐射激光或红外光检测物体反射的辐射通过发射到反弹的时延计算距离。 你大概率用过接近传感器而不自知智能手机通话时贴近耳朵会自动熄屏、防止误触挂断靠的就是接近传感器。仓库中虚拟设备的距离传感器实现位于 distance_sensor.py通过 CounterFit 模拟 VL53L0X 激光测距传感器循环读取距离毫米并打印from counterfit_shims_rpi_vl53l0x.vl53l0x import VL53L0X distance_sensor VL53L0X() distance_sensor.begin() while True: distance_sensor.wait_ready() print(fDistance {distance_sensor.get_distance()} mm) time.sleep(1)Wio Terminal 的 C 版main.cpp与树莓派版distance_sensor.py实现同样的循环读数逻辑。各硬件的接线与配置见 wio-terminal-proximity.md、pi-proximity.md、virtual-device-proximity.md。5.4 提前定义消息数据结构原型中多个组件互相通信距离传感器把距离发给 IoT HubIoT Hub 向摄像头设备发拍照命令分类结果发回 IoT HubIoT Hub 向 LED 设备发未熟告警命令。动手构建前应先定义好消息结构——课程提醒几乎所有资深开发者都曾因「发送的数据与预期不符」而花费数小时甚至数周排查 bug。以温度数据为例字段命名temperaturevstemp与单位°C vs °F都必须事先约定并保持一致{ temperature: 20.7 }对质量检测器而言关键设计问题包括距离的判断在哪里做是设备自行判断「果实足够近」后通知 IoT Hub 触发分类还是持续上报距离、由 IoT Hub 决定课程给出的答案是「看情况」由 IoT Hub 决策 → 需要发送多次距离测量值消息过多 → 增加 IoT Hub 费用与设备带宽需求工厂里可能有数百万设备还可能拖慢设备由设备决策 → 需要提供配置手段以便现场微调例如不同果实触发距离不同。5.5 用开发板模拟多台 IoT 设备构建原型时需要让一块开发板扮演多台设备发遥测、响应命令树莓派/虚拟硬件单板计算机可以同时运行多个应用因此为每个「IoT 设备」创建一个 Python 文件、在不同终端会话中分别运行即可。注意有些硬件不支持多应用同时访问微控制器无法同时运行多个应用必须把多个设备逻辑写进单一应用。建议为每个 IoT 设备建一个或多个类如DistanceSensor、ClassifierCamera、LEDController各自提供setup/loop方法由主函数调用在单一位置统一处理命令并分发到对应设备类主loop中统一时序如每秒处理一次的设备用一个计数器每 10 次循环再处理另一个设备。5.6 从原型走向生产原型是最终生产系统的基础两者差异包括加固组件——使用能承受工厂噪声、高温、振动与压力的工业级硬件内部通信——部分组件直连通信、避免绕道云端只在需要存储时才把数据发往云端可通过直连或网关设备在边缘运行部分 IoT 服务可配置选项——不同工厂场景不同如接近传感器可能需要在不同距离检测不同果实触发距离不应硬编码而应通过云如device twin设备孪生动态配置自动化剔除——用自动化设备替换 LED 告警直接移除未熟果实。✅ 思考题生产设备与开发套件还有哪些其他差异六、配套资源与学习路径课程作业第一课作业见 assignment.md训练多果蔬分类器第四课作业见 4-trigger-fruit-detector/assignment.md构建完整质量检测器可视化笔记本模块四课对应 sketchnotes/lesson-15.jpg、lesson-16.jpg、lesson-17.jpg、lesson-18.jpg云资源清理若不会继续完成本项目的其余课程务必按 clean-up.md 清理云资源课后扩展深入理解容器OS 级虚拟化、边缘计算与 5G 的关系、设备孪生机制、OPC-UA工业自动化中的机器间通信协议等主题本模块全部课程由 1-train-fruit-detector、2-check-fruit-from-device、3-run-fruit-detector-edge、4-trigger-fruit-detector 四课组成所有示例代码、配置模板与训练图片均可在对应目录下找到可结合本文逐课动手复现。总结制造与加工模块演示了一条完整且可直接落地的 IoT 食品质量检测技术栈训练Custom Vision 图像分类 迁移学习→ 调用IoT 摄像头取图 REST API 分类→ 下沉紧凑模型导出为容器经 Azure IoT Edge 部署到本地→ 编排接近传感器触发 serverless 决策 LED/执行器动作。整个链路既涵盖了 ML 模型、边缘计算、容器化等通用技术原理也提供了 Python 与 Arduino 双平台的源码实现和完整的deployment.json部署清单。对希望进入智能制造、视觉质检领域的开发者来说这是从入门到实战的最佳跳板。【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。