如何做到老闆來了就自動切換桌面(含原始碼)

Ivyw發表於2017-01-17

簡介

當你工作的時候,肯定會瀏覽一些與工作無關的東西,別說你沒有過。

這時被老闆發現就太尷尬了。當然,我也可以馬上切換桌面,但這種舉動太可疑了,而且有的時候我根本沒注意到老闆來了。為了表現得不是那麼刻意,我做了個人臉識別程式,老闆過來的時候自動隱藏桌面內容。

具體來說,我用 Keras 來實現面部識別的神經網路,用網路攝像頭來判斷他是否正在接近,然後切換畫面。

任務

這個程式的目的是在發現老闆接近時自動切換電腦桌面。

場景如下:

如何做到老闆來了就自動切換桌面(含原始碼)

老闆和我的座位之間隔著 6、7 米,他離開座位後大概 4、5 秒鐘到達我的工位。因此必須在這個時間內切換好桌面,時間緊迫!

策略

可能你們會有很多辦法,以下是我的個人對策。

首先,讓電腦用深度學習的技術記住老闆的臉;然後在我的工位安裝一個網路攝像頭,一旦捕捉到老闆的臉就迅速切換桌面。我認為這是個很完美的策略,姑且稱它為 Boss Sensor(老闆識別器)吧。

如何做到老闆來了就自動切換桌面(含原始碼)

系統架構

Boss Sensor 的系統架構如下所示。

如何做到老闆來了就自動切換桌面(含原始碼)

  • 網路攝像頭捕捉實時畫面。
  • 學習模型對捕捉畫面的面部進行檢測和識別。
  • 識別出老闆的面部後,切換桌面。

這個過程用到了如下技術:

  • 捕捉面部畫面
  • 面部識別
  • 切換桌面

讓我們一步一步分解一下。

捕捉面部畫面

首先,用網路攝像頭捕捉畫面。

我用的是 BUFFALO BSW20KM11BK

如何做到老闆來了就自動切換桌面(含原始碼)

你也可以用電腦軟體自帶的攝像頭,但是考慮到接下來的步驟,最好是可以直接獲得影象。由於接下來需要進行面部識別,所以需要對影象進行剪裁。我用 Python 和 OpenCV 獲取面部影象。這是程式碼:

臉部影象比預期的更清晰。

如何做到老闆來了就自動切換桌面(含原始碼)

面部識別

接下來,我們用機器學習來確保電腦可以識別出老闆的臉。
這個過程需要分三步:

  1. 影象收集
  2. 影象預處理
  3. 構建機器學習模型

讓我們一步一步分解一下。

影象收集

首先,

  • 從 Google 搜尋影象
  • 從 Facebook 收集影象
  • 拍攝視訊

最開始,我試著從網頁搜尋和 Facebook 收集影象,但數量遠遠不夠。後來我拍攝了一段視訊並把視訊分解成無數個影象。

影象預處理

我收集到了足夠多的圖片,但是裡面除去面部還有很多無關的部分,所以學習模型無法準確識別。我們把面部單獨剪裁出來即可。

我主要使用 ImageMagick 進行提取。通過 ImageMagick 切割來獲得面部影象。

然後我收集到了如下的面部影象:

如何做到老闆來了就自動切換桌面(含原始碼)

可能我是世界上收藏老闆照片最多的人,估計比他爸媽還要多。

接下來構建學習模型。

構建機器學習模型

我用 Keras 來搭建卷積神經網路(CNN),CNN 可以用來進行訓練。Keras 的後端使用了 TensorFlow。如果你只需要識別面部,可以呼叫 Web API 進行影象識別,如 Cognitive Services 中的 Computer Vision API,但是考慮到實時性,我決定自己編寫。

以下是網路的架構。Keras 可以很方便地展示出架構。

這是程式碼:

現在,如果老闆出現在攝像機鏡頭裡就可以被識別出來了。

切換桌面

當學習模型識別出老闆在接近後,就需要切換桌面了。我選擇了下面這張影象來假裝我在工作。

選擇這樣的圖片是因為我是個程式設計師。

如何做到老闆來了就自動切換桌面(含原始碼)

我展示的僅僅是一張圖片。

我希望圖片可以全屏展示,所以使用了 PyQt,程式碼如下:

萬事俱備了。

成品

把上面的技術整合起來就大功告成了,我已經試驗過了。

“老闆離開座位後向我靠近。”

如何做到老闆來了就自動切換桌面(含原始碼)

“OpenCV 檢測到了老闆的面部並把資訊傳送給學習模型。”

如何做到老闆來了就自動切換桌面(含原始碼)

“確定是老闆後迅速切換桌面!ヽ(‘ ∇‘ )ノ ワーイ”

如何做到老闆來了就自動切換桌面(含原始碼)

原始碼

Boss Sensor 的原始碼下載連結如下:

  • BossSensor:https://github.com/Hironsan/BossSensor

記得讚我哦m(_ _)m

結論

這一次,我把 Web 相機的實時影象採集和 Keras 的面部識別結合起來,成功地識別老闆並隱藏桌面。

目前,我用 OpenCV 進行面部檢測,但由於 OpenCV 中面部檢測的準確性似乎不太好,我想嘗試使用 Dlib 來提高準確性。另外,我還想嘗試一下自己的面部檢測模型。

由於對從網路攝像機獲取的影象的識別精度不太好,我還會做些改進。

如果你喜歡這篇文章,歡迎轉發或分享 ↓

打賞支援我翻譯更多好文章,謝謝!

打賞譯者

打賞支援我翻譯更多好文章,謝謝!

如何做到老闆來了就自動切換桌面(含原始碼)

相關文章