一起學AI!MediaPipe應用教學-單元(二)人臉檢測

一、簡介

上一個單元教大家如何安裝 MediaPipe,相信您已經知道如何在虛擬環境中下指令,若是有看到最後的同學,您應該也準備好程式編輯器了對嗎?還是Windows 記事本?

不管是哪一個,在這個單元我們將開始進入正題,帶大家一起來看看 MediaPipe官方網站針對每個功能,所提供的範例程式。

喔~對了,我們還需要準備一個攝影機,一般的WebCam就可以了,若是您使用的是筆記型電腦(本身有配備視訊攝影機)就不用。

二、操作流程

啟動一個程式的流程,我們透過下面這一張圖片為大家簡述,已經知道如何開啟並執行程式的朋友,可以跳過這一段。

首先我們先複製範例程式到程式編輯器,將它儲存成Python 的檔案,再透過終端機進到虛擬環境後,下指令啟動剛剛儲存的Python檔案。

還是看不懂?待會兒我們會一步一步帶大家操作,請不要擔心,讓我們直接開始今天的主題吧!

三、人臉檢測

MediaPipe Face Detection是一個超快的人臉檢測方法,透過6個點定位人的臉部,分別是右眼、左眼、鼻子、嘴巴中央、靠近右耳臉邊與靠近左耳臉邊。並支援檢測多個人臉,其算法基於 BlazeFace,這是一種輕量級且性能良好的人臉檢測器,且非常適合行動裝置。

上圖用了虛擬替身來讓程式檢測看看,還真的有框選到呢~雖說有些標註點歪歪的,但面對我的惡搞,它表現得很棒。大致上知道「人臉檢測」能做什麼之後,讓我們進到下一個環節。

四、基礎程式碼下載

1. 首先透過下列連結,進到程式碼所在的頁面。

程式碼連結

2. 接著複製網頁上的程式碼至自己的程式編輯器。

3. 透過程式編輯器儲存檔案,儲存檔案的檔名可以隨便打,但後方需加上「.py」,這是副檔名的部份,代表這是什麼格式的檔案,「.py」表示這個檔案是Python語言的檔案。

以下圖舉例,小編的檔案名稱想取名叫「face」,那麼儲存的檔案名稱則為「face.py」。取完名稱後,選擇想要儲存的地方,並按下存檔。

五、終端機基礎操作

接著讓我們啟動虛擬環境,忘記的同學可以回到上一個單元「 MediaPipe 應用教學-單元(一)環境設定 」查看,記得要確認開頭是否有從(base)轉變成自己的虛擬環境名稱喔。

進到虛擬環境之後,我們將透過指令進到程式檔案所在的資料夾,並開啟程式碼讓它執行。因為在終端機的一切動作都需要指令,所以就來教大家兩個常用的指令。

第一個指令是列出目錄底下的項目用的,在Windows是用「dir」,Linux則是用「ls」,意思都是一樣的。

以Windows電腦為例,「dir」指令全文是directory,這個指令可以列出您所在位子底下的所有檔案與資料夾,讓我們輸入這個指令並按下「Enter」看看。

如上圖所示,列出了小編目前終端機所在的位置「C:\Users\iCShop」底下的所有資料。我們可以打開同樣位置的資料夾對照看看。

下指令」乍聽之下好像很複雜又困難,但習慣之後,其實只是用不同的方式在做同樣的事而已。

第二個指令是移動到別的資料夾用的,在Windows與Linux電腦上都一樣,這個指令叫「cd」,全文是Change Directory,功能就是用來「切換工作目錄」,讓您在終端機自由穿梭其他地方。

在剛剛下完「dir」指令列出來的目錄清單中,因該可以找到一個「Desktop」的名稱。

讓我們試著用「cd」指令從現在的位子移動到「Desktop」。下指令的方式很簡單,輸入完cd後空一格,再輸入要前往的目標Desktop。

A. 呼叫「cd」指令準備移動。

B. 在輸入要移動的資料夾名稱前需要空一格。

C. 想要前往的資料夾名稱。

小撇步

試著在輸入資料夾名稱輸入一半的時候,按下鍵盤上的「Tab」按鍵,若是目前輸入的文字在資料夾中沒有同樣名稱的話,終端機會幫您輸入後續的部份呦!

輸入完成後按下「Enter」,如下圖所示,就會發現路徑有改變了呦。

有前進到下一個資料夾的指令,當然也有回到上一個資料夾的指令囉,這個指令是「cd ..」,這個指令可以讓您回到上一個目錄。

六、執行程式

接著讓我們馬上用剛剛學的指令來試試看,請移動到您剛剛存放Python程式檔案「所在的位置」。

以小編為例,剛剛我將「face.py」存放在桌面的一個名為mediapipe的資料夾裡,路徑就是「C:\Users\iCShop\Desktop\mediapipe」。

依照剛剛所教的「cd」指令,移動到存放Python程式檔案的mediapipe資料夾裡,並透過「dir」指令列出目錄來檢查,如下圖所示:

