⑴ 那位大神能告訴我「人臉識別」思路c#寫需要用到什麼
您好,是這樣的:
① 人臉檢測與分割。從任意的場景中、視頻數據中檢測人臉的存在,提取出一個人臉及各個區域部分。在人臉上自動標記出我們需要的特徵點, 例如外眼點、內眼點、眉間點、鼻下點、頜下點、嘴角點,等等。這個領域的研究目前已經出現了許多的成熟的方法,在這里就不一一介紹了。
② 人臉的規范化。計算出人臉在尺度和旋轉等方面的變化,得到攝像過程中人臉的實際位置,將庫中的人臉三維模型也變化到同樣的位置。這是幾何特徵識別的一個關鍵的問題。由於人臉的幾何特徵的相似性比較,受人臉拍攝角度的影響很大,當人臉偏轉超過一定的角度的時候,許多重要的特徵點在二維上不可見了,因此也無法計算出對應的特徵向量。如果不能將人臉模型和照片保持在同樣的偏轉環境下,識別的可信性就不具備。
③ 人臉表徵。採用標記出的特徵點的幾何特性(例如:特徵點分布歐氏距離、B樣條曲面等方法)表示出資料庫中的已知人臉和檢測出的人臉。對同一個照片的特徵點採取多層次描述的方法,形成多個幾何特徵向量,這種多層次描述的方法可以有效的降低人臉識別過程中的誤識現象的出現。同樣,識別的過程也是採取多分類器合作的模式識別方法。
④ 人臉識別。根據獲得的人臉照片特徵點,計算出人臉的偏轉角度,同時計算出多個特徵向量,從資料庫中取出已知的人臉特徵點信息,構建出三維人臉特徵點拓撲模型,對此模型進行偏轉,使之與二維人臉照片的拍攝環境一致。計算出三維模型的多個特徵向量,通過面貌特徵的多層次描述、多分類器合作的模式識別方法,對投影結果與二維相應照片進行相似性度量。在進行識別時,對每個分類器設定一個閥值,對所有的特徵向量的結果也設置一個閥值,一旦所有的度量結果都達到閥值的要求,即認定此次識別是成功的,否則繼續從資料庫中讀數據,進行識別。
⑵ 對於人臉圖像,應該怎麼來提取特徵向量
http://wenku..com/view/20556451f01dc281e53af088.html
⑶ 有一張人臉的側臉圖像,如何用python及相關的庫來計算人臉轉過的角度。
這個很難辦到,不過可以通過判斷關鍵點的特點進行判斷,但是准確率不高
前言
很多人都認為人臉識別是一項非常難以實現的工作,看到名字就害怕,然後心懷忐忑到網上一搜,看到網上N頁的教程立馬就放棄了。這些人里包括曾經的我自己。其實如果如果你不是非要深究其中的原理,只是要實現這一工作的話,人臉識別也沒那麼難。今天我們就來看看如何在40行代碼以內簡單地實現人臉識別。
一點區分
對於大部分人來說,區分人臉檢測和人臉識別完全不是問題。但是網上有很多教程有無無意地把人臉檢測說成是人臉識別,誤導群眾,造成一些人認為二者是相同的。其實,人臉檢測解決的問題是確定一張圖上有木有人臉,而人臉識別解決的問題是這個臉是誰的。可以說人臉檢測是是人識別的前期工作。今天我們要做的是人臉識別。
所用工具
Anaconda 2——Python 2
Dlib
scikit-image
Dlib
對於今天要用到的主要工具,還是有必要多說幾句的。Dlib是基於現代C++的一個跨平台通用的框架,作者非常勤奮,一直在保持更新。Dlib內容涵蓋機器學習、圖像處理、數值演算法、數據壓縮等等,涉獵甚廣。更重要的是,Dlib的文檔非常完善,例子非常豐富。就像很多庫一樣,Dlib也提供了Python的介面,安裝非常簡單,用pip只需要一句即可:
pip install dlib
上面需要用到的scikit-image同樣只是需要這么一句:
pip install scikit-image
註:如果用pip install dlib安裝失敗的話,那安裝起來就比較麻煩了。錯誤提示很詳細,按照錯誤提示一步步走就行了。
人臉識別
之所以用Dlib來實現人臉識別,是因為它已經替我們做好了絕大部分的工作,我們只需要去調用就行了。Dlib裡面有人臉檢測器,有訓練好的人臉關鍵點檢測器,也有訓練好的人臉識別模型。今天我們主要目的是實現,而不是深究原理。感興趣的同學可以到官網查看源碼以及實現的參考文獻。今天的例子既然代碼不超過40行,其實是沒啥難度的。有難度的東西都在源碼和論文里。
首先先通過文件樹看一下今天需要用到的東西:
准備了六個候選人的圖片放在candidate-faces文件夾中,然後需要識別的人臉圖片test.jpg。我們的工作就是要檢測到test.jpg中的人臉,然後判斷她到底是候選人中的誰。另外的girl-face-rec.py是我們的python腳本。shape_predictor_68_face_landmarks.dat是已經訓練好的人臉關鍵點檢測器。dlib_face_recognition_resnet_model_v1.dat是訓練好的ResNet人臉識別模型。ResNet是何凱明在微軟的時候提出的深度殘差網路,獲得了 ImageNet 2015 冠軍,通過讓網路對殘差進行學習,在深度和精度上做到了比
CNN 更加強大。
1. 前期准備
shape_predictor_68_face_landmarks.dat和dlib_face_recognition_resnet_model_v1.dat都可以在這里找到。
然後准備幾個人的人臉圖片作為候選人臉,最好是正臉。放到candidate-faces文件夾中。
本文這里准備的是六張圖片,如下:
她們分別是
然後准備四張需要識別的人臉圖像,其實一張就夠了,這里只是要看看不同的情況:
可以看到前兩張和候選文件中的本人看起來還是差別不小的,第三張是候選人中的原圖,第四張圖片微微側臉,而且右側有陰影。
2.識別流程
數據准備完畢,接下來就是代碼了。識別的大致流程是這樣的:
3.代碼
代碼不做過多解釋,因為已經注釋的非常完善了。以下是girl-face-rec.py
# -*- coding: UTF-8 -*-
import sys,os,dlib,glob,numpy
from skimage import io
if len(sys.argv) != 5:
print "請檢查參數是否正確"
exit()
# 1.人臉關鍵點檢測器
predictor_path = sys.argv[1]
# 2.人臉識別模型
face_rec_model_path = sys.argv[2]
# 3.候選人臉文件夾
faces_folder_path = sys.argv[3]
# 4.需識別的人臉
img_path = sys.argv[4]
# 1.載入正臉檢測器
detector = dlib.get_frontal_face_detector()
# 2.載入人臉關鍵點檢測器
sp = dlib.shape_predictor(predictor_path)
# 3. 載入人臉識別模型
facerec = dlib.face_recognition_model_v1(face_rec_model_path)
# win = dlib.image_window()
# 候選人臉描述子list
descriptors = []
# 對文件夾下的每一個人臉進行:
# 1.人臉檢測
# 2.關鍵點檢測
# 3.描述子提取
for f in glob.glob(os.path.join(faces_folder_path, "*.jpg")):
print("Processing file: {}".format(f))
img = io.imread(f)
#win.clear_overlay()
#win.set_image(img)
# 1.人臉檢測
dets = detector(img, 1)
print("Number of faces detected: {}".format(len(dets)))
for k, d in enumerate(dets):
# 2.關鍵點檢測
shape = sp(img, d)
# 畫出人臉區域和和關鍵點
# win.clear_overlay()
# win.add_overlay(d)
# win.add_overlay(shape)
# 3.描述子提取,128D向量
face_descriptor = facerec.compute_face_descriptor(img, shape)
# 轉換為numpy array
v = numpy.array(face_descriptor)
descriptors.append(v)
# 對需識別人臉進行同樣處理
# 提取描述子,不再注釋
img = io.imread(img_path)
dets = detector(img, 1)
dist = []
for k, d in enumerate(dets):
shape = sp(img, d)
face_descriptor = facerec.compute_face_descriptor(img, shape)
d_test = numpy.array(face_descriptor)
# 計算歐式距離
for i in descriptors:
dist_ = numpy.linalg.norm(i-d_test)
dist.append(dist_)
# 候選人名單
candidate = ['Unknown1','Unknown2','Shishi','Unknown4','Bingbing','Feifei']
# 候選人和距離組成一個dict
c_d = dict(zip(candidate,dist))
cd_sorted = sorted(c_d.iteritems(), key=lambda d:d[1])
print "\n The person is: ",cd_sorted[0][0]
dlib.hit_enter_to_continue()
4.運行結果
我們在.py所在的文件夾下打開命令行,運行如下命令
python girl-face-rec.py 1.dat 2.dat ./candidate-faecs test1.jpg
由於shape_predictor_68_face_landmarks.dat和dlib_face_recognition_resnet_model_v1.dat名字實在太長,所以我把它們重命名為1.dat和2.dat。
運行結果如下:
The person is Bingbing。
記憶力不好的同學可以翻上去看看test1.jpg是誰的圖片。有興趣的話可以把四張測試圖片都運行下試試。
這里需要說明的是,前三張圖輸出結果都是非常理想的。但是第四張測試圖片的輸出結果是候選人4。對比一下兩張圖片可以很容易發現混淆的原因。
機器畢竟不是人,機器的智能還需要人來提升。
有興趣的同學可以繼續深入研究如何提升識別的准確率。比如每個人的候選圖片用多張,然後對比和每個人距離的平均值之類的。全憑自己了。
⑷ 用Keras生成面部Python實現
可採用的機器學習數據集:
兩者都包含人臉圖像。我把這兩個組合成一個文件夾。
最常聽到的兩種圖像生成技術是生成對抗網路(GAN)和LSTM網路。
LSTM訓練的時候速度非常慢,GAN訓練會快得多。實際結果花不到半小時,模糊的面孔就會開始出現。隨著時間的推移,圖像會更加逼真。
有許多GAN變種。我使用的一種稱為深度卷積神經網路(DCGAN)。DCGAN的優點在於它使用了卷積層。卷積神經網路目前是存在的最佳圖像分類演算法。
生成對抗網路是由一位名叫Ian Goodfellow的研究員發明的,並於2014年引入了GAN。
GAN非常強大。利用正確的數據,網路架構和超參數,您可以生成非常逼真的圖像。
將來,一些高級版本的GAN或其他一些內容生成演算法可能會讓我們做一些很酷的事情:
但GAN是如何運作的呢?
GAN實際上不是一個神經網路,而是兩個。其中之一是Generator。它將隨機值作為輸入並生成圖像。
第二是discriminator。它試圖確定圖像是假的還是真的。
訓練GAN就像一場競賽。Generator試圖在愚弄discriminator時變得盡可能好。discriminator試圖盡可能地將假圖像與真實圖像分開。
這將迫使他們兩個都改善。理想情況下,這將在某種程度上導致以下情況:
在現實中,您需要確保一切正常(數據、體系結構、超參數)。GAN對超參數值的微小變化非常敏感。
導入庫
第一步是導入所有需要的Python庫。
FaceGenerator類
這段Python代碼初始化了訓練所需的一些重要變數。
將訓練數據載入到模型中
此函數將文件夾的名稱作為輸入,並將該文件夾中的所有圖像作為numpy數組返回。所有圖像的大小都調整為__init__函數中指定的大小。
Shape=(圖像的數量,寬度,高度,通道)。
神經網路
這兩個函數定義了generator和discriminator。
神經網路模型訓練
對於每個epoch:
訓練結束後:
此函數可用於在訓練後生成新圖像。
訓練GAN很難,當你成功時,這種感覺會非常有益。
此Python代碼可以輕松用於其他圖像數據集。請記住,您可能需要編輯網路體系結構和參數,具體取決於您嘗試生成的圖像。
⑸ python人臉識別所用的優化演算法有什麼
python三步實現人臉識別
Face Recognition軟體包
這是世界上最簡單的人臉識別庫了。你可以通過Python引用或者命令行的形式使用它,來管理和識別人臉。
該軟體包使用dlib中最先進的人臉識別深度學習演算法,使得識別准確率在《Labled Faces in the world》測試基準下達到了99.38%。
它同時提供了一個叫face_recognition的命令行工具,以便你可以用命令行對一個文件夾中的圖片進行識別操作。
特性
在圖片中識別人臉
找到圖片中所有的人臉
這里是一個例子:
1⑹ 如何線上部署用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
⑺ 爆肝!用Python製作抖音爆款視頻!
前幾天我在抖音上刷到一個慢慢變老的視頻,播放量居然有 30W+,當時就在想這視頻 Python 可不可以做?經過一番搜索,我找到了騰訊雲的人臉年齡變化 API,上面介紹說只要用戶上傳一張人臉圖片,基於人臉編輯與生成演算法,就可以輸出一張人臉變老或變年輕的圖片,並支持實現人臉不同年齡的變化。
第一步,在注冊賬號之後,打開 API 密鑰管理頁面( https://console.cloud.tencent.com/cam/capi )獲取到 SecretId 和 SecretKey。
第二步,安裝騰訊雲的 SDK
在人臉年齡變化 API 中有一個 AgeInfo 參數,它包含了 Age 和 FaceRect 兩個屬性,其中 FaceRect 屬性必須填人臉在照片中基於左上角的 X、Y 坐標和人臉的高度與寬度。所以先要調用人臉檢測與分析 API 得到這些數據。
下面的示例圖是在網路圖片中截取的。
示例結果
在上面已經得到了各個人臉的 X、Y、Width、Height 屬性,加上變老的年齡 Age,就可以請求年齡變化 API 了。
這里需要注意的是 models 模塊,人臉檢測 models 模塊是在 tencentcloud.iai.v20200303 包下,人臉年齡變化的 models 是在 tencentcloud.ft.v20200304 下,兩個 models 模塊並不兼容。
示例結果
最後的視頻可以將圖片一張一張插入 PPT 幻燈片,點擊保存為視頻。
用 Python 製作抖音素材,下一個 30W+ 播放量等著你。
⑻ LVQ神經網路的預測---人臉朝向識別,人臉特徵向量提取具體的做法
第一你匿名 第二你沒有給分 第三這裡面牽扯到模式識別和機器學習的很有技術含量的問題
我本來想告訴你的 看你沒啥誠意 就決定忍了
⑼ 人臉識別演算法的簡介
人臉識別(Facial Recognition),就是通過視頻採集設備獲取用戶的面部圖像,再利用核心的演算法對其臉部的五官位置、臉型和角度進行計算分析,進而和自身資料庫里已有的範本進行比對,後判斷出用戶的真實身份。人臉識別技術基於局部特徵區域的單訓練樣本人臉識別方法。第一步,需要對局部區域進行定義;第二步,人臉局部區域特徵的提取,依據經過樣本訓練後得到的變換矩陣將人臉圖像向量映射為人臉特徵向量;第三步,局部特徵選擇(可選);後一步是進行分類。分類器多採用組合分類器的形式,每個局部特徵 對應一個分類器,後可用投票或線性加權等方式得到終識別結果。 人臉識別綜合運用了數字圖像/視頻處理、模式識別、計算機視覺等多種技術,核心技 術是人臉識別演算法。目前人臉識別的演算法有 4 種:基於人臉特徵點的識別演算法、基於整幅 人臉圖像的識別演算法、基於模板的識別演算法、利用神經網路進行識別的演算法。
作為人臉識別的第一步,人臉檢測所進行的工作是將人臉從圖像背景中檢測出來,由於受圖像背景、亮度變化以及人的頭部姿勢等因素影響使人臉檢測成為一項復雜研究內容。檢測定位:檢測是判別一幅圖像中是否存在人臉,定位則是給出人臉在圖像中的位置。定位後得到的臉部圖像信息是測量空間的模式,要進行識別工作,首先要將測量空間中的數據映射到特徵空間中。採用主分量分析方法,原理是將一高維向量,通過一個特殊的特徵向量矩陣,投影到一個低維的向量空間中,表徵為一個低維向量,並且僅僅損失一些次要信息。通過對經過檢測和定位過的人臉圖像進行特徵提取操作可以達到降低圖像維數,從而可以減小識別計算量,提高識別精度的作用。人臉識別系統採用基於特徵臉的主 成分分析法(PCA),根據一組人臉訓練樣本構造主元子空間,檢測時,將測試圖像投影到 主元空間上,得到一組投影系數,再和各已知的人臉圖像模式比較,從而得到檢測結果。