莊永松
slide link: bit.ly/MakeNTU2019
純圖文好讀版 & Code: https://github.com/voidism/MakeNTU2019_workshop
按ESC可以直接看overview
如果有學校信箱,可直接申請教育試用版,免綁信用卡
https://azure.microsoft.com/zh-tw/free/students/
需要驗證學校的電子郵件
按同意,申請完成
來到 Azure 首頁
點選"建立資源"
點選"AI + 機器學習服務",選"Face"
稍等一會就會顯示部署成功,可以按"釘選到儀表板"
從儀表板進入資源(右上角)
進入keys取得金鑰
複製下金鑰(任一支),等等用
本次工作坊給大家的SD卡都已經灌好OS,如果需要自己灌,下載下面的映像檔,安裝一下Etcher燒錄進SD卡即可,此映像檔中已經裝好python3.6、miniconda、OpenCV,並允許ssh連線
映像檔設有兩組wifi名稱密碼,會自動連上,第一組是工作坊場地wifi(名稱:COBINHOOD_Guest, 密碼:Siam87/bills)。
連上之後,借螢幕來接RPI的HDMI孔,直接用圖形化介面打開RPI的terminal打ifconfig
,即可查詢內網ip(ex: 192.168.xxx.xxx or 10.18.xx.xx)
inet 10.18.xxx.xxx 就是惹
在開機之前先在SD卡最外面放入一個檔wpa_supplicant.conf
,內容跟如下,wifi名稱密碼可以自己設想要的(自己的手機熱點):
如果是手機分享的網路,透過手機的基地台設定可以察看所有連上裝置的內網ip
有了內網ip等等就可以直接ssh連線
如果不是手機熱點,或是設定裡面找不到看ip的地方,在電腦連接上跟RPI一樣的wifi之後,mac直接開terminal打ifconfig,Windows開cmd打ipconfig。先找到自己電腦所在的內網ip前三碼(ex: 192.168.43.xxx)
安裝使用 Angry IP Scanner來掃IP,先讓電腦連接上跟RPI一樣的wifi,按start開始掃內網IP,範圍是剛剛電腦內網ip前三碼+.0~+.255(ex: 192.168.43.0~192.168.43.255),名稱是raspberry
的就是RPI的內網IP。
找到RPI的內網IP位置之後,電腦也已經連接上跟RPI一樣的網路,就可以使用Terminal ssh連線ssh pi@192.168.xx.xx
,password:raspberry
從頭到尾都接螢幕。。。
只要比賽當天自行攜帶螢幕,就可以接螢幕接到爽,不會有這些問題了喔~鳩咪~
但因為ssh連線只能用文字介面,沒辦法看到RPI桌面畫面,想用VNC連RPI看畫面,需要裝一下tightvncserver:(打在ssh連線後的terminal)
設定VNC密碼,執行:
他會叫你輸入想要的8位數密碼,等等會用到。
Would you like to enter a view-only password (y/n)?
記得選"n"
先在RPI端執行
用mac的話開啟Finder>>前往>>連接伺服器
打入 vnc://{RPI的內網IP}:5901
如:vnc://192.168.0.104:5901
。
之後按連線輸入剛剛設定的密碼,即可連上。
如果是Windows請下載VNC的client端軟體realvnc
https://www.realvnc.com/en/connect/download/viewer/
或是可以裝Chrome擴充元件,用起來一樣
https://chrome.google.com/webstore/detail/vnc®-viewer-for-google-ch/iabmpiboiopbgfabjmgeedhcmjenhbla/related
先在RPI端執行
會說沒加密,請按繼續
會叫你輸入密碼,帳號不需要,密碼就是你剛剛設的八位數字
如果他要你打帳號,應該是你沒有在RPI端執行tightvncserver
的緣故
連上了!
(如果下次開機,也想使用VNC,記得要在RPI端再打一次tightvncserver
,才可以用喔)
進入ssh連線之後(或是使用VNC後,開啟rpi本身的terminal),執行:
將 servo motor 與 GPIO pin腳連接:
如果用 web-cam,將 web-cam 用 USB 與 RPi 相接
如果是用 pi camera,直接接CSI介面專用插孔
並且要將資料夾中face_lock_system.py
的第四行改成from pi_camera import Scanner
servo.py
的第18行,有個 # TODO
的部分要填python3 -i servo.py
:確認伺服馬達是否運作正常。
>>>
開頭的指令都是要在進入 python interactive介面之後才打的,不是打在外面的command line喔。
python3 -i camera.py
:python3 -i pi_camera.py
:確認資料夾內是否出現拍下的照片 "test.png"
。
(注意picamera有排線的一側是對應到照片下方)
face_api.py
的第6行,把###your azure api key###
和###you server location###
server 位置 網址對應
face_api.py
的第37行,有個 # TODO
要填python3 -i face_api.py
:確認 API 是否有回傳資料(如下)。
注意test.png
需要是臉部的照片,才會有回傳值,否則偵測不到臉會回傳[]
,方向錯誤或模糊也容易偵測不到。
main_gui.py
的第11行, # TODO
的部分要填python main_gui.py
了。正常執行下會出現GUI小視窗:
Face Not Detected!
,操作成功也會顯示Locked!
或Unlocked!
等等。常見問題
剛剛有說,用picamera的人要把資料夾中face_lock_system.py
的第四行改成from pi_camera import Scanner
沒做的話,相機就拍了一張空照片傳到Azure
Q: 明明有對準,怎麼一直Face Not Detect?
可以把 face_lock_system.py
中出現三次的os.remove(temp_name)
給註解掉,拍完的照片就不會消失,可以看看傳上Azure的圖片到底是拍成怎樣。
Q. 懶得做填空題?