接著讓我們透過執行Python檔案的指令,來開啟檔案執行我們的程式碼。首先是輸入「python」,透過這個指令來呼叫我們要執行的Python程式檔案,接著空一格再輸入要執行的檔案名稱並包含副檔名「.py」,如下圖說明:

A. 呼叫「python」指令準備執行程式。

B. 在輸入要執行的檔案名稱前需要空一格。

C. 輸入要執行的檔案名稱包含.py。

輸入完成後按下「Enter」,執行過程中沒有問題的話,會自動開啟攝影機,並跳出顯示視窗開始檢測人臉,如下圖所示:

左右擺動看看,或是找朋友一起入鏡,看看是否有框選到你們的臉。

若要結束程式,請先點選顯示畫面的視窗,再按下鍵盤上的「Esc」按鍵,這樣就可以關閉程式。

七、程式碼簡閱

剛剛執行的人臉檢測功能都是透過程式碼所實現的,讓我們簡單的來看一下,程式碼做了些什麼吧!

1. 匯入檔案

首先匯入我們需要的功能,影像處理套件「cv2(OpenCV)」與我們的主角「mediapipe」並在程式碼裡將它簡稱為「mp」。

接著取出「mediapipe」功能百寶袋「solutions」裡面的「人臉檢測方法」與「繪圖/標註方法」。並將這些方法賦予新的名稱備用。

2. 啟動功能並開啟攝影機

設定要開啟的攝影機編號,並打開人臉檢測功能,最重要的是這裡會檢查攝影機是否有開啟成功,若沒有成功會重複進行讀取確認。

3. 轉換色彩並開始檢測

這裡會將讀取到的影像從BGR轉換為RGB的色彩(配合人臉檢測的照片需為RGB),再丟到「人臉檢測方法」,開始對圖片進行人臉檢測,並將檢測結果儲存下來。

4. 還原色彩並標註

得到檢測結果後,將影像色彩轉換回BGR。再透過「繪圖/標註方法」將檢測結果標到影像上後顯示出來,程式會一直「不停重複」檢測與顯示的動作。

5. 停止的方法

設定當按下鍵盤的「Esc」按鍵就跳出這個「重複的循環」,最後釋放攝影機使畫面關閉。

6. 小結

簡單來說就是將必要的功能與會用到的功能先載入,接著重複取得影像>檢測>標註檢測結果>顯示。

八、進階應用

我們已經體驗了MediaPipe 人臉檢測的強大功能,不但速度快,而且也挺精準的。接著就讓我們來做一些衍伸的應用吧!還記得它不只可以標記一個人的臉嗎?我們可以善用它可以標註多個人臉的功能,來製作一個防疫小專案「不准群聚小管家」。

當人臉檢測到的數量不超過5個人時,標註的框線顏色都是綠色的,一旦偵測到超過5個人,標註的框線就會變粗,並且顏色從綠色轉變為紅色

接下來,先下載程式碼!!!

九、進階程式碼下載

1. 首先透過下列連結,進到程式碼所在的頁面。

程式碼連結

2. 接著一樣複製網頁上的程式碼至自己的程式編輯器。

3. 透過程式編輯器儲存成另一個檔名,後方一樣加上「.py」,小編在此將進階的程式碼儲存為檔名「face_limit5.py」,之後會以這個檔名示範。

十、執行程式

1. 接著讓我們一樣用剛剛學的指令,移動到您存放Python程式檔案「所在的位置」。

2. 透過執行Python檔案的指令,來開啟檔案執行我們的程式碼。首先一樣是輸入「python」,透過這個指令來呼叫我們要執行的Python程式檔案,接著空一格再輸入要執行的檔案名稱並包含副檔名「.py」。

3. 因為小編身邊沒有超過5人的照片,可以讓MediaPipe檢測,所以只好自己自拍後合成一張圖再拿給MediaPipe檢測,檢測結果如下。

十一、進階程式碼簡閱

您的防疫小專案「不准群聚小管家」的程式碼有正常執行嗎?其實完成這個小專案並不難,程式碼大致上與原先的相同,只是多了讀取人臉數的程式,以及依照是否超過5人調整顏色而已。

1. 讀取人數

透過「len(results.detections)」這行程式可以取得檢測的總人數。

2. 依照條件選擇標註的顏色

依照總人數使用「if…else…」判斷句調整「draw_detection」裡面的內容就完成囉。

十二、結語

這一個單元從基本的終端機操作、如何執行Python程式,到人臉檢測並利用功能特性製作小專案。若有興趣的話,您也可以嘗試用這個單元教的功能,製作屬於自己的專案。

其實除了可以知道偵測的人數與更改顏色之外,我們也能取得,那6個人臉標註點各自的座標,若您已經使用Python這個語言有一段時間,可以嘗試透過這個連結,查看人臉檢測程式庫內的程式碼,找到讀取標註點的方法。