在 Windows 10 使用 Kinect v2 進行人臉解鎖

| | 0 Comments| 14:29
Categories:

「Windows Hello」是微軟伴隨 Windows 10 推出的一項新功能,他主要是提供了以個人的生體資訊來做為登入、認證方式的架構,透過指紋、虹膜(人眼)、以及人臉識別等技術,可以快速地登入電腦、而不需要輸入密碼。(官方說明

不過雖然這項功能看來很方便,但是由於這些認證方法都需要額外的硬體才能運作,所以其實大部分的桌上電腦,都不支援 Windows Hello,也因此並沒有造成太大的迴響。

而實際上,目前最容易用到的 Windows Hello 登入機制,應該是筆記電腦的指紋辨識吧~只要是商務用的筆記電腦、或是比較高階一點的筆記電腦,大多會配置指紋感應器,而這個指紋感應器,大多都可以用來當作 Windows Hello 的登入方法。

像是右上圖,就是 Heresy 的 Sony SVZ 在升級到 Windows 10 後,在「設定」的「帳戶」中,「登入選項」的畫面;可以看到,這邊就有「Windows Hello」的選項了~

而其他像是微軟自家的 Surface Pro 4 與 Surface Book,則也有配置特殊的感應器,可以用來進行人臉辨識,進而使用 Windows Hello 的人臉解鎖功能。此外,其他有搭載 Intel RealSense 裝置的電腦,也都可以使用 Windows Hello 來用人臉登入電腦~(參考

之所以不是使用更為廣泛的 WebCam 來做人臉解鎖,主要是因為用單一的彩色攝影機來做人臉辨識,有太多可以偽裝的地方了~所以微軟才決定使用 Intel RealSense 這類特殊的深度攝影機,來做為人臉的識別工具。(實際上應該不是靠深度、而是紅外線就是了)

不過老實說,這也讓 Heresy 自己頗為訝異…微軟明明也有類似 Intel RealSense 的深度感應、Microsoft Kinect,而且還出到第二代了,那為什麼 Windows Hello 卻只支援 Intel RealSense、而不支援自家的 Kinect 呢?這點,或許會變成無解之謎了吧?

不過,微軟還是有針對這點再做努力的~在幾天前,微軟在 Channel9 上發布了一篇《Windows Hello with the Kinect v2》,告訴大家該怎麼做、才能用第二代的 Kinect 感應器(第一代不行)、來透過 Windows Hello 進行人臉的解鎖了~

如果想這樣玩的話,該怎麼做呢?由於這還不是正式功能,所以有點麻煩…其流程大概如下:

  1. 電腦環境必須要可以正常運行 Kinect for Windows SDK v2 的環境。
    這邊包括了要有 Windows 10、符合需求的硬體、以及特定廠牌的 USB 3.0 控制晶片。

  2. 修改電腦的機碼(registry),把 Windows Update 的驅動程式更新切換為「Test Distribution Drivers」。

    • 這邊基本上就是執行「regedit」這個「登錄編輯程式」,然後在「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\」這個位置下,建立出「DriverFlighting\Partner」這個路徑,並在他下面加入「TargetRing」這個字串值,並將他的值設定為「Drivers」。

    • 如果要簡單一點的話,也可以自己建立一個「driver.reg」的純文字檔案,在裡面貼上下面的內容:

      Windows Registry Editor Version 5.00
      
      [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DriverFlighting\Partner]
      
      "TargetRing"="Drivers"

      然後在存檔後,去執行這個檔案。

    • 這個設定的意義、以及詳細說明,請參考 MSDN

  3. 將裝置管理員中、找到位於「Kinect sensor devices」下的「WDF KinectSensor Interface 0」,在選取他後之後,點選滑鼠右鍵、選擇「更新驅動程式軟體…」,把他的驅動程式,從本來的 2.0.1410.180000、強制更新到 2.1.1511.11000。

  4. 在 Windows 10 的「設定」、「帳戶」裡的「登入選項」中,建立 PIN 碼。

  5. 然後在 Windows Hello 的設定下,去建立用來識別的人臉資料。

    這邊基本上就是在差不多的距離下,面對感應器一段時間。

在完成上述的動作之後(全程不需要重開機),以後在 Windows 10 處於鎖定畫面的情況下,就會自動開啟 Kinect 感應器、試著尋找人臉來解鎖了~

整個操作的流程,Heresy 有錄下放放到 YouTube 上,如果上面看完覺得不夠清楚的話,可以參考下面的操作影片:

YouTube 連結

而如同影片後面所展示的,在鎖定畫面(快速鍵:Win L)的時候,除了 Kinect 感應器會亮起外,畫面上方也會出現一個 Windows Hello 的小眼睛左右張望、以及在他下面會有一些提示訊息。

在 Heresy 自己的經驗下,在鎖定時間不夠久的情下況下,解鎖完之後,可能會需要多按個滑鼠或鍵盤,才能回到桌面;而如果鎖定時間久一點的時候,他則會自己跳過鎖定畫面、直接進入桌面。

實際在使用的時候,辨識的速度算是相當地快!Heresy 常常回到座位上坐好,螢幕還沒亮(不過 Dell 3008WFP 的開機反應很慢就是了…),就已經完成解鎖了!基本上只要攝影機的位置調得夠好,應該是可以在五秒內完成解鎖的~說實話,個人本來只是覺得有趣、想要試試看而已,不過實際使用上,真的頗方便啊!之後 Heresy 大概都會固定接著了吧~ XD

另外,其實也不用擔心 Kinect 感應器一直開著不好,因為在一般使用狀況下,他都是關著的,只有在電腦顯示鎖定畫面的時候,他才會被開啟。而當鎖定畫面顯示一段時間後、螢幕被關閉時,Kinect 也會被關閉,此時也就無法自動解鎖了;這時候要解鎖,也只需要動一下滑鼠、或按一下鍵盤,螢幕和 Kinect 就都會被喚醒、然後就可以自動解鎖了~


最後補充,Windows Hello 內部似乎是使用 Windows.Devices.Perception 這組 API(MSDN),看來似乎是把彩色感應器、深度感應器、紅外線感應器的存取方法都做在 Windows SDK 裡了;所以,或許以後是可以直接用 Windows SDK 來開發 Intel RealSense、或是 Microsoft Kinect 的程式了?

那 Heresy 會比較好奇,不知道能不能把第一代感應器也做成支援這個 API、讓他可以使用 Windows Hello?理論上 Windows.Devices.Perception.Provider 這組 API(MSDN)應該是用來做這件事的,但是就是不知道好不好…

之後有空,可能會參考《Windows Hello infrared camera sample》這篇來玩看看吧…

Leave a Reply

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *