手把手教你36小时搭建无人超市系统 !(附代码)

简介:
d546555222fb42301c58e92dd178838af884d704

无人超市,未来趋势。

上面这段视频,展示了逛亚马逊的Amazon Go无人超市是种怎样的体验。毫无疑问,一个完善的无人超市需要复杂的技术支撑。

现在,挑战来了。

你能不能在一天半的时间里,从零着手搭建出一个基本的Amazon Go无人超市系统?让客户可以体验无缝衔接的购物体验?

当然可以。

有个四人小组就在最新的一次黑客马拉松中,完成了这样一次挑战。他们只用了不到36个小时,就搞定了一切,而且还把整个教程公布了出来。

首先,得有一套文档,列出全部需要做/可以做的事情;然后就是根据文档,去分模块实现。他们给自己的“山寨”Amazon Go起名叫EZShop,由这六大模块构成:

dca341bad72d3a36322598b05416a4c1eb3a754f

EZShop的六大组件

量子位来分别介绍一下他们用到的些模块:

Kairos人脸识别API

这是EZShop的一个基本组件,能够识别、存储特定的人脸信息。EZShop用了它两个API:/enroll和/verify。

/enroll的意思是“拍张照,找到里边的脸,然后把这张脸存到你创建的相册里。”

这个小组就为顾客们创建了一个相册,也叫EZShop。顾客注册时,脸就会存到这个相册里,系统的实时数据库也会向这个顾客的注册信息返回并存储一个face_id。

当要验证顾客的照片时,就需要把它送到/verify终端那里,终端返回一个匹配可能性最高的face_id。

在实际应用中,自己用TensorFlow搭一个人脸识别应用可能比用这种API更好,但是36小时hackathon嘛,API挺好用的。

实时Firebase数据库

这也是一个非常基本的组件,整套EZShop里,所有其他的组件都得和它实时交互。Firebase支持在数据库里的任何数据上创建定制化的变化监听器,这样一个特性再加上简单的设置流程,用起来简直毫不费力。

整个计划很简单,数据库存储一组商品、一组顾客,如下面的JSON文件架构所示:

{
  "items": [
    {
      "item_id": 1,
      "item_name": "Soylent",
      "item_stock": 1,
      "price": 10
    }
  ],
  "users": [
    {
      "face_id": 1,
      "name": "Subhan Nadeem",
      "in_store": false,
      "cart": [
        1
      ]
    }
  ]
}

新顾客通过Kairos API注册之后,就会被添加到users那一组。当顾客出入时,他的in_store布尔值会更新,在商店经理和个人App界面上都有所体现。

顾客拿起商品时,items那组数据会有更新。系统能够识别出哪个顾客拿了哪件商品,商品的ID会被添加到顾客的cart栏。

经理App和顾客App

团队里的iOS开发者John只用了12小时,就写完了这两个App。

6f5527740e646458c4966877f00c29ba2b2d1a24

经理app


经理App是iPad版的,能将新用户添加到Kairos API和Firebase数据库中,也能显示店里顾客的列表和货物的库存清单。商店经理能用这个App操作Firebase数据库、查看数据库发生的变化。

这个App还能追踪店内当前的所有用户,并获取他们的姓名和照片。当用户离开时,这个系统也能实时更新店内当前用户列表。

12ac3cb1b810a853e47faf33958177d0ddd27f1f

顾客app

另一个App是供商店顾客用的。

顾客要进店,需要先上传自己的照片,注册成为可以在无人店内购物的用户。图片通过API上传到Imgur(一家国外图片分享网站),并与用户名相关联。

EZShop会根据这个照片来识别顾客。顾客进入商店之后,它们购物车的更新会立刻显示在这个App上。顾客离开商店时,手机上还会收到一条推送通知,显示着他们花了多少钱。

货架、传感器和摄像头

这些东西由Soheil和Ruslan负责,他们设计了货架,写了相关的Pi Python脚本。

货架大致长这样:

1c4c79aa69a06bbc10b33064ba947b66e49b39d7

在货架上,三件商品并排放着,中间的塔上安装监控摄像头(就是图上那个手机),两排商品后边还装有超声波传感器。超声波传感器和树莓派相连接,树莓派运行的Python脚本处理传感器与货架上物体之间的距离读数。

商品被拿起来的时候,传感器的读数就会变化,触发数据库中商品库存的更新。

塔顶上绑着的手机(摄像头)也会探测到场景的变化,还会识别拿商品的顾客。然后,这件商品会被放到顾客的虚拟购物车里。

出入口的摄像头

在商店的出口和入口,这个小组使用了Android手机作为面部识别摄像头。

两部手机被安装在一个三脚架上,分别冲着相反的方向,一个方向用来识别入店的顾客,另一个方向用来识别出店的顾客。

至于人脸检测技术,Google有一套非常棒的API,能够很好地检测出人脸。

API地址:https://developers.google.com/vision/

特别的是,这个API还能提供从相机到人脸之间的大致距离,一旦顾客的距离足够近,摄像头就会拍照并使用Kairos API进行验证,然后与Firebase数据库同步,更新顾客在店内的状态。

在客户识别之外,系统还增加了个性化的语音问候,这进一步提升了用户体验。

效果是这样的:

deb7dd7c9e9ae3ec0f9b9cb9d973c31a95cc1da0

一旦顾客离开商店,Android应用程序将会检测顾客购买了什么商品,并计算消费总额,并通过Firebase云消息向顾客的个人App推送账单明细。

总结

在36个小时的黑客马拉松中,这个项目的团队大概只睡了6个小时,期间克服了许许多多的障碍,也有一些还未解决的问题。

他们的努力也没有白费,这个项目最后夺得了第一名。

有上百人进入了这个快速搭建的无人超市,拿起商品,然后离店,随即完成结算并获得账单。整个过程中不需要收银员、不需要排队……

这个项目是开源的,想自己动手玩一下的话……


原文发布时间为:2018-01-13

本文作者:夏乙 问耕

本文来自云栖社区合作伙伴“数据派THU”,了解相关信息可以关注“x”微信公众号

相关文章
|
监控 安全 物联网
什么是UWB定位技术?UWB定位的应用场景及功能介绍
uwb定位技术全称Ultra Wide Band,超宽带技术。uwb超宽带技术是一种全新的通信技术,与传统通信技术有极大差异。它不需要使用传统通信体制中的载波,而是通过发送和接收极窄脉冲来实现无线传输,由于脉冲时间宽度极窄,使用的带宽在500MHz以上。 后来,由于uwb定位技术穿透力强、功耗低、安全性高、定位精度高等优势,人们意识到了它在高精度定位领域的价值,uwb在工业定位领域的应用逐渐成为主流。
3031 0
|
容器 微服务 Kubernetes
带你读《Istio入门与实战》之一:服务网格与Istio
本书系统化介绍Istio技术要点与应用技巧,可帮助读者快速搭建微服务架构并进行管理。主要内容包括:service mesh基本概念与使用,Istio架构设计与主要功能,快速搭建一个微服务实验,介绍如何让服务流量控制更简单,让服务更具弹性,让服务故障测试更容易,让服务通信更安全可控,让服务更易观测与监控,以及istio维护方案。本书内容丰富、案例讲解,实用性强,非常适合入门级读者快速掌握Istio技术。
|
JavaScript
vue 不同环境的baseurl配置
1.不管讲多少遍,对这个不同的环境中 baseURL的配置还是很懵 2.今天在单独开篇文章写下吧 3.vue-cli 模式环境变量 官方说明 4.process 说明 5.最新脚手架 vue/clie 4x
1027 0
vue 不同环境的baseurl配置
|
JSON 开发框架 前端开发
【前端开发选择】提醒设计决策:弹窗与Toast通知,哪个更适合?
本文讨论了前端开发中弹窗与Toast通知的选择,通过实际案例比较了两者在用户体验上的差异,并分享了如何使用Toast通知在当前页面提供更友好的交互反馈。
450 2
【前端开发选择】提醒设计决策:弹窗与Toast通知,哪个更适合?
|
机器学习/深度学习 人工智能 自然语言处理
《解码AI大模型涌现能力:从量变到质变的智能跃迁》
人工智能大模型的涌现能力是当今科技的焦点。其产生依赖于四大关键因素:1) 海量数据提供丰富的训练素材,涵盖多样化的文本和图像;2) 强大算力如GPU、TPU加速模型训练,突破性能瓶颈;3) 精妙架构如Transformer引入自注意力机制,提升语义理解;4) 过参数化与优化策略使模型不断进化,展现未曾预设的能力。这些因素协同作用,推动大模型在复杂任务中表现出色,为未来带来更多可能。
1034 11
|
缓存 监控 网络协议
中间人攻击之ARP欺骗
【8月更文挑战第13天】
793 1
|
数据采集 自然语言处理 算法
实战RAG:构建基于检索增强的问答系统
【10月更文挑战第21天】在当今大数据时代,如何高效地从海量信息中获取所需知识,成为一个亟待解决的问题。检索增强的生成模型(Retrieval-Augmented Generation, RAG)应运而生,它结合了检索技术和生成模型的优点,旨在提高生成模型的回答质量和准确性。作为一名热衷于自然语言处理(NLP)领域的开发者,我有幸在多个项目中应用了RAG技术,并取得了不错的成效。本文将从我个人的实际经验出发,详细介绍如何使用RAG技术来构建一个问答系统,希望能够帮助那些已经对RAG有一定了解并希望将其应用于实际项目中的开发者们。
1165 1
|
安全 Java Maven
如何使用jsoup实现网站登录,cookie保存,查询信息
【6月更文挑战第11天】如何使用jsoup实现网站登录,cookie保存,查询信息
614 1
|
JavaScript Java 测试技术
基于springboot+vue.js的无人超市管理系统附带文章和源代码设计说明文档ppt
基于springboot+vue.js的无人超市管理系统附带文章和源代码设计说明文档ppt
365 0
|
新零售 人工智能 监控
无人便利店和自动售货机
无人便利店和自动售货机
787 5

热门文章

最新文章

下一篇
开通oss服务