『壹』 如何線上部署用python基於dlib寫的人臉識別演算法
python使用dlib進行人臉檢測與人臉關鍵點標記
Dlib簡介:
首先給大家介紹一下Dlib
我使用的版本是dlib-18.17,大家也可以在我這里下載:
之後進入python_examples下使用bat文件進行編譯,編譯需要先安裝libboost-python-dev和cmake
cd to dlib-18.17/python_examples
./compile_dlib_python_mole.bat 123
之後會得到一個dlib.so,復制到dist-packages目錄下即可使用
這里大家也可以直接用我編譯好的.so庫,但是也必須安裝libboost才可以,不然python是不能調用so庫的,下載地址:
將.so復制到dist-packages目錄下
sudo cp dlib.so /usr/local/lib/python2.7/dist-packages/1
最新的dlib18.18好像就沒有這個bat文件了,取而代之的是一個setup文件,那麼安裝起來應該就沒有這么麻煩了,大家可以去直接安裝18.18,也可以直接下載復制我的.so庫,這兩種方法應該都不麻煩~
有時候還會需要下面這兩個庫,建議大家一並安裝一下
9.安裝skimage
sudo apt-get install python-skimage1
10.安裝imtools
sudo easy_install imtools1
Dlib face landmarks Demo
環境配置結束之後,我們首先看一下dlib提供的示常式序
1.人臉檢測
dlib-18.17/python_examples/face_detector.py 源程序:
#!/usr/bin/python# The contents of this file are in the public domain. See LICENSE_FOR_EXAMPLE_PROGRAMS.txt## This example program shows how to find frontal human faces in an image. In# particular, it shows how you can take a list of images from the command# line and display each on the screen with red boxes overlaid on each human# face.## The examples/faces folder contains some jpg images of people. You can run# this program on them and see the detections by executing the# following command:# ./face_detector.py ../examples/faces/*.jpg## This face detector is made using the now classic Histogram of Oriented# Gradients (HOG) feature combined with a linear classifier, an image# pyramid, and sliding window detection scheme. This type of object detector# is fairly general and capable of detecting many types of semi-rigid objects# in addition to human faces. Therefore, if you are interested in making# your own object detectors then read the train_object_detector.py example# program. ### COMPILING THE DLIB PYTHON INTERFACE# Dlib comes with a compiled python interface for python 2.7 on MS Windows. If# you are using another python version or operating system then you need to# compile the dlib python interface before you can use this file. To do this,# run compile_dlib_python_mole.bat. This should work on any operating# system so long as you have CMake and boost-python installed.# On Ubuntu, this can be done easily by running the command:# sudo apt-get install libboost-python-dev cmake## Also note that this example requires scikit-image which can be installed# via the command:# pip install -U scikit-image# Or downloaded from . import sys
import dlib
from skimage import io
detector = dlib.get_frontal_face_detector()
win = dlib.image_window()
print("a");for f in sys.argv[1:]:
print("a");
print("Processing file: {}".format(f))
img = io.imread(f)
# The 1 in the second argument indicates that we should upsample the image
# 1 time. This will make everything bigger and allow us to detect more
# faces.
dets = detector(img, 1)
print("Number of faces detected: {}".format(len(dets))) for i, d in enumerate(dets):
print("Detection {}: Left: {} Top: {} Right: {} Bottom: {}".format(
i, d.left(), d.top(), d.right(), d.bottom()))
win.clear_overlay()
win.set_image(img)
win.add_overlay(dets)
dlib.hit_enter_to_continue()# Finally, if you really want to you can ask the detector to tell you the score# for each detection. The score is bigger for more confident detections.# Also, the idx tells you which of the face sub-detectors matched. This can be# used to broadly identify faces in different orientations.if (len(sys.argv[1:]) > 0):
img = io.imread(sys.argv[1])
dets, scores, idx = detector.run(img, 1) for i, d in enumerate(dets):
print("Detection {}, score: {}, face_type:{}".format(
d, scores[i], idx[i]))5767778798081
我把源代碼精簡了一下,加了一下注釋: face_detector0.1.py
# -*- coding: utf-8 -*-import sys
import dlib
from skimage import io#使用dlib自帶的frontal_face_detector作為我們的特徵提取器detector = dlib.get_frontal_face_detector()#使用dlib提供的圖片窗口win = dlib.image_window()#sys.argv[]是用來獲取命令行參數的,sys.argv[0]表示代碼本身文件路徑,所以參數從1開始向後依次獲取圖片路徑for f in sys.argv[1:]: #輸出目前處理的圖片地址
print("Processing file: {}".format(f)) #使用skimage的io讀取圖片
img = io.imread(f) #使用detector進行人臉檢測 dets為返回的結果
dets = detector(img, 1) #dets的元素個數即為臉的個數
print("Number of faces detected: {}".format(len(dets))) #使用enumerate 函數遍歷序列中的元素以及它們的下標
#下標i即為人臉序號
#left:人臉左邊距離圖片左邊界的距離 ;right:人臉右邊距離圖片左邊界的距離
#top:人臉上邊距離圖片上邊界的距離 ;bottom:人臉下邊距離圖片上邊界的距離
for i, d in enumerate(dets):
print("dets{}".format(d))
print("Detection {}: Left: {} Top: {} Right: {} Bottom: {}"
.format( i, d.left(), d.top(), d.right(), d.bottom())) #也可以獲取比較全面的信息,如獲取人臉與detector的匹配程度
dets, scores, idx = detector.run(img, 1)
for i, d in enumerate(dets):
print("Detection {}, dets{},score: {}, face_type:{}".format( i, d, scores[i], idx[i]))
#繪制圖片(dlib的ui庫可以直接繪制dets)
win.set_image(img)
win.add_overlay(dets) #等待點擊
dlib.hit_enter_to_continue()041424344454647484950
分別測試了一個人臉的和多個人臉的,以下是運行結果:
運行的時候把圖片文件路徑加到後面就好了
python face_detector0.1.py ./data/3.jpg12
一張臉的:
兩張臉的:
這里可以看出側臉與detector的匹配度要比正臉小的很多
2.人臉關鍵點提取
人臉檢測我們使用了dlib自帶的人臉檢測器(detector),關鍵點提取需要一個特徵提取器(predictor),為了構建特徵提取器,預訓練模型必不可少。
除了自行進行訓練外,還可以使用官方提供的一個模型。該模型可從dlib sourceforge庫下載:
arks.dat.bz2
也可以從我的連接下載:
這個庫支持68個關鍵點的提取,一般來說也夠用了,如果需要更多的特徵點就要自己去訓練了。
dlib-18.17/python_examples/face_landmark_detection.py 源程序:
#!/usr/bin/python# The contents of this file are in the public domain. See LICENSE_FOR_EXAMPLE_PROGRAMS.txt## This example program shows how to find frontal human faces in an image and# estimate their pose. The pose takes the form of 68 landmarks. These are# points on the face such as the corners of the mouth, along the eyebrows, on# the eyes, and so forth.## This face detector is made using the classic Histogram of Oriented# Gradients (HOG) feature combined with a linear
『貳』 如何獲取人臉 68個關鍵點 python代碼
可以使用OpenCV,OpenCV的人臉檢測功能在一般場合還是不錯的。而ubuntu正好提供了python-opencv這個包,用它可以方便地實現人臉檢測的代碼。 寫代碼之前應該先安裝python-opencv: #!/usr/bin/python# -*- coding: UTF-8 -*- # face_detect.py #...
『叄』 OpenCV-Python之——圖像SIFT特徵提取
在一定的范圍內,無論物體是大還是小,人眼都可以分辨出來。然而計算機要有相同的能力卻不是那麼的容易,在未知的場景中,計算機視覺並不能提供物體的尺度大小,其中的一種方法是把物體不同尺度下的圖像都提供給機器,讓機器能夠對物體在不同的尺度下有一個統一的認知。在建立統一認知的過程中,要考慮的就是在圖像在不同的尺度下都存在的特徵點。
在早期圖像的多尺度通常使用圖像金字塔表示形式。圖像金字塔是同一圖像在不同的解析度下得到的一組結果其生成過程一般包括兩個步驟:
多解析度的圖像金字塔雖然生成簡單,但其本質是降采樣,圖像的局部特徵則難以保持,也就是無法保持特徵的尺度不變性。
我們還可以通過圖像的模糊程度來模擬人在距離物體由遠到近時物體在視網膜上成像過程,距離物體越近其尺寸越大圖像也越模糊,這就是高斯尺度空間,使用不同的參數模糊圖像(解析度不變),是尺度空間的另一種表現形式。
構建尺度空間的目的是為了檢測出在不同的尺度下都存在的特徵點,而檢測特徵點較好的運算元是Δ^2G(高斯拉普拉斯,LoG)
使用LoG雖然能較好的檢測到圖像中的特徵點,但是其運算量過大,通常可使用DoG(差分高斯,Difference of Gaussina)來近似計算LoG。
從上式可以知道,將相鄰的兩個高斯空間的圖像相減就得到了DoG的響應圖像。為了得到DoG圖像,先要構建高斯尺度空間,而高斯的尺度空間可以在圖像金字塔降采樣的基礎上加上高斯濾波得到,也就是對圖像金字塔的每層圖像使用不同的參數σ進行高斯模糊,使每層金字塔有多張高斯模糊過的圖像。
如下圖,octave間是降采樣關系,且octave(i+1)的第一張(從下往上數)圖像是由octave(i)中德倒數第三張圖像降采樣得到。octave內的圖像大小一樣,只是高斯模糊使用的尺度參數不同。
對於一幅圖像,建立其在不同尺度scale下的圖像,也稱為octave,這是為了scale-invariant,也就是在任何尺度都能有對應的特徵點。下圖中右側的DoG就是我們構建的尺度空間。
為了尋找尺度空間的極值點,每一個采樣點要和它所有的相鄰點比較,看其是否比它的圖像域和尺度域的相鄰點大或者小。如圖所示,中間的檢測點和它同尺度的8個相鄰點和上下相鄰尺度對應的9×2個點共26個點比較,以確保在尺度空間和二維圖像空間都檢測到極值點。 一個點如果在DOG尺度空間本層以及上下兩層的26個領域中是最大或最小值時,就認為該點是圖像在該尺度下的一個特徵點。下圖中將叉號點要比較的26個點都標為了綠色。
找到所有特徵點後, 要去除低對比度和不穩定的邊緣效應的點 ,留下具有代表性的關鍵點(比如,正方形旋轉後變為菱形,如果用邊緣做識別,4條邊就完全不一樣,就會錯誤;如果用角點識別,則穩定一些)。去除這些點的好處是增強匹配的抗噪能力和穩定性。最後,對離散的點做曲線擬合,得到精確的關鍵點的位置和尺度信息。
近來不斷有人改進,其中最著名的有 SURF(計算量小,運算速度快,提取的特徵點幾乎與SIFT相同)和 CSIFT(彩色尺度特徵不變變換,顧名思義,可以解決基於彩色圖像的SIFT問題)。
其中sift.detectAndCompute()函數返回kp,des。
上圖dog的shape為(481, 500, 3),提取的特徵向量des的shape為(501, 128),501個128維的特徵點。
該方法可以在特徵點處繪制一個小圓圈。
https://blog.csdn.net/happyer88/article/details/45817305
https://www.jianshu.com/p/d94e558ebe26
https://www.cnblogs.com/wangguchangqing/p/4853263.html
『肆』 如何用Python實現簡單人臉識別
你可以使用opencv庫提供的人臉識別模塊,這樣子會比較快
『伍』 如何實現人臉識別及其原理
只要開人臉識別功能就行了 人臉識別其實很簡單,相機處理器對拍到的物體進行長寬比例的分析,分析出的數值接近人臉的比例就會自動鎖定,其實就是數學上的計算和比例,也許大家認為人臉差別很大,其實都是遵循著固定的比率的,只要不是畸形,不管胖瘦臉部的比例都是人臉特伍行有的那個值,所以即使是素描畫,相機一樣認為他是人臉,只要他的比例是對的
=IF(OR(P9=""),"",Q9&"."&R9&""&LEFT(S9,2)&"")
意思是當P9為空,就顯示空,否則顯示Q9為整數部份,&"."為加上一個小數點,小數部份為R9和S9的前兩位陣列成.這個公式里的OR和後&""是多餘的,寫成這樣就行=IF(P9="","",Q9&"."&R9&""&LEFT(S9,2))
Q9=30 R9=32 S9=1.3255在後面的單元格顯示30.3201,如果是當S9整數小於2位,就在前面添0,大於2位就顯示幾位整,那麼輸入
=Q9&"."&R9&IF(LEN(ROUNDDOWN(S9,0))<2,0&ROUNDDOWN(S9,0),ROUNDDOWN(S9,0))
適合啊,我同學做的就跟你一點差別,她是人臉識別,沒有表情。
據說,蘋果新品手機可以「在一百萬張臉中識別出你的肥臉」,還可以通過人臉識別解鎖手機,以及訂制動態3D Animojis 表情。
蘋果iPhoneX人臉識別是怎麼實現的呢?
這是一個復雜的技術問題......人臉識別主要包括人臉檢測、特徵提取、人臉分類三個過程。
簡單地說,就是通過人臉檢測,對五官進行一些關鍵點的定位,然後提取計算機能夠識別的人臉特徵,最後進行一個相似度的比對,從而得到一個人臉識別的結果,也就是判斷「刷臉」的是不是你本人。
讓人最為激動還是蘋果在取消home鍵後,替代Touch ID的Face ID功能。有了人臉識別技術加持,抬手秒解鎖iPhone的過程真的是更簡單也更迅速。
不僅如此,蘋果人臉識別解鎖的安全性、可靠性也非常高。運用3D結構光技術,iPhone X 能夠快速對「人臉3D建模」。即使使用者改變發型,戴上眼鏡帽子,或者在晚上,iPhone X都能成功解鎖。
人臉識別技術這么牛,那它是萬此橘蘆能的嗎?只要是人臉都可以識別、辨認出來么?其實,在進行人臉識別的時候,也存在一些難題,比如人的姿態、光照、遮擋等都會對人臉識別造成影響。
首先是面部捕捉。它根據人的頭部的部位進行判定,首先確定頭部,然後判斷眼睛和嘴巴等頭部特徵,通過特徵庫的比對,確認是面部,完成面部捕捉,ai可以這樣做。 不過個人以為這個技術並不好用,特別是在有不止一個人的場景上,比如大合照,對焦點經常亂跑,所以偶的相機基本還是放在中央對焦上,畢竟cpu再聰明,還是人腦更靠譜。。。
Mate9 Pro會支援人臉解鎖/識別功能,正在努力適配中。版本具體的更新資訊,請您關注花粉論壇官方通知。感謝您對華為產品的一貫支援。
你可以使用opencv庫提供的人臉識別模組,這樣子會比較快
具體操作方法:
1、首先你需要一個連線Windows10電腦和Kinect的介面卡;
2、然後還需要給系統做一個小手術以獲取Kinect Beta驅動更新:
- 按Win+R開森帶啟執行,輸入regedit回車開啟登錄檔編輯器;
- 導航至HKLMSofareMicrosoft
- 建立子鍵DriverFlightingPartner
3、在Partner子鍵中新建名為「TargetRing」的專案,將其值設定為「Drivers」。
不需要重啟電腦,之後你就可以在Windows Update或裝置管理器中更新Kinect Beta驅動了。
以上就是Windows10用Kinect實現人臉識別功能的方法了,這樣一來只要給連線一個Kinect就可以使用Windows10人臉識別功能,而不用更換電腦了。
是的,比如雲脈人臉識別中的人臉檢測技術就是採用三維定向,對人臉三維朝向,做精準到「度」的判斷,以及對人臉特徵點進行「畫素級」定位,輕松判斷眼睛開合狀態,還可通過技術對現有人臉識別做技術上的補充和完善,進而達到識別的創新性和嚴謹性。
操作方法:
1、首先你需要一個連線Windows10電腦和Kinect的介面卡;
2、然後還需要給系統做一個小手術以獲取Kinect Beta驅動更新:
- 按Win+R開啟執行,輸入regedit回車開啟登錄檔編輯器;
- 導航至HKLMSofareMicrosoft
- 建立子鍵DriverFlightingPartner
3、在Partner子鍵中新建名為「TargetRing」的專案,將其值設定為「Drivers」。
不需要重啟電腦,之後你就可以在Windows Update或裝置管理器中更新Kinect Beta驅動了。
以上就是Windows10用Kinect實現人臉識別功能的方法了,這樣一來只要給連線一個Kinect就可以使用Windows10人臉識別功能,而不用更換電腦了。
『陸』 如何用pca做人臉識別 python實現
基於特徵臉(PCA)的人臉識別方法
特徵臉方法是基於KL變換的人臉識別方法,KL變換是圖像壓縮的一種最優正交變換。高敗神維的圖像空間經過KL變換後得到一組新的正交基,保留其中重要的正交基,由這些基可以張成低維線性空間。如果假設人臉在這些低維線性空間的投影具有可分性,就可以將這些投影用作識別的特徵矢量,這就是特徵臉方法喊枯陸的基本思想。這些方法需要較多的訓練樣本,而且完全是基於圖像灰度的統計特性的。目前有一些改進型的特徵臉方法。
比如人臉灰度照片40x40=1600個像素點,用每個像素的灰度值組成的矩陣代表這個人的人臉。那麼這個人人臉就要1600 個特徵。拿一堆這樣的樣本過來做pca,抽取得到的只是在統計意義下能代表某個樣本的幾個特徵。
人臉識別可以採用神經網 絡深度學習的思路,國內的ColorReco在這邊有比較多的鄭頃案例。
『柒』 怎麼用python調取一個人臉識別 api
必備知識
Haar-like
通俗的來講,就是作為人臉特徵即可。
Haar特徵值反映了圖像的灰度變化情況。例如:臉部的一些特徵能由矩形特徵簡單的描述,如:眼睛要比臉頰顏色要深,鼻樑兩側比鼻樑顏色要深,嘴巴比周圍顏色要深等。
opencv api
要想使用opencv,就必須先知道其能幹什麼,怎麼做。於是API的重要性便體現出來了。就本例而言,使用到的函數很少,也就普通的讀取圖片,灰度轉換,顯示圖像,簡單的編輯圖像罷了。
如下:
讀取圖片
只需要給出待操作的圖片的路徑即可。
import cv2
image = cv2.imread(imagepath)
灰度轉換
灰度轉換的作用就是:轉換成灰度的圖片的計算強度得以降低。
import cv2
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
畫圖
opencv 的強大之處的一個體現就是其可以對圖片進行任意編輯,處理。
下面的這個函數最後一個參數指定的就是畫筆的大小。
import cv2
cv2.rectangle(image,(x,y),(x+w,y+w),(0,255,0),2)
顯示圖像
編輯完的圖像要麼直接的被顯示出來,要麼就保存到物理的存儲介質。
import cv2
cv2.imshow("Image Title",image)
獲取人臉識別訓練數據
看似復雜,其實就是對於人臉特徵的一些描述,這樣opencv在讀取完數據後很據訓練中的樣品數據,就可以感知讀取到的圖片上的特徵,進而對圖片進行人臉識別。
import cv2
face_cascade = cv2.CascadeClassifier(r'./haarcascade_frontalface_default.xml')
里賣弄的這個xml文件,就是opencv在GitHub上共享出來的具有普適的訓練好的數據。我們可以直接的拿來使用。
訓練數據參考地址:
探測人臉
說白了,就是根據訓練的數據來對新圖片進行識別的過程。
import cv2
# 探測圖片中的人臉
faces = face_cascade.detectMultiScale(
gray,
scaleFactor = 1.15,
minNeighbors = 5,
minSize = (5,5),
flags = cv2.cv.CV_HAAR_SCALE_IMAGE
)
我們可以隨意的指定裡面參數的值,來達到不同精度下的識別。返回值就是opencv對圖片的探測結果的體現。
處理人臉探測的結果
結束了剛才的人臉探測,我們就可以拿到返回值來做進一步的處理了。但這也不是說會多麼的復雜,無非添加點特徵值罷了。
import cv2
print "發現{0}個人臉!".format(len(faces))
for(x,y,w,h) in faces:
cv2.rectangle(image,(x,y),(x+w,y+w),(0,255,0),2)
實例
有了剛才的基礎,我們就可以完成一個簡單的人臉識別的小例子了。
圖片素材
下面的這張圖片將作為我們的檢測依據。
人臉檢測代碼
# coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
# __author__ = '郭 璞'
# __date__ = '2016/9/5'
# __Desc__ = 人臉檢測小例子,以圓圈圈出人臉
import cv2
# 待檢測的圖片路徑
imagepath = r'./heat.jpg'
# 獲取訓練好的人臉的參數數據,這里直接從GitHub上使用默認值
face_cascade = cv2.CascadeClassifier(r'./haarcascade_frontalface_default.xml')
# 讀取圖片
image = cv2.imread(imagepath)
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
# 探測圖片中的人臉
faces = face_cascade.detectMultiScale(
gray,
scaleFactor = 1.15,
minNeighbors = 5,
minSize = (5,5),
flags = cv2.cv.CV_HAAR_SCALE_IMAGE
)
print "發現{0}個人臉!".format(len(faces))
for(x,y,w,h) in faces:
# cv2.rectangle(image,(x,y),(x+w,y+w),(0,255,0),2)
cv2.circle(image,((x+x+w)/2,(y+y+h)/2),w/2,(0,255,0),2)
cv2.imshow("Find Faces!",image)
cv2.waitKey(0)
人臉檢測結果
輸出圖片:
輸出結果:
D:\Software\Python2\python.exe E:/Code/Python/DataStructor/opencv/Demo.py
發現3個人臉!
『捌』 3.5人臉特徵碼怎麼弄
3.5人臉特徵碼怎麼弄:
先利用StyleGAN生成的特徵碼和生成的人臉圖或銀指像訓練一個網路,把人臉圖像作為輸入,把特徵碼作為輸出,理論上可以得到一個StyleGAN的逆向網路模型,如果訓練成功的話,這個模型可以自動將人臉圖像轉換為特徵碼。
利用真實人臉圖像對上面得到的模型進行進一步訓練和「微調」,使之能夠用於真實人臉的特徵碼提取。
我們有StyleGAN和經過訓練後的人臉生成模型 karras2019stylegan-ffhq-1024x1024.pkl。
我們也構造了StyleGAN的逆向網路lotus,並且lotus經過訓練優化後的accuracy = 0.9501;用lotus生成的人臉圖片的dlatents,再次使用StyleGAN。
其生成的人臉圖片與原始圖片具有高度的相似性;
能否按照「真實人衫配臉-->lotus-->dlatents-->StyleGAN-->生成圖片」的順搏和序構造一個可訓練的神經網路(其中:StyleGAN使用經過訓練後的人臉生成模型 karras2019stylegan-ffhq-1024x1024.pkl 且保持不變。
把生成圖片和真實人臉轉換為向量作為X_train、Y_train並比較它們的差異(mean_squared_erro)),然後訓練這個網路,得到一個適用於真實人臉圖片的新lotus模型。
『玖』 python人臉識別所用的優化演算法有什麼
python三步實現人臉識別
Face Recognition軟體包
這是世界上最簡單的人臉識別庫了。你可以通過Python引用或者命令行的形式使用它,來管理和識別人臉。
該軟體包使用dlib中最先進的人臉識別深度學習演算法,使得識別准確率在《Labled Faces in the world》測試基準下達到了99.38%。
它同時提供了一個叫face_recognition的命令行工具,以便你可以用命令行對一個文件夾中的圖片進行識別操作。
特性
在圖片中識別人臉
找到圖片中所有的人臉
這里是一個例子:
1