Scancam 使用 ML.NET 防止燃料被盗
Scancam 是一家防损公司。他们的主要产品之一是反燃油盗窃解决方案,该解决方案迎合燃油零售商的需求,并为预防和管理燃油盗窃提供端到端解决方案 (包括债务回收)。
业务问题
燃料盗窃每年给澳大利亚燃料零售业造成数百万澳元的损失。在澳大利亚的加油站,顾客先把油箱加满,然后付款。一些司机未付燃油费就开车走了,一些司机则忘记带钱包,或者没有足够的钱支付刚刚加油产生的油费。这些驾车离去和没有足够金额付款的行为,给燃油零售商造成了数千澳元的损失。
Scancam 的解决方案使用车牌识别技术检测油站油泵上的车辆,并为已知违规者(在其网络中任何油站欠费人员)提供警报。它还包括用于报告燃油盗窃、自动事件录像生成、在线付款和债务追偿的设施。
为什么选择 ML.NET?
Scancam 主要是 .NET 商店。在 ML.NET 之前,该公司在运行 Python 代码的独立 Docker 容器上运行对象检测。当自定义视觉添加了对象检查模型的导出后,Scancam 移植到 ML.NET,这让该公司能够在相同代码库中,将机器学习组件作为其应用程序进行托管。
Scancam 运行从现场最小的边缘设备到云的 C# 代码。他们可以在其解决方案的任何组件上使用同一种熟悉的 C# 语言和工具,且可以轻松地将代码从云移动到边缘,或执行相反操作(例如,从 Azure Functions 到在 ARM32 设备上运行的 ASP.NET Core 容器图像)。
ML.NET 的影响
ML.NET 使 Scancam 能够灵活地轻松移动代码的执行位置,即在边缘设备、移动设备或云上。所生成的 ML.NET 对象检测功能将 Scancam 的带宽要求降低了多达 35%,从而降低了其云计算要求,而异常情况检测组件将主动监视数百台设备。
ML.NET 允许我们使用用于其他所有内容的相同语言和工具来对 ML 组件进行编码,从而提高生产力。ML.NET 为我们的 .NET 开发者提供了最简单的跳点,便于开始将机器学习集成进我们的应用程序。”
鉴于从检测到车辆的那一刻到驾驶者开始加油的可用时间段有限(5-7 秒),ML.NET 允许 Scancam 在其处理管道中添加物体检测,对性能几乎没有任何影响,预测平均需要约 300 毫秒。
解决方案体系结构
Scancam 技术堆栈由 ML.NET、ASP.NET Core、iOS 上的 Xamarin 以及 Azure (应用服务、Azure Functions、Azure 服务总线、Azure 存储、Azure Cosmos DB、SignalR、Azure SQL 数据库)组成。
当车辆驱动器到燃料泵时,相机将触发事件到在 Docker 上 ASP.NET Core 上运行的 HTTP 终结点。然后,使用ML.NET 首先检测车辆的存在,然后检测相应车辆上是否有车牌。然后,他们使用单独的车牌识别技术扫描车牌号和字母,并将扫描到的数据交给 Azure 函数以触发其余的基于 Azure 的云处理管道,包括与已知违规者的数据库交叉检查车牌,并将检测到的车牌通过 SignalR 广播到 iPad 和电视显示器。
客户端应用程序
主最终用户应用程序是一个 Xamarin 应用,由加油站助理在 iPad 上使用。此应用显示在每个泵上检测到的所有车牌,如果某个许可证盘位于已知违规人员数据库中,则会显示警报。这允许控制台操作员阻止分配油料,并要求客户在启用油泵之前预付油费。
物体检测
Scancam 使用的大多数相机都依赖于运动检测来检测进出油泵区域的车辆。他们每天从数百个摄像头获取数十万个事件。考虑到油站的繁忙程度,Scancam 可能会获得大量误报。这些误报会导致花时间处理不必要的事件以进行许可证板认证,进而消耗大量加油站中有限的 Internet 带宽。
为减少需要发送到云处理的事件数量,Scancam 使用 Azure 自定义视觉训练物体检测模型,用于检测车辆的存在和图像中牌照区域的可见性,并以 ONNX 格式导出该模型。然后,他们使用边缘设备上的 ML.NET 对模型进行使用,以预处理相机事件,然后再发送到云端进一步处理。
异常情况检测
Scancam 还在实施 ML.NET 进行异常检测,以检测相机事件中的峰值(例如,不正确的运动触发器区域、触发器阈值过低)和 dip(例如,相机已偏离位置、被遮挡、曝光设置不正确),作为监控相机安装健康状况的一部分。此类检测允许 Scancam 轻松查明数百个相机的潜在问题,而无需手动搜索日志。
图像分类
Scancam 还计划在其 ML.NET 解决方案中添加车辆品牌和车型识别。
准备好开始使用了吗?
分步教程将帮助你在计算机上运行 ML.NET。