手把手教你36小時搭建無人超市系統 !(附程式碼)

資料派THU發表於2018-01-13

來源: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

相關文章