36小時,造一個亞馬遜無人商店
無人超市,未來趨勢。
上面這段視訊,展示了逛亞馬遜的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
∑編輯 | Gemini
本文轉載自「量子位」
演算法數學之美微信公眾號歡迎賜稿
稿件涉及數學、物理、演算法、計算機、程式設計等相關領域
稿件一經採用,我們將奉上稿酬。
投稿郵箱:math_alg@163.com
相關文章
- 手把手教你36小時搭建無人超市系統 !(附程式碼)
- 怎麼讓一天有36個小時(譯)
- 亞馬遜AWS當機十小時,這次是人為原因亞馬遜
- 武漢遊戲人的350個小時遊戲
- 花了半個小時基於 ChatGPT 搭建了一個微信機器人ChatGPT機器人
- 一個定時小軟體
- 一個同時支援移動端與小程式的聊天機器人機器人
- 從零開始造一個“智障”聊天機器人機器人
- 快餐業的噩夢?機器人一個小時可做150個漢堡機器人
- [轉] 一個小時學會GitGit
- 每天定時生成awr,每小時一個awr
- 一個小時搭建一個全棧 Web 應用框架全棧Web框架
- 亞馬遜歐洲站TOP賣家36%來自中國亞馬遜
- 半小時擼一個抽獎程式
- 熊貓燒香製造者李俊:5個小時完成專殺軟體
- 一個位元組都得省的年代,人們是如何創造遊戲人聲的?遊戲
- 此時此刻,兩個Claude智慧體正在無休止對話,無人干預智慧體
- 小鎮,流逝的時光,人
- 自己造一個ReactDOMReact
- 一個HashMap能跟面試官扯上半個小時HashMap面試
- 一個屌絲程式猿的人生(36)
- 敲程式碼時的一個小疑問
- linux date 昨天 _取前一個小時Linux
- 亞馬遜1300個IP地址被劫持2個小時用於竊取數字貨幣亞馬遜
- 搭建個人直播間,實現24小時B站、鬥魚、虎牙等無人直播!
- TinyCo:亞馬遜應用商店盈利能力強於蘋果谷歌亞馬遜蘋果谷歌
- 造一個「輪子」musionUIUI
- 又花了半個小時將 ChatGPT 接入了釘釘機器人ChatGPT機器人
- 每天一個 Linux 命令(36): diff 命令Linux
- 每天一個linux命令(36):diff 命令Linux
- 歷時一個月!又完成一個全棧開發的小程式!全棧
- 微信公號 DIY:一小時搭建微信聊天機器人機器人
- 一個小時內學習SQLite資料庫SQLite資料庫
- 使用sql*plus時的一個安全小問題SQL
- 跟著 AI 一個小時學會 PythonAIPython
- 全球第一個機器人配送站來了,無人配送真的可行嗎?機器人
- 一個Python小白5個小時爬蟲經歷 【續】Python爬蟲
- 一個小廠前端 Leader 如何篩選候選人?前端