MakeNTU2020
===
# 隊伍資訊
隊名: NCTU Nexus Attack
## 個人資訊
姓名:沈昌賢
學校:交通大學
系所:數據所
年級:碩一
email:124357689a@gmail.com
專長:python、C++、物聯網、
作品:平衡車:arduino做為主要模組,並用陀螺儀去判定機身角度,以arduino植入演算法控制機身平衡
影像真實風格化:將影像、影片以不同風格做上色,並保留原本的真實性,做realistic style transfer
飲食:葷
衣服尺寸:M
姓名: 林哲宇
學校: 交通大學
系所: 資工
年級: 大四
Email: zezectf@gmail.com
專長: python, C/C++, html/css/js, 資安, 物聯網, AI
做過的 project: https://hackmd.io/k3m15v2AShqK6ZHBzUyhtg?view
飲食: 葷
衣服尺寸: M
姓名: 林孟賢
學校: 交通大學
系所: 數據所
年級: 碩一
Email: lemonsien@gmail.com
專長: python, C/C++, AI, 區塊鏈
做過的 project: 無人機定位, 在無人機丟失GPS訊號時,根據無人機的空拍影像與預先輸入的地圖比對,得出無人機的GPS
飲食: 葷
衣服尺寸: L
姓名: 游哲維
學校: 交通大學
系所: 電機資訊學士班
年級: 大四
Email: stevenyu.supreme@gmail.com
專長: python, C/C++, AI, OpenGL, Fintech
做過的 project: 股票交易程式,根據過往的股價預測未來的股價,並判斷最佳的買入與賣出時機
飲食: 葷
衣服尺寸: L
# 2020 MakeNTU InnOvaTion 報名企劃書
## 作品名稱
用餐進度管控系統
## 作品概念 (200字內)
由於目前西式餐廳在進行上菜動作前,都需要由服務生巡查客人的用餐進度,以此來判斷是否需要上下一道菜。外場等待的客人也會希望得知具體的等待時間。
如果有辦法自動偵測客人的用餐進度,即時回報給廚房,就可以減輕服務生與廚師的負擔與減少餐廳人事成本。用餐的進度也能被用來更精準的估計排隊客人的等候時間,提升客人整體用餐的體驗。
此外,根據客人用餐的快慢等,可以進一步分析客人對食物的喜好程度
## 作品架構 (200字內,包含可能用到的技術與實現方式)
利用攝影機將客人的餐盤的影像擷取下來至樹梅派分析,計算出食物佔整個盤子的百分比來表示目前的用餐進度。並且可以透過計算單位時間的食物減少量,預測食用完畢的時間。
在主機上架一個伺服器,用餐進度可以傳至連接主機的 arduino,透過 LED 顯示用餐是否結束;預測食用完畢的時間則可以傳至連接主機的螢幕,顯示剩餘的等待時間。
## 特殊硬體需求
2台攝影機、2台樹梅派、1台arduino、綠色led、紅色led,網路線
## 特殊軟體需求
食物的 object detection 的 pretrain model
## 其他需求
純白色盤子、現場的食物、刀、叉
# 官方資訊
* [材料表](https://docs.google.com/spreadsheets/d/1s8h6erF9AqaUixXMNCCPElUNOWlh7o2fr1TCK8azjK8/edit?fbclid=IwAR1nZrr_8hFoiZ7XO1r6i8LhYMdpONxS9PJVQHZ8aN2d69q55Ox2kafk8ss#gid=0)
* [報名處](https://docs.google.com/forms/d/e/1FAIpQLSdGJv4EThPGeIJJdUjoLJ7yTebczppxb-jMZw7gdobowPLlXA/viewform)
* [報名企劃書](https://drive.google.com/file/d/1Ih123pk6JWsAj-rXPp95-95qtr6ya1DU/view?fbclid=IwAR3j9mmHVW0sQLaawWSRbeKebPAMVO20vSI1OIZ-q_RbUtKRxKBsG4tMzDk)
# 主要細節架構
樹梅派:
用樹梅派連接camera,每個客人都用一個camera去做攝影,並回傳到樹梅派做預測用餐完畢的時間,並回傳主機,
顯示那些客人已經用餐完畢可以上其他餐點。
每個客人都以兩份餐點為主: (前菜:NO.1,主菜:NO.2)
每個餐點的用餐時間的平均值: (前菜:10分鐘,主菜:20分鐘)
每個餐點的用餐階段: (五個指標: 4為完整沒被食用 ~ 0用餐完畢)
閒置門檻:3分鐘,超過3分鐘為閒置狀態,如果用餐間隔太久也算閒置狀態
主機(可用樹梅派):
回傳:(NO.餐點,預測用餐完畢時間,是否閒置)
接收每個樹梅派傳來的(NO.餐點,預測用餐完畢時間,是否閒置),
排序所有客人的預測用餐完畢時間,並將預測最快用餐完畢的的客人排序在最前面,並閃燈,也是以便送餐人員知道送餐排序。
如果店裡有人在排隊,主機可以預測客人排隊的等待時間,讓客人可以耐心等候用餐時間。
```graphviz
graph{
pie1 [label = "樹梅派1"]
pie2 [label = "樹梅派2"]
camera1 [label = "攝影機1"]
camera2 [label = "攝影機2"]
plate1 [label = "餐盤1"]
plate2 [label = "餐盤2"]
computer1 [label = "主機1(筆電/樹梅派)"]
arduino [label = "arduino"]
leds [label = "給服務生看的 LED 燈"]
screen1 [label = "外場顯示等待時間的螢幕"]
screen2 [label = "給廚師看的螢幕"]
linebot [label = "linebot"]
computer1--screen2
leds--arduino
arduino--computer1
screen1--computer1
computer1--pie1
computer1--pie2
computer1--linebot
pie1--camera1
pie2--camera2
camera1--plate1
camera2--plate2
}
```
# 分工
- [x] 1. 偵測盤子位置 [name=孟賢]
- 工作內容: 深度學習找出盤子的位置
- 回傳的格式: 一張圖
- [x] 2. 偵測盤子內食物的量 [name=Steven]
- 工作內容: 分析餐盤圖,把餐盤內食物的剩餘量還有資訊回傳到主機1
- 回傳的格式:
+ 哪一桌(id): 0 代表第 0 桌,1 代表第 1 桌
+ 餐桌狀態(status): 0 代表空桌,1 代表有人
+ 食物完成比例(finished): 0~100 表示吃了多少比例的食物
+ 第幾道菜(dish): 客人正在吃第幾道菜
+ 共點幾道菜(order): 目前預設是 2,所以就填 2
+ 預估剩餘時間(time_left): 分鐘為單位,填數字
- 範例: [測試網址](http://140.113.68.171:35000/frompie?id=0&status=0&finished=0&dish=1&time_left=5&order=2)
- 察看結果(我預設一道菜吃 10 分鐘): [測試網址](http://140.113.68.171:35000/screen1)
- [x] 3. 主機1與 arduino 的溝通(給服務生看的) [name=zeze]
- 工作內容: 若食物少於一定的量,則啟動 IOT
- 完成結果: 回傳的剩餘食物比例小於 20% 亮紅燈,反之亮綠燈
- [x] 4. 主機1與螢幕1的溝通(給外場客人看的) [name=zeze]
- 工作內容: 把第 N 位客人需要等待的時間顯示在螢幕上
- [x] 5. 主機1與主機2的溝通 [name=昌賢]
- 工作內容: 把所需食物和剩餘的時間從主機1傳給主機2
- 範例: [測試網址](http://140.113.68.171:35000/screen2)
- [x] 6. 主機2與螢幕2的溝通(給廚師看的) [name=昌賢]
- 工作內容: 把送餐順序sort好顯示在螢幕上(食物、剩餘時間、桌號)
- [x] 7. 主機1 上的 linebot(掃描加好友)
