###### tags: `FM628A` # [FM628A]使用 face-api.js 進行人臉辨識與表情辨識 [face-api.js](https://justadudewhohacks.github.io/face-api.js/docs/index.html) 是一個網頁端的 JavaScript 程式庫, 可以讓網頁具有表情辨識、年齡辨識、人臉辨識等相關功能, 我們提供有事先準備好的網頁範例, 可以讓您將 face-api.js 透過 Blynk 與你的智慧屋串接在一起。 ## 架設個人網站 為了使用 face-api.js 提供的人臉辨識, 必須要建置個人網站, 放置要辨識的人臉照片, 提供網頁內的程式訓練後建立辨識模型。我們選擇採用免費的 GitHub Pages 服務架設網站, 請先依照以下文章註冊並建置個人網站: - [使用 GitHub Pages 架設個人網站](/sqF4oJISSNi8LeaCFEOugQ) ## Lab 12 是誰回來了 本實驗要實作人臉辨識, 請依照以下步驟完成: 1. 準備人臉照片:在範例檔中 www\FM628A\door_lock\images 資料夾下, 可依照要辨識的人名建立個別的資料夾, 在範例檔中預設有 Teddy 與 Chuan 兩個人的資料夾: ![](https://i.imgur.com/96znUy7.png) 你可以依據自己的需要建立額外的資料夾。 每個資料夾中必須放置 3 張 jpg 或是 png 格式的人臉照片, 並分別取名為 1、2、3, 以下就是範例檔中個別資料夾內的範例照片: ![](https://i.imgur.com/Hv9Zgge.png) ![](https://i.imgur.com/8wjJyws.png) 範例網頁中的程式預設只會讀取 3 張照片, 如果你希望提高辨識成功率, 可以依循遞增數值的命名方式增加照片, 並修改範例檔 www\FM628A\door_lock\script.js 檔中第 161 行的程式: ```javascript=161 for (let i = 1; i <= 3; i++) { ``` 將程式中的 3 改成你的照片張數即可。 :::danger :fire: 由於這是人臉辨識, 所以請不要用其他動物的照片, 否則會因為提取不出人臉特徵導致網頁無法正常載入。 ::: 1. 移到你的 GitHub 網頁, 執行『**Add file/Upload files**』功能表命令: ![](https://i.imgur.com/Y9m8YRf.png) 將範例檔中 www 下的 FM628A 資料夾整個拖放到 GitHub 頁面上: ![](https://i.imgur.com/xyMHPvT.png) 確認檔案全部上傳完畢後, 按一下下方的 **Commit changes** 鈕提交上傳的檔案: ![](https://i.imgur.com/7X6N1KZ.png) 確認整個資料夾已經加入 GitHub: ![](https://i.imgur.com/9zZdtOV.png) 1. 在你的手機上開啟瀏覽器, 輸入以下網址開啟人臉辨識網頁: ``` https://使用者名稱.github.io/FM628A/door_lock ``` 請記得將上述網址中的『使用者名稱』替換成你自己的使用者名稱, 會看到以下的畫面: ![](https://i.imgur.com/x7OXNp6.png =360x) 請用逗號隔開輸入人臉照片資料夾的名稱, 預設就是範例檔中的 "Teddy,Chuan"。填入後按**確定**會看到下個畫面: ![](https://i.imgur.com/cIMESf3.jpg =360x) 表示網頁程式正在讀取照片, 這個階段會需要一點時間, 請耐心等候, 就會看到如下畫面: ![](https://i.imgur.com/9KH2Kjb.png =360x) 請先在下方輸入 Blynk 的認證權杖, 接著就可以對著要辨識的人臉按下**辨識按鈕**, 它會在畫面上以藍色方框標示人臉位置以及名稱, 名稱後方會標註畫面中的人臉與資料夾中的照片差距, 以 0~1 表示, 數值越大越不像, 範例網頁只會在距離小於 0.4 時才會當成辨識成功, 並傳送結果到 Blynk。 如果你想調整距離條件, 可以修改範例檔中 www\FM628A\door_lock\script.js 檔中第 123 行的程式: ```javascript=161 if (lab != "unknown" && dis < 0.4) { ``` 將 0.4 改成合適的數值即可。 如果辨識不到認識的人臉, 它會顯示為 "unknown", 例如: ![](https://i.imgur.com/oVLAO3d.jpg =360x) ## Lab 13 自動打開門 上一個實驗已經可以辨識人臉, 而且在辨識成功時會傳送指令到 Blynk, 只要沿用 Lab 04 的程式, 就可以完成人臉辨識解鎖的功能。 ## Lab 15 心情好音樂 本實驗 Blynk 與 MicroPython 程式都和手冊上一樣, 請在最後實測時依照以下步驟: 1. 用手機瀏覽器開啟以下網址: ``` https://使用者名稱.github.io/FM628A/emotion ``` 請記得將上述網址中的『使用者名稱』替換成你自己的使用者名稱, 會看到以下的畫面: ![](https://i.imgur.com/L8M9urw.jpg =360x) 這個模型比較小, 很快就會讀取完畢。 2. 在下一個畫面底部輸入 Blynk 的認證權杖: ![](https://i.imgur.com/YsVs0yv.png =360x) 即可按**偵測按鈕**辨識表情, 一樣會在畫面上以藍色方框框出人臉位置, 並標示辨識出的表情英文名稱, 名稱後面會標示 0~100 的信心度, 數值越高越可信。總共有以下幾種表情, 範例網頁會依據不同表情送出不同數值給 Blynk: |表情|數值|說明| |---|---|---| |neutral|20|自然| |happy|40|快樂| |angry|60|生氣 |disgusted|60|厭惡| |fearful|60|恐懼| |sad|60|傷心| |surprised|80|驚訝| MicroPython 這一端的程式會在收到數值 60 的時候播放音樂。