ESH系列04丨预防损失检测的实时传感器融合用例

全文字数1236,预计阅读5min

一、用例介绍

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

二、用到的技术

EdgeX Foundry

VAS (全称video-analytics-serving)

Docker

Docker Compose

三、安装环境

  • 硬件要求: 英特尔处理器
  • 系统要求: Ubuntu18.04 LTS
  • 完成时间: about 1h
  • 使用语言: golang1.12及以上
  • 可选(传感器):

    销售点混合扫描仪或秤

    条形码扫描仪

    销售点装袋秤

    四个USB摄像机

    RFID垫

    触摸显示屏

四、工作原理

传感器融合,也称为篮子调节,是检测系统关键部分。它的工作原理如下:

1.传感器设备触发事件,例如检测 RFID 标记或食物类型。

2.EdgeX 框架通过微服务将事件作为事件消息发布到主要应用程序,将信息组装到与检测到的产品关联的事件。

3.然后对数据进行查询,以确保与正在购买的数据相匹配。无法查询的对象可能表示可疑购买。销售点系统与 EdgeX REST 或 MQTT 设备服务是集成的,可以将事件发送给主应用。提供的 Scaled Devices Service 专门用于 CAS USB 秤。或者,我们也可以将销售点装袋秤的事件发送给 EdgeX REST 或 MQTT 设备服务。

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

20210607155940

五、安装步骤

1.下载

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

20210607162812

2.安装

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

sudo ./edgesoftware install

20210607172412

安装完成

2021-06-0711-31-06

六、运行

1.进入应用目录

2021-06-0711-33-44

2.build

sudo make docker

2021-06-07-11-34-54

注意

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

Snipaste_2021-06-16_10-17-55

build完成

2021-06-07-12-11-28

检查一下镜像是否build成功

sudo docker images

2021-06-07-13-29-55

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

sudo make run-base

2021-06-0713-30-26

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

2021-06-0713-33-08

查看Docker images build成功的状态

2021-06-0713-34-32

七、模拟数据,使用应用

这里我们通过使用Intel提供的事件模拟器和postman来模拟数据。

1.打开 Docker 日志,连接事件协调器,这样可确保正确处理结帐事件。如果命令是成功的,可以看到下图显示。

sudo docker logs -f event-reconciler

2021-06-0713-36-51

2.安装postman

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

2021-06-0714-01-35

解压并启动

2021-06-07-14-02-29

打开postman

2021-06-0714-02-57

3.新建连接

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

20210610135738

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
}

如下图所示

2021-06-0714-10-18

请求发送后,看到返回状态2001,说明操作成功

2021-06-07-14-11-11

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
}

如下图所示

2021-06-0714-40-38

请求发送后,看到返回状态2001,说明操作成功

2021-06-0714-44-49

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
}

如下图所示

20210610133954

请求发送后,看到返回状态2001,说明操作成功

20210610134025

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":15736013960000
}

如下图所示

20210610134204

请求发送后,看到返回状态2001,说明操作成功

20210610134310

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
}

如下图所示

20210610134418

请求发送后,看到返回状态2001,说明操作成功

20210610134440

Q&A:

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文件进去。

2021-06-1522-33-54

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

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

3.运行应用提示address already in use怎么解决?

20210608144651

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

sudo netstat -tulpn | grep <address in use>
sudo kill -9 <PID of the process>

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

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

sudo lsof -i -P -n | grep <port number>
sudo kill -9 <process id>

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

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

sudo netstat -tulpn | grep <address in use>
sudo kill -9 <PID of the process>

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

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

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

nmcli dev show | grep 'IP4.DNS'

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

{
    "dns": ["<dns-server-from-above-command>"]
}

然后重启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