手把手教你36小时搭建无人超市系统 !(附代码)
来源:QbitAI
编译:夏乙 问耕
本文经AI新媒体量子位(公众号ID:qbitai )授权转载,转载请联系出处
本文共1635字,建议阅读5分钟。
本文手把手教大家用代码工具搭建亚马逊无人商店。
无人超市,未来趋势。
上面这段视频,展示了逛亚马逊的Amazon Go无人超市是种怎样的体验。毫无疑问,一个完善的无人超市需要复杂的技术支撑。
现在,挑战来了。
你能不能在一天半的时间里,从零着手搭建出一个基本的Amazon Go无人超市系统?让客户可以体验无缝衔接的购物体验?
当然可以。
有个四人小组就在最新的一次黑客马拉松中,完成了这样一次挑战。他们只用了不到36个小时,就搞定了一切,而且还把整个教程公布了出来。
首先,得有一套文档,列出全部需要做/可以做的事情;然后就是根据文档,去分模块实现。他们给自己的“山寨”Amazon Go起名叫EZShop,由这六大模块构成:
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。
经理app
经理App是iPad版的,能将新用户添加到Kairos API和Firebase数据库中,也能显示店里顾客的列表和货物的库存清单。商店经理能用这个App操作Firebase数据库、查看数据库发生的变化。
这个App还能追踪店内当前的所有用户,并获取他们的姓名和照片。当用户离开时,这个系统也能实时更新店内当前用户列表。
顾客app
另一个App是供商店顾客用的。
顾客要进店,需要先上传自己的照片,注册成为可以在无人店内购物的用户。图片通过API上传到Imgur(一家国外图片分享网站),并与用户名相关联。
EZShop会根据这个照片来识别顾客。顾客进入商店之后,它们购物车的更新会立刻显示在这个App上。顾客离开商店时,手机上还会收到一条推送通知,显示着他们花了多少钱。
货架、传感器和摄像头
这些东西由Soheil和Ruslan负责,他们设计了货架,写了相关的Pi Python脚本。
货架大致长这样:
在货架上,三件商品并排放着,中间的塔上安装监控摄像头(就是图上那个手机),两排商品后边还装有超声波传感器。超声波传感器和树莓派相连接,树莓派运行的Python脚本处理传感器与货架上物体之间的距离读数。
商品被拿起来的时候,传感器的读数就会变化,触发数据库中商品库存的更新。
塔顶上绑着的手机(摄像头)也会探测到场景的变化,还会识别拿商品的顾客。然后,这件商品会被放到顾客的虚拟购物车里。
出入口的摄像头
在商店的出口和入口,这个小组使用了Android手机作为面部识别摄像头。
两部手机被安装在一个三脚架上,分别冲着相反的方向,一个方向用来识别入店的顾客,另一个方向用来识别出店的顾客。
至于人脸检测技术,Google有一套非常棒的API,能够很好地检测出人脸。
API地址:https://developers.google.com/vision/
特别的是,这个API还能提供从相机到人脸之间的大致距离,一旦顾客的距离足够近,摄像头就会拍照并使用Kairos API进行验证,然后与Firebase数据库同步,更新顾客在店内的状态。
在客户识别之外,系统还增加了个性化的语音问候,这进一步提升了用户体验。
效果是这样的:
一旦顾客离开商店,Android应用程序将会检测顾客购买了什么商品,并计算消费总额,并通过Firebase云消息向顾客的个人App推送账单明细。
总结
在36个小时的黑客马拉松中,这个项目的团队大概只睡了6个小时,期间克服了许许多多的障碍,也有一些还未解决的问题。
他们的努力也没有白费,这个项目最后夺得了第一名。
有上百人进入了这个快速搭建的无人超市,拿起商品,然后离店,随即完成结算并获得账单。整个过程中不需要收银员、不需要排队……
这个项目是开源的,想自己动手玩一下的话……
GitHub地址在此:https://github.com/subhan-nadeem/EZShop
原文地址:https://www.docdroid.net/file/download/Dh4A6aQ/amazon-go-implementation.pdf
手把手教你36小时搭建无人超市系统 !(附代码)相关推荐
- python代码示例图形-纯干货:手把手教你用Python做数据可视化(附代码)
原标题:纯干货:手把手教你用Python做数据可视化(附代码) 导读:制作提供信息的可视化(有时称为绘图)是数据分析中的最重要任务之一.可视化可能是探索过程的一部分,例如,帮助识别异常值或所需的数据转 ...
- python画图代码大全-纯干货:手把手教你用Python做数据可视化(附代码)
原标题:纯干货:手把手教你用Python做数据可视化(附代码) 导读:制作提供信息的可视化(有时称为绘图)是数据分析中的最重要任务之一.可视化可能是探索过程的一部分,例如,帮助识别异常值或所需的数据转 ...
- 手把手教你使用Dygraphs可视化时间序列数据(附代码、链接)
作者:Margo Schaedel 翻译:张一豪 校对:丁楠雅 本文约1200字,建议阅读5分钟. 本文将介绍如何使用JavaScript的图形库Dygraphs来动态地可视化存储在InfluxDB( ...
- 傻瓜教程:手把手教你解决多个应用实例(附代码、手绘图)
来源:大数据文摘 本文约20000字,建议阅读18分钟. 长文预警!本文从七桥问题引入,将会讲到图论在Airbnb房屋查询.推特推送更新时间.Netflix和亚马逊影片/商品个性化推荐.Uber寻找最 ...
- iir数字滤波器_手把手教系列之一阶数字滤波器设计实现(附代码)
[导读] 前面分享了 IIR/FIR/mean/梳状数字滤波器的具体设计实现,这几种使用起来或许觉得计算量大,相对复杂.实际工程应用中通常有必要过滤来自传感器或音频流的数据,以抑制不必要的噪声.有的应 ...
- 独家 | 手把手教你组织数据科学项目!(附代码)
作者:kdnuggets 翻译:和中华 校对:丁楠雅 本文约4200字,建议阅读10分钟. 本文介绍了一个工具可以帮助迅速构建一个标准但灵活的数据科学项目结构,便于实施和分享数据科学工作. 由Driv ...
- 手把手教你安装深度学习软件环境(附代码)
来源:机器之心 本文长度为2800字,建议阅读5分钟. 本文向你解释如何在一台新装的 Ubuntu 机器上安装 Python 和 Nvidia 硬件驱动.各类库和软件包. 为了进行强化学习研究,我最近 ...
- 手把手教你使用 VuePress 搭建个人博客
手把手教你使用 VuePress 搭建个人博客 有阅读障碍的同学,可以跳过第一至四节,下载我写好的工具包: git clone https://github.com/zhangyunchencc/vu ...
- 方言听不懂,手把手教你用 Milvus 搭建方言翻译器!
坐在上海的公交车上,我有时会遇到这样的烦恼:稍一分神,没能听见普通话报站,支棱起耳朵,却听不懂沪语报站.为了解决这个问题,我决定--学习沪语?No, 作为一名数据工程师,我索性搭建了一个方言翻译器,帮 ...
最新文章
- Codeigniter文件上传类型不匹配错误
- 厉害了!写代码、搜问题,全部都在「终端」完成!如此编程神器,是时候入手了...
- linux路由命令大全,常用Linux路由命令
- 嵌入式开发之hi3519---PCIE DMA
- python知识:opencv下的轮廓和区域
- python列表多重赋值
- mastercam2017安装教程
- axios02-其他使用方式(推荐)
- matlab中blur函数_游戏中的PostProcessing(后处理)
- 《恋上数据结构第1季》单向链表、双向链表
- PRML笔记:模式识别与机器学习
- 类中的__init__()
- Web安全防御从WAF到应用网关
- dw php获取当前时间,tp5时间戳转日期的方法
- 吐血整理!跳槽字节跳动涨薪
- 已知三角形的三个点坐标,求三角形的面积
- xlwings对excle文档设置条件格式
- python入门教程陈孟林_Python基础教程学习路线
- Python之读取MongoDB导出的BSON文件
- nds运行java_NDS看漫画软件 Comic Book DS 1.0 正式版!
热门文章
- EXCEL 电子表格MID 返回值 不能用于计算的问题
- 线程安全操作HashMap
- 验证码识别,发票编号识别(转)
- Vbox在Linux 5上安装Oracle 11gR2 RAC
- Winform分页控件之纯分页显示处理
- dos2unix install on mac_mac2019新品唇釉来啦!MAC有色唇油试色
- 2021年4月22日 阿里供应链Java开发实习面试(三面)(含总结)
- 高通创投在中国区的投资重点,目前主要聚焦在AI+5G、XR+5G、机器人/自动驾驶+5G、物联网+5G四个方面。
- Python中判断字典的键或值在不在字典中 默认是判断的依据是条目在不在字典的键集合中
- 费曼学习法与孔子温故知新学习法为两大重要学习法,前者外向表现,后者内省提升