36小時,造一個亞馬遜無人商店

演算法與數學之美發表於2018-02-04

無人超市,未來趨勢。

上面這段視訊,展示了逛亞馬遜的Amazon Go無人超市是種怎樣的體驗。毫無疑問,一個完善的無人超市需要複雜的技術支撐。

現在,挑戰來了。

你能不能在一天半的時間裡,從零著手搭建出一個基本的Amazon Go無人超市系統?讓客戶可以體驗無縫銜接的購物體驗?

當然可以。

有個四人小組就在最新的一次黑客馬拉松中,完成了這樣一次挑戰。他們只用了不到36個小時,就搞定了一切,而且還把整個教程公佈了出來。

首先,得有一套文件,列出全部需要做/可以做的事情;然後就是根據文件,去分模組實現。他們給自己的“山寨”Amazon Go起名叫EZShop,由這六大模組構成:

640?wxfrom=5&wx_lazy=1

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。

640?

經理App

經理App是iPad版的,能將新使用者新增到Kairos API和Firebase資料庫中,也能顯示店裡顧客的列表和貨物的庫存清單。商店經理能用這個App操作Firebase資料庫、檢視資料庫發生的變化。

這個App還能追蹤店內當前的所有使用者,並獲取他們的姓名和照片。當使用者離開時,這個系統也能實時更新店內當前使用者列表。


640?

顧客App

另一個App是供商店顧客用的。

顧客要進店,需要先上傳自己的照片,註冊成為可以在無人店內購物的使用者。圖片通過API上傳到Imgur(一家國外圖片分享網站),並與使用者名稱相關聯。

EZShop會根據這個照片來識別顧客。顧客進入商店之後,它們購物車的更新會立刻顯示在這個App上。顧客離開商店時,手機上還會收到一條推送通知,顯示著他們花了多少錢。


貨架、感測器和攝像頭

這些東西由Soheil和Ruslan負責,他們設計了貨架,寫了相關的Pi Python指令碼。

貨架大致長這樣:

640?

貨架

在貨架上,三件商品並排放著,中間的塔上安裝監控攝像頭(就是圖上那個手機),兩排商品後邊還裝有超聲波感測器。超聲波感測器和樹莓派相連線,樹莓派執行的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

∑編輯 | Gemini

本文轉載自「量子位」

640?wx_fmt=gif

演算法數學之美微信公眾號歡迎賜稿

稿件涉及數學、物理、演算法、計算機、程式設計等相關領域
稿件一經採用,我們將奉上稿酬。

投稿郵箱:math_alg@163.com


相關文章