演示視訊:https://www.bilibili.com/video/BV1L7411f7R...
是不是厭煩了每次回家都要點選按鈕開啟電腦的操作?
你如果有看過我以前的推送,是不是厭煩了每次回家都要喊“echo,turn on my pc”,讓智慧音響開啟電腦的操作?
現在,我們有一個全新的操作,坐到椅子上就能讓電腦開機!
(避免你跟我一樣,擁有一口蹩腳的英語,讓echo聽不懂的尷尬)
本教程所需要的工具及應用:
1.一個樹莓派3
2.一個可在樹莓派3上執行的攝像頭(我用的是羅技C270,樹莓派官方攝像頭也可以)
3.Python3
4.路由器一臺,及支援WakeOnLan的主機(大部分都支援)
如果你只是想在windows/macos上嘗試一下人臉識別而不需要進行自動開機,則需要:
1.Python3
2.一個可執行的攝像頭
自動開機效果演示:
1. 安裝必要的python元件
windows/macOS:
pip install opencv-python
非常簡單,和樹莓派的安裝複雜度不是一個級別的。
樹莓派:
在樹莓派上的安裝過程比較複雜,需要耐心折騰,分為以下步驟:
1.1 安裝Cmake等編譯openCV原始碼的工具
sudo apt-get install build-essential cmake pkg-config
1.2 安裝幾種常見格式的影像操作的包
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
1.3 安裝視訊操作的包
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev
1.4 openCV用於影像/GUI展示的功能依賴highgui模組,為了編譯它我們需要安裝libgtk2.0-dev
sudo apt-get install libgtk2.0-dev
1.5 額外依賴
sudo apt-get install libatlas-base-dev gfortran
1.6 當然,還要安裝構建Python擴充套件所需要的標頭檔案
sudo apt-get install python2.7-dev python3-dev
1.7 下載並編譯opencv和opencv_contrib的原始碼
下載並解壓:
cd ~
wget -O opencv.zip https://github.com/opencv/opencv/archive/4.1.0.zip
unzip opencv.zip
wget -O opencv\_contrib.zip https://github.com/Itseez/opencv\_contrib/archive/4.1.0.zip
unzip opencv\_contrib.zip
編譯:
cd ~/opencv-4.1.0/
mkdir build & cd build
cmake -D ENABLE\_PRECOMPILED\_HEADERS=OFF \\ -D CMAKE\_BUILD\_TYPE=RELEASE \\ -D CMAKE\_INSTALL\_PREFIX=/usr/local \\ -D INSTALL\_PYTHON\_EXAMPLES=ON \\ -D OPENCV\_EXTRA\_MODULES\_PATH=~/opencv\_contrib-4.1.0/modules \\ -D BUILD\_EXAMPLES=ON ..
make -j4
make install
make ldconfig
PS:請注意你自己放置的目錄和版本的區別,make -j4 是四執行緒進行編譯,過程大約需要2-3個小時,如果說j4編譯失敗,請去掉-j4這個引數,直接make (單執行緒,這樣大約需要6-9個小時).
2. 測試你的攝像頭
編寫如下的Python檔案,test.py:
執行本程式:
python test.py
如果成功,你將會看到你的攝像頭燈亮起(如果有燈的話),螢幕出現兩個視窗,一個是彩色的,一個是灰色的。
你還可以在讀取到frame後對frame進行操作,如
frame = cv2.flip(frame, -1) # 垂直反轉攝像頭圖形
對攝像頭進行垂直翻轉。
2. 人臉識別
人臉識別模組我們將使用Haar級聯分類器,我們自己蒐集人臉圖片然後進行訓練是比較麻煩的,好在openCV已經提供了相關的人臉識別XML檔案,使用這些檔案我們就能直接進行人臉或笑臉的識別,下載地址:
https://github.com/opencv/opencv/tree/mast...
我們程式碼需要用到裡面的 haarcascade_frontalface_default.xml ,當然,如果你想嘗試別的識別也可以進行下載。
編寫如下的Python檔案,test2.py:
執行本程式:
python test2.py
如果成功,當有人臉出現在攝像頭範圍內,則會被用藍色框框畫起來。如圖所示:
3. 獲取你的人臉資料作為訓練集
好了,我們剛剛成功識別了人臉,現在我們需要識別出某個人臉是某個人,比如當我出現在鏡頭中,它要識別出這個人就是“幻象客”。
新建資料夾train_data,用於儲存拍攝下來的人臉,一共拍攝五十張人臉圖片,get_train_data.py:
4. 訓練剛剛得到的資料
拍攝完我們的影像後,我們還需要對這些圖片進行訓練,train.py:
訓練完成後,當前資料夾會出現trainer.yml檔案,這就是我們所需要的模型檔案。
5.實體物件並通知裝置自動開機
現在我們就可以使用剛剛訓練出來的模型檔案,對人臉進行檢測,以識別出該人臉的實體物件。
recognize.py 程式碼如下:
如果你只是在windows或者macOS上執行,直接把wake_on_lan函式呼叫去掉即可。
其中,在標記人臉部分,由於我們的訓練集數量少,我把識別到的人臉然後開機的閾值調到了40,避免無法自動開機的尷尬之處,當識別到的人臉的信度大於40,這個人臉對應的名字是我的時候,才會進行開機操作。
這麼低的信度也不需要擔心識別到別人的臉也開機,經過測試,陌生人的臉大約只有10~20的信度。當然,如果你還是擔心,可以把訓練集增加,然後調高該判斷的信度閾值。
wake_on_lan()函式中的引數,是你需要自動開機的電腦的mac地址。wake on lan 簡稱WOL,它能讓你使用路由器通過LAN埠對某個裝置進行開機的操作。本推送中的自動開機使用到的功能就是這個。你需要在路由器的管理頁面中,看到本機的mac地址,並送入這個函式中。
在樹莓派上執行這個Python檔案,將臉湊到攝像機前,就會將mac地址對應的裝置開機(當然,這個裝置要連著路由器才行)。
===========================================
思考一下,其實當訓練集夠多的時候,準度是相當高的,如果你的照片已經儲存在某些資料庫中,比如嘗試過人臉識別通過火車站。那麼通過監控攝像頭獲取你每天的日常路線將輕而易舉。這是一件比較可怕的事,我們需要認真思考新時代的人臉識別技術的應用範圍了。
歡迎檢視本系列的其他教程:
系列教程一, 本文章用到了該文章中提到的wake on lan.
系列教程二
系列教程三
我們的文章到此就結束啦,如果你希望我們今天的Python 教程,請持續關注我們,如果對你有幫助,麻煩在下面點一個贊/在看哦有任何問題都可以在下方留言區留言,我們都會耐心解答的!
Python實用寶典 (pythondict.com)
不只是一個寶典
歡迎關注公眾號:Python實用寶典
本作品採用《CC 協議》,轉載必須註明作者和本文連結