你如果有看過我以前的推送,是不是厭煩了每次回家都要喊 “echo,turn on my pc”,讓智能音箱打開電腦的操作?
現在,我們有一個全新的操作,坐到椅子上就能讓電腦開機!
(避免你跟我一樣,擁有一口蹩腳的英語,讓 echo 聽不懂的尷尬)
這里還要注意:光理論是不夠的。這里順便總大家一套2020最新python入門到高級項目實戰視頻教程,可以去小編的Python交流.裙 :七衣衣九七七巴而五(數字的諧音)轉換下可以找到了,還可以跟老司機交流討教!
本教程所需要的工具及應用:
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 文件,使用這些文件我們就能直接進行人臉或笑臉的識別,下載地址:
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 地址對應的設備開機(當然,這個設備要連着路由器才行)。
最后注意:光理論是不夠的。這里順便總大家一套2020最新python入門到高級項目實戰視頻教程,可以去小編的Python交流.裙 :七衣衣九七七巴而五(數字的諧音)轉換下可以找到了,還可以跟老司機交流討教!
本文的文字及圖片來源於網絡加上自己的想法,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯系我們以作處理。