python人脸识别代码_Python不用10行代码就可实现人脸识别,还可辨别真假,太棒了!...
人臉識別技術大致由人臉檢測和人臉識別兩個環節組成。之所以要有人臉檢測,不光是為了檢測出照片上是否有人臉,更重要的是把照片中人臉無關的部分刪掉,否則整張照片的像素都傳給f(x)識別函數肯定就不可用了。人臉檢測不一定會使用深度學習技術,因為這里的技術要求相對低一些,只需要知道有沒有人臉以及人臉在照片中的大致位置即可。一般我們考慮使用OpenCV、dlib等開源庫的人臉檢測功能(基于專家經驗的傳統特征值方法計算量少從而速度更快),也可以使用基于深度學習實現的技術如MTCNN(在神經網絡較深較寬時運算量大從而慢一些)。下面
環境搭建:
1. 安裝 Ubuntu17.10 > 安裝步驟在這里
2. 安裝 Python2.7.14 (Ubuntu17.10 默認Python版本為2.7.14)
# 安裝 git$ sudo apt-get install -y git# 安裝 cmake$ sudo apt-get install -y cmake# 安裝 python-pip$ sudo apt-get install -y python-pip
4. 安裝編譯dlib
安裝face_recognition這個之前需要先安裝編譯dlib
# 編譯dlib前先安裝 boost$ sudo apt-get install libboost-all-dev# 開始編譯dlib# 克隆dlib源代碼$ git clone https://github.com/davisking/dlib.git$ cd dlib$ mkdir build$ cd build$ cmake .. -DDLIB_USE_CUDA=0 -DUSE_AVX_INSTRUCTIONS=1$ cmake --build .(注意中間有個空格)$ cd ..$ python setup.py install --yes USE_AVX_INSTRUCTIONS --no DLIB_USE_CUDA
# 安裝 face_recognition$ pip install face_recognition# 安裝face_recognition過程中會自動安裝 numpy、scipy 等
基于Mac的OpenCV環境
建議使用Brew 安裝,如果沒有安裝brew,先執行下面命令:
$/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
然后,指定目標倉庫
$brew tap homebrew/science
$brew install opencv3
安裝速度取決于網絡,安裝完畢需要綁定Python開發環境,有多種土方法:
1)增加環境變量,將opencv 的site-packages 添加到PYTHONPATH中
2)使用ln 軟連接,將cv2.so 鏈接到python 環境的 site-packages中
3)直接cp cv2.so 到 python 環境的 site-packages 目錄下
更簡單地是執行如下命令:
echo /usr/local/opt/opencv3/lib/python2.7/site-packages >> /usr/local/lib/python2.7/site-packages/opencv3.pth mkdir -p /Users/hecom/.local/lib/python2.7/site-packages echo 'import site; site.addsitedir("/usr/local/lib/python2.7/site-packages")' >> /Users/hecom/.local/lib/python2.7/site-packages/homebrew.pth1234
對于強迫癥患者
可以全面安裝opencv的各種插件,如3方插件,視頻插件等:
$brew install opencv3 --with-contrib --with-cuda --with-ffmpeg --with-tbb --with-qt5
可能會遇到很多坑,如
Error: You must ‘brew link texi2html’ before homebrew/science/opencv3 can be installed
當你執行
$brew link texi2html
時又會遇錯:
Error: Cowardly refusing to 'sudo brew link'
You can use brew with sudo, but only if the brew executable is owned by root.
However, this is both not recommended and completely unsupported so do so atyour own risk
說明brew 的權限有問題, 需要解決:
$sudo chown root:wheel ‘which brew’
在Ubuntu上OpenCV3的源碼安裝
在Ubantu上安裝先要做一下準備活動
$ aptitude -f install$ sudo apt-get update123
然后安裝編譯環境:
$sudo apt-get install build-essential
安裝依賴庫
$sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
還要安裝python 依賴及其它依賴庫
$sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
獲得opencv源代碼
git clone https://github.com/Itseez/opencv.git
終于可以編譯安裝了:
$cd opencv$cmake -D CMAKE_INSTALL_PREFIX=/home/opencv/build -D CMAKE_BUILD_TYPE=RELEASE ..123
最后,安裝python-opencv:
$sudo apt-get install python-opencv
OpenCV的Python環境簡單驗證
一行代碼驗證OpenCV的Python環境是否成功:
$python -c “import cv2; print dir(cv2)”
如果輸出了很多cv2 的屬性和函數名的字典,就表示成功;否則的話,還需要繼續填坑。
來看看一張圖片中有幾個人,沒有高大上,只是覺得好玩,而且只需要7行代碼。
import cv2face_patterns = cv2.CascadeClassifier('/usr/local/opt/opencv3/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml')sample_image = cv2.imread('/Users/abel/201612.jpg')faces = face_patterns.detectMultiScale(sample_image,scaleFactor=1.1,minNeighbors=5,minSize=(100, 100))for (x, y, w, h) in faces: cv2.rectangle(sample_image, (x, y), (x+w, y+h), (0, 255, 0), 2)cv2.imwrite('/Users/abel/201612_detected.png', sample_image);12345678910111213
第1行 引入 OpenCV
開源是偉大的,使我們視野更開闊,而且不用重復造輪子。這里沒有用PIL,再結合特定算法,而是直接使用了OpenCV(http://opencv.org)。OpenCV是一個基于BSD許可發行的跨平臺計算機視覺庫,可以運行在Linux、Windows和Mac OS操作系統上,輕量而且高效,用C/C++編寫,同時提供了Python、Ruby、MATLAB等接口,實現了圖像處理和計算機視覺方面的很多通用算法。
第2行 加載分類器 cv2.CascadeClassifier
CascadeClassifier是Opencv中做人臉檢測時候的一個級聯分類器,該類中封裝的是目標檢測機制即滑動窗口機制+級聯分類器的方式。數據結構包括Data和FeatureEvaluator兩個主要部分。Data中存儲的是從訓練獲得的xml文件中載入的分類器數據;而FeatureEvaluator中是關于特征的載入、存儲和計算。這里采用的訓練文件是OpenCV中默認提供的haarcascade_frontalface_default.xml。至于Haar,LBP的具體原理,可以參考opencv的相關文檔,簡單地,可以理解為人臉的特征數據。
第3行 加載目標圖片 imread
人臉識別系統一般分為:人臉圖像采集、人臉圖像預處理、人臉圖像特征提取以及匹配與識別。
第4行 多尺度檢測 detectMultiScale
調用 CascadeClassifier 中的調detectMultiScale函數進行多尺度檢測,多尺度檢測中會調用單尺度的方法detectSingleScale。
參數說明:
scaleFactor 是 圖像的縮放因子
minNeighbors 為每一個級聯矩形應該保留的鄰近個數,可以理解為一個人周邊有幾個人臉
minSize 是檢測窗口的大小
這些參數都是可以針對圖片進行調整的,處理結果返回一個人臉的矩形對象列表。
第5行 和 第6行 為每個人臉畫一個框
循環讀取人臉的矩形對象列表,獲得人臉矩形的坐標和寬高, 然后在原圖片中畫出該矩形框,調用的是OpenCV的rectangle 方法,其中矩形框的顏色等是可調整的。
第7行 保存檢測后的結果
萬事具備了,調用imwrite,將檢測后的結果保存到指定的位置。結果圖如下:
神秘感不是這7行代碼,而是OpenCV中的相關實現,OpenCV的中文網也是一個學習體會的好場所。
因此,7行代碼只是個噱頭,真正的核心是OpenCV。然后,安裝OpenCV環境的時候就是有一些坑,特別記錄一下。
▍Face Recognition軟件包
你可以通過Python引用或者命令行的形式使用它,來管理和識別人臉。
該軟件包使用dlib中最先進的人臉識別深度學習算法,使得識別準確率在《Labled Faces in the world》測試基準下達到了99.38%。
它同時提供了一個叫face_recognition的命令行工具,以便你可以用命令行對一個文件夾中的圖片進行識別操作。
▍特性
找到圖片中所有的人臉
找到并操作圖片中的臉部特征
獲得圖片中人類眼睛、鼻子、嘴、下巴的位置和輪廓
找到臉部特征有很多超級有用的應用場景,當然你也可以把它用在最顯而易見的功能上:美顏功能
你甚至可以用這個軟件包做人臉的實時識別
好了,今天就分享到這里,有想學習Python編程的伙伴們,歡迎留言和小編交流學習,最后祝大家早日成為Python大牛!
總結
以上是生活随笔為你收集整理的python人脸识别代码_Python不用10行代码就可实现人脸识别,还可辨别真假,太棒了!...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Python 初学者】从零开始构建自己
- 下一篇: 【HDOJ】3505 Writing R