> 文档中心 > 基于多传感器融合与EdgeX中间件实现零售自动结账场景的损失预防

基于多传感器融合与EdgeX中间件实现零售自动结账场景的损失预防

预防损失检测的实时传感器融合用例

Part 1 用例介绍
该用例借助实时传感器融合实现预防损失检测,可在自助结账时部署传感器融合技术,实现预防损失的检测,得到无缝的操作体验。使用机器学习连接不同的传感器,如销售点系统、重量秤传感器、摄像头和 RFID,以准确检测结账项目。

Part 2 使用技术

  • EdgeX Foundry

  • VAS (全称video-analytics-serving)

  • Docker

  • Docker Compose

Part 3 安装环境

  • 硬件要求:英特尔处理器

  • 系统要求:Ubuntu18.04 LTS

  • 完成时间:1h 左右

  • 使用语言:golang1.12及以上

  • 可选(传感器):

    销售点混合扫描仪或秤

    条形码

    扫描仪

    销售点装袋秤

    四个USB摄像机

    RFID垫

    触摸显示屏

Part 4 工作原理

传感器融合,也称为篮子调节,是检测系统关键部分。

它的工作原理如下:
1.传感器设备触发事件,例如检测 RFID 标记或食物类型。
2.EdgeX 框架通过微服务将事件作为事件消息发布到主要应用程序,将信息组装到与检测到的产品关联的事件。
3.然后对数据进行查询,以确保与正在购买的数据相匹配。无法查询的对象可能表示可疑购买。销售点系统与 EdgeX REST 或 MQTT 设备服务是集成的,可以将事件发送给主应用。提供的 Scaled Devices Service 专门用于 CAS USB 秤。或者,我们也可以将销售点装袋秤的事件发送给 EdgeX REST 或 MQTT 设备服务。

下图显示了该用例所使用的传感器和服务,以及它们是如何通过 EdgeX 进行通信的。
在这里插入图片描述

Part 5 安装步骤

  1. 下载

我们在 ESH 官网上点击 Use Cases 选项,找到该用例并点击,页面跳转后点击下载,记得保存key。

在这里插入图片描述

  1. 安装

解压完成后,执行安装。使用国内网络环境安装的时候,配置pip和apt的国内源可以加速下载,节省安装时间。

1 sudo ./edgesoftware install

在这里插入图片描述

安装完成

在这里插入图片描述

Part 6 运行应用
1.进入应用目录

在这里插入图片描述

2.build

1 sudo make docker

在这里插入图片描述

注意如果这一步如下图报错,请参考文末的 Q&A 2 解决。

在这里插入图片描述

build 完成

在这里插入图片描述

检查一下镜像是否build成功

1 sudo docker images

在这里插入图片描述

3.运行 Docker Compose 以启动 EdgeX 设备服务和预防损失检测服务。

1 sudo make run-base

在这里插入图片描述

服务成功启动后,显示如下图

在这里插入图片描述

查看Docker images build成功的状态。
在这里插入图片描述

Part 7 模拟数据,使用应用
这里我们通过使用Intel提供的事件模拟器和 Postman 来模拟数据。

1.打开 Docker 日志,连接事件协调器。

这样可确保正确处理结帐事件。如果命令是成功的,可以看到下图显示。

sudo docker logs -f event-reconciler

在这里插入图片描述

2.安装 Postman

Postman 是一个用于 API 开发的协作平台,我们用它来发送模拟数据的 RestAPI 请求。在浏览器搜索 Postman 并进入官网,找到 ubuntu64位 版本点击下载。

在这里插入图片描述

解压并启动

在这里插入图片描述

打开 Postman

在这里插入图片描述

3.新建连接

使用GET方式访问url http://localhost:49986/api/v1/ping, 点击 send 按钮,如果返回下图所示的1.1.1和状态200,说明访问成功。
在这里插入图片描述

4.发起交易

发送一个 POST 请求,url为 http://localhost:49986/api/v1/resource/device-pos-rest/basket-open 选择 raw body ,在 Text 下面,填入 Json 数据。

{    "lane_id":"1",    "basket_id": "abc-012345-def",    "customer_id": "joe5",    "employee_id": "mary1",  "event_time":15736013930000}

如图所示
在这里插入图片描述

