全文字数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 进行通信的。
五、安装步骤
1.下载
我们在ESH官网上点击Use Cases
选项,找到该用例并点击,页面跳转后点击下载,记得保存key
2.安装
解压完成后,执行安装。使用国内网络环境安装的时候,配置pip和apt的国内源可以加速下载,节省安装时间。
sudo ./edgesoftware install
安装完成
六、运行
1.进入应用目录
2.build
sudo make docker
注意
如果这一步如下图报错,请参考文末的Q&A 2
解决。
build完成
检查一下镜像是否build成功
sudo docker images
3.运行 Docker Compose 以启动 EdgeX 设备服务和预防损失检测服务。
sudo make run-base
服务成功启动后,显示如下图
查看Docker images build成功的状态
七、模拟数据,使用应用
这里我们通过使用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":15736013960000
}
如下图所示
请求发送后,看到返回状态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
,说明操作成功
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文件进去。
补丁文件获取地址:https://pan.baidu.com/s/1b9OXcNcGxY97rCvVgi_PRA 提取码:W5T2
然后我们再次执行sudo make docker
命令,就可以顺利build成功了。
3.运行应用提示
address already in use
怎么解决?
我们可以用所需地址获取进程的 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