请求发送后,看到返回状态200和1,说明操作成功。
在这里插入图片描述

5.扫描件

发送一个POST请求,url为http://localhost:49986/api/v1/resource/device-pos-rest/scanned-item 选择 raw body ,在 Text 下面,填入 Json 数据。

{    "lane_id":"1",    "basket_id": "abc-012345-def",    "product_id": "00000000571111",    "product_id_type": "UPC",    "product_name": "Trail Mix",    "quantity": 1,    "quantity_unit": "EA",    "unit_price": 5.99,    "customer_id": "joe5",  "employee_id": "mary1", "event_time":15736013940000}  

如图所示
在这里插入图片描述

请求发送后,看到返回状态200和1,说明操作成功。

在这里插入图片描述

6.准备付款

发送一个POST请求,url为 http://localhost:49986/api/v1/resource/device-pos-rest/payment-start 选择 raw body ,在 Text 下面,填入 Json 数据。

{    "lane_id":"1",    "basket_id": "abc-012345-def",    "customer_id": "joe5",    "employee_id": "mary1",   "event_time":15736013950000}

如下图所示

在这里插入图片描述

请求发送后,看到返回状态200和1,说明操作成功。
在这里插入图片描述

7.支付成功

发送一个POST请求,url为http://localhost:49986/api/v1/resource/device-pos-rest/payment-success 选择 raw body ,在 Text 下面,填入 Json 数据。

{    "lane_id":"1",    "basket_id": "abc-012345-def",    "customer_id": "joe5",    "employee_id": "mary1",  "event_time":15736013930000}

如图所示

在这里插入图片描述

请求发送后,看到返回状态200和1,说明操作成功。

在这里插入图片描述

8.关闭交易

发送一个POST请求,url http://localhost:49986/api/v1/resource/device-pos-rest/basket-close 选择 raw body ,在 Text 下面,填入 Json 数据。

{    "lane_id":"1",    "basket_id": "abc-012345-def",    "customer_id": "joe5",    "employee_id": "mary1",    "event_time":15736013970000}

如下图所示
在这里插入图片描述

请求发送后,看到返回状态200和1,说明操作成功。

在这里插入图片描述

提问Qustions&解答Answers

1.安装过程中遇到失败应该怎么解决?

可以停止并删除所有 Docker containers,也可以删除所有的 Docker images。

sudo docker stop $(sudo docker ps -aq) sudo docker rm $(sudo docker ps -aq) sudo docker rmi -f $(sudo docker images -aq)

2.如果执行 sudo make docker 报错 ‘go mod download timeout’ 怎么办?

可以进入下图的路径,打一个diff文件进去。
在这里插入图片描述

补丁文件获取地址:https://pan.baidu.com/s/1b9OXcNcGxY97rCvVgi_PRA

提取码:W5T2

然后我们再次执行 sudo make docker 命令,就可以顺利build成功了。

3.运行应用提示address already in use,怎么解决?
在这里插入图片描述

我们可以用所需地址获取进程的 PID,并使用以下命令强制停止它们。

sudo netstat -tulpn | grep 
sudo kill -9

4.如果 MQTT 提示 address already in use,怎么解决?

如果收到地址已在使用错误,可以使用所需地址获取进程的 PID,并使用以下命令强制停止它们:

sudo lsof -i -P -n | grep sudo kill -9 

5.访问url时候响应状态为404,应该怎么解决?

首先使用所需地址获取进程的 PID,并使用以下命令强制停止它们:

sudo netstat -tulpn | grep 
sudo kill -9

然后我们可以用命令 make down 来停止,然后再次执行 sudo make run-base 来启动应用。

6.Docker images build 失败怎么解决?

首先通过下面命令获取 DNS server:

nmcli dev show | grep 'IP4.DNS'

配置 Docker 服务,在 /etc/docker/daemon.json 文件中粘贴下面的代码。

{    "dns": [""] }

然后重启 Docker 服务

sudo systemctl daemon-reload && sudo systemctl restart docker

附用例网址:

https://software.intel.com/content/www/us/en/develop/articles/real-time-sensor-fusion-for-loss-detection.html

更多的基于OpenVINO的智能边缘软件资源与视频教程,也欢迎您访问英特尔®边缘软件中心获取。

书本网