pythonopencv人臉檢測
❶ 關於python中 人臉檢測中的問題
打錯了,前面是face後面是faces
❷ 誰用過python中的第三方庫face recognition
簡介
該庫可以通過python或者命令行即可實現人臉識別的功能。使用dlib深度學習人臉識別技術構建,在戶外臉部檢測資料庫基準(Labeled Faces in the Wild)上的准確率為99.38%。
在github上有相關的鏈接和API文檔。
在下方為提供的一些相關源碼或是文檔。當前庫的版本是v0.2.0,點擊docs可以查看API文檔,我們可以查看一些函數相關的說明等。
安裝配置
安裝配置很簡單,按照github上的說明一步一步來就可以了。
根據你的python版本輸入指令:
pip install face_recognition11
或者
pip3 install face_recognition11
正常來說,安裝過程中會出錯,會在安裝dlib時出錯,可能報錯也可能會卡在那不動。因為pip在編譯dlib時會出錯,所以我們需要手動編譯dlib再進行安裝。
按照它給出的解決辦法:
1、先下載下來dlib的源碼。
git clone
2、編譯dlib。
cd dlib
mkdir build
cd build
cmake .. -DDLIB_USE_CUDA=0 -DUSE_AVX_INSTRUCTIONS=1
cmake --build1234512345
3、編譯並安裝python的拓展包。
cd ..
python3 setup.py install --yes USE_AVX_INSTRUCTIONS --no DLIB_USE_CUDA1212
注意:這個安裝步驟是默認認為沒有GPU的,所以不支持cuda。
在自己手動編譯了dlib後,我們可以在python中import dlib了。
之後再重新安裝,就可以配置成功了。
根據你的python版本輸入指令:
pip install face_recognition11
或者
pip3 install face_recognition11
安裝成功之後,我們可以在python中正常import face_recognition了。
編寫人臉識別程序
編寫py文件:
# -*- coding: utf-8 -*-
#
# 檢測人臉
import face_recognition
import cv2
# 讀取圖片並識別人臉
img = face_recognition.load_image_file("silicon_valley.jpg")
face_locations = face_recognition.face_locations(img)
print face_locations
# 調用opencv函數顯示圖片
img = cv2.imread("silicon_valley.jpg")
cv2.namedWindow("原圖")
cv2.imshow("原圖", img)
# 遍歷每個人臉,並標注
faceNum = len(face_locations)
for i in range(0, faceNum):
top = face_locations[i][0]
right = face_locations[i][1]
bottom = face_locations[i][2]
left = face_locations[i][3]
start = (left, top)
end = (right, bottom)
color = (55,255,155)
thickness = 3
cv2.rectangle(img, start, end, color, thickness)
# 顯示識別結果
cv2.namedWindow("識別")
cv2.imshow("識別", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
注意:這里使用了python-OpenCV,一定要配置好了opencv才能運行成功。
運行結果:
程序會讀取當前目錄下指定的圖片,然後識別其中的人臉,並標注每個人臉。
(使用圖片來自美劇矽谷)
編寫人臉比對程序
首先,我在目錄下放了幾張圖片:
這里用到的是一張喬布斯的照片和一張奧巴馬的照片,和一張未知的照片。
編寫程序:
# 識別圖片中的人臉
import face_recognition
jobs_image = face_recognition.load_image_file("jobs.jpg");
obama_image = face_recognition.load_image_file("obama.jpg");
unknown_image = face_recognition.load_image_file("unknown.jpg");
jobs_encoding = face_recognition.face_encodings(jobs_image)[0]
obama_encoding = face_recognition.face_encodings(obama_image)[0]
unknown_encoding = face_recognition.face_encodings(unknown_image)[0]
results = face_recognition.compare_faces([jobs_encoding, obama_encoding], unknown_encoding )
labels = ['jobs', 'obama']
print('results:'+str(results))
for i in range(0, len(results)):
if results[i] == True:
print('The person is:'+labels[i])
運行結果:
識別出未知的那張照片是喬布斯的。
攝像頭實時識別
代碼:
# -*- coding: utf-8 -*-
import face_recognition
import cv2
video_capture = cv2.VideoCapture(1)
obama_img = face_recognition.load_image_file("obama.jpg")
obama_face_encoding = face_recognition.face_encodings(obama_img)[0]
face_locations = []
face_encodings = []
face_names = []
process_this_frame = True
while True:
ret, frame = video_capture.read()
small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25)
if process_this_frame:
face_locations = face_recognition.face_locations(small_frame)
face_encodings = face_recognition.face_encodings(small_frame, face_locations)
face_names = []
for face_encoding in face_encodings:
match = face_recognition.compare_faces([obama_face_encoding], face_encoding)
if match[0]:
name = "Barack"
else:
name = "unknown"
face_names.append(name)
process_this_frame = not process_this_frame
for (top, right, bottom, left), name in zip(face_locations, face_names):
top *= 4
right *= 4
bottom *= 4
left *= 4
cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)
cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 0, 255), 2)
font = cv2.FONT_HERSHEY_DUPLEX
cv2.putText(frame, name, (left+6, bottom-6), font, 1.0, (255, 255, 255), 1)
cv2.imshow('Video', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
video_capture.release()
cv2.destroyAllWindows()5455
識別結果:
我直接在手機上網路了幾張圖試試,程序識別出了奧巴馬。
這個庫很cool啊!
❸ 夢想青創人臉識別怎麼弄
夢想青創人臉識別可按以下步驟進行。
1、安裝python的依賴包,下載anaconda。
2、安裝OpenCV。
3、安裝face_recognition,將攝像頭打開,開始捕捉畫面,尋找畫面中出現的人臉圖像,提取出人臉圖像中的特徵即可。
❹ html如何調用python的opencv人臉識別
html嵌入python代碼(python做人臉識別)
2022-07-31 14:19:00閱讀 2300
大家好,又見面了,我是你們的朋友全棧君。
最近閑來無事,研究研究在安卓上跑Python。
想起以前玩過的kivy技術,kivy[1]是一個跨平台的UI框架。當然對我們最有用的是,kivy可以把python代碼打包成安卓App。但是由於安卓打包的工具鏈很長,包括android sdk打包java代碼、ndk編譯python、 編譯各種python依賴包,經常花一整天從入門到放棄。這次使出認真研究的心態,終於找到一個解決方案,於是有了這篇文章:
•只要會python就能寫安卓App,無需安卓開發基礎,無需編譯•手機上也有互動式python解釋器,直接調試python代碼•可以使用各種python庫,包括numpy/opencv等機器學習包•可以與安卓介面交互,使用手機硬體,比如攝像頭
那麼我們就以人臉識別App為例,看看如何簡單幾步搞定。先看看成品的效果:
第一步:安裝airport.apk
AirPort是我編譯好的一個安卓App,裡麵包含了python解釋器和一些常用的python庫。
第二步:連接手機的python解釋器
啟動手機上的AirPort應用,就會運行python解釋器。我內置了一個ssh伺服器,用於調試代碼非常方便。應用啟動時會顯示手機的ip地址。
在電腦上使用ssh命令,就可以連接到手機。
注意:確保你的手機和電腦在同一區域網中。
#在電腦上連接手機,注意這里ip需要替換成AirPort顯示的ipssh -p 8000 [email protected]#輸入密碼meteorix
然後你就可以在手機上盡情使用python了,比如試試
>>>import os>>>os.getcwd()』/data/data/org.airtest.airport/files/app』>>>import requests>>>r = requests.get(「https://www..com」)>>>r.status_code200
第三步: 一個攝像頭的App
在kivy的官方文檔中,我們可以找到這樣一個攝像頭的example[2]
代碼非常簡單,Builder.load_string函數載入了一段配
❺ 怎麼用vs打開opencv人臉檢測
OpenCV安裝目錄中的data
haarcascades目錄下的haarcascade_frontalface_alt.xml與haarcascade_frontalface_alt2.xml都是用來檢測人臉的Haar分類器,找到他,復制到自己的工程目錄下,運行如下代碼:
#include<opencv.hpp>
usingnamespacecv;
intmain(){
intnRetCode=0;//////////////
constchar*pstrCascadeFileName="haarcascades/haarcascade_frontalface_alt2.xml";
CvHaarClassifierCascade*pHaarCascade=NULL;
pHaarCascade=(CvHaarClassifierCascade*)cvLoad(pstrCascadeFileName);
//載入圖像
constchar*pstrImageName="./image/1.jpg";
IplImage*pSrcImage=cvLoadImage(pstrImageName,CV_LOAD_IMAGE_UNCHANGED);
IplImage*pGrayImage=cvCreateImage(cvGetSize(pSrcImage),IPL_DEPTH_8U,1);
cvCvtColor(pSrcImage,pGrayImage,CV_BGR2GRAY);//人臉識別與標記
if(pHaarCascade!=NULL){
CvScalarFaceCirclecolors[]={{{0,0,255}},{{0,128,255}},{{0,255,255}},{{0,255,0}},{{255,128,0}},{{255,255,0}},{{255,0,0}},{{255,0,255}}
};
CvMemStorage*pcvMStorage=cvCreateMemStorage(0);
cvClearMemStorage(pcvMStorage);//識別
DWORDdwTimeBegin,dwTimeEnd;
dwTimeBegin=GetTickCount();
CvSeq*pcvSeqFaces=cvHaarDetectObjects(pGrayImage,pHaarCascade,pcvMStorage);
dwTimeEnd=GetTickCount();
//標記
for(inti=0;i<pcvSeqFaces->total;i++){
CvRect*r=(CvRect*)cvGetSeqElem(pcvSeqFaces,i);
CvPointcenter;
intradius;
center.x=cvRound((r->x+r->width*0.5));
center.y=cvRound((r->y+r->height*0.5));
radius=cvRound((r->width+r->height)*0.25);
cvCircle(pSrcImage,center,radius,FaceCirclecolors[i%8],2);
}
cvReleaseMemStorage(&pcvMStorage);
}
constchar*pstrWindowsTitle="人臉識別";
cvNamedWindow(pstrWindowsTitle,CV_WINDOW_AUTOSIZE);
cvShowImage(pstrWindowsTitle,pSrcImage);
cvWaitKey(0);
cvDestroyWindow(pstrWindowsTitle);
cvReleaseImage(&pSrcImage);
cvReleaseImage(&pGrayImage);
return0
}
❻ 怎樣使用OpenCV進行人臉識別
1.1.介紹Introction
從OpenCV2.4開始,加入了新的類FaceRecognizer,我們可以使用它便捷地進行人臉識別實驗。本文既介紹代碼使用,又介紹演算法原理。(他寫的源代碼,我們可以在OpenCV的opencv\moles\contrib\doc\facerec\src下找到,當然也可以在他的github中找到,如果你想研究源碼,自然可以去看看,不復雜)
目前支持的演算法有
Eigenfaces特徵臉createEigenFaceRecognizer()
Fisherfaces createFisherFaceRecognizer()
LocalBinary Patterns Histograms局部二值直方圖 createLBPHFaceRecognizer()
下面所有的例子中的代碼在OpenCV安裝目錄下的samples/cpp下面都能找到,所有的代碼商用或者學習都是免費的。
1.2.人臉識別Face Recognition
對人類來說,人臉識別很容易。文獻[Tu06]告訴我們,僅僅是才三天的嬰兒已經可以區分周圍熟悉的人臉了。那麼對於計算機來說,到底有多難?其實,迄今為止,我們對於人類自己為何可以區分不同的人所知甚少。是人臉內部特徵(眼睛、鼻子、嘴巴)還是外部特徵(頭型、發際線)對於人類識別更有效?我們怎麼分析一張圖像,大腦是如何對它編碼的?David Hubel和TorstenWiesel向我們展示,我們的大腦針對不同的場景,如線、邊、角或者運動這些局部特徵有專門的神經細胞作出反應。顯然我們沒有把世界看成零散的塊塊,我們的視覺皮層必須以某種方式把不同的信息來源轉化成有用的模式。自動人臉識別就是如何從一幅圖像中提取有意義的特徵,把它們放入一種有用的表示方式,然後對他們進行一些分類。基於幾何特徵的人臉的人臉識別可能是最直觀的方法來識別人臉。第一個自動人臉識別系統在[Kanade73]中又描述:標記點(眼睛、耳朵、鼻子等的位置)用來構造一個特徵向量(點與點之間的距離、角度等)。通過計算測試和訓練圖像的特徵向量的歐氏距離來進行識別。這樣的方法對於光照變化很穩健,但也有巨大的缺點:標記點的確定是很復雜的,即使是使用最先進的演算法。一些幾何特徵人臉識別近期工作在文獻[Bru92]中有描述。一個22維的特徵向量被用在一個大資料庫上,單靠幾何特徵不能提供足夠的信息用於人臉識別。
特徵臉方法在文獻[TP91]中有描述,他描述了一個全面的方法來識別人臉:面部圖像是一個點,這個點是從高維圖像空間找到它在低維空間的表示,這樣分類變得很簡單。低維子空間低維是使用主元分析(Principal Component Analysis,PCA)找到的,它可以找擁有最大方差的那個軸。雖然這樣的轉換是從最佳重建角度考慮的,但是他沒有把標簽問題考慮進去。[gm:讀懂這段需要一些機器學習知識]。想像一個情況,如果變化是基於外部來源,比如光照。軸的最大方差不一定包含任何有鑒別性的信息,因此此時的分類是不可能的。因此,一個使用線性鑒別(Linear Discriminant Analysis,LDA)的特定類投影方法被提出來解決人臉識別問題[BHK97]。其中一個基本的想法就是,使類內方差最小的同時,使類外方差最大。
近年來,各種局部特徵提取方法出現。為了避免輸入的圖像的高維數據,僅僅使用的局部特徵描述圖像的方法被提出,提取的特徵(很有希望的)對於局部遮擋、光照變化、小樣本等情況更強健。有關局部特徵提取的方法有蓋伯小波(Gabor Waelets)([Wiskott97]),離散傅立葉變換(DiscreteCosinus Transform,DCT)([Messer06]),局部二值模式(LocalBinary Patterns,LBP)([AHP04])。使用什麼方法來提取時域空間的局部特徵依舊是一個開放性的研究問題,因為空間信息是潛在有用的信息。
1.3.人臉庫Face Database
我們先獲取一些數據來進行實驗吧。我不想在這里做一個幼稚的例子。我們在研究人臉識別,所以我們需要一個真的人臉圖像!你可以自己創建自己的數據集,也可以從這里(http://face-rec.org/databases/)下載一個。
AT&TFacedatabase又稱ORL人臉資料庫,40個人,每人10張照片。照片在不同時間、不同光照、不同表情(睜眼閉眼、笑或者不笑)、不同人臉細節(戴眼鏡或者不戴眼鏡)下採集。所有的圖像都在一個黑暗均勻的背景下採集的,正面豎直人臉(有些有有輕微旋轉)。
YaleFacedatabase A ORL資料庫對於初始化測試比較適合,但它是一個簡單的資料庫,特徵臉已經可以達到97%的識別率,所以你使用其他方法很難得到更好的提升。Yale人臉資料庫是一個對於初始實驗更好的資料庫,因為識別問題更復雜。這個資料庫包括15個人(14個男人,1個女人),每一個都有11個灰度圖像,大小是320*243像素。資料庫中有光照變化(中心光照、左側光照、右側光照)、表情變化(開心、正常、悲傷、瞌睡、驚訝、眨眼)、眼鏡(戴眼鏡或者沒戴)。
壞消息是它不可以公開下載,可能因為原來的伺服器壞了。但我們可以找到一些鏡像(比如 theMIT)但我不能保證它的完整性。如果你需要自己剪裁和校準圖像,可以閱讀我的筆記(bytefish.de/blog/fisherfaces)。
ExtendedYale Facedatabase B 此資料庫包含38個人的2414張圖片,並且是剪裁好的。這個資料庫重點是測試特徵提取是否對光照變化強健,因為圖像的表情、遮擋等都沒變化。我認為這個資料庫太大,不適合這篇文章的實驗,我建議使用ORL資料庫。
1.3.1. 准備數據
我們從網上下了數據,下了我們需要在程序中讀取它,我決定使用CSV文件讀取它。一個CSV文件包含文件名,緊跟一個標簽。
/path/to/image.ext;0
假設/path/to/image.ext是圖像,就像你在windows下的c:/faces/person0/image0.jpg。最後我們給它一個標簽0。這個標簽類似代表這個人的名字,所以同一個人的照片的標簽都一樣。我們對下載的ORL資料庫進行標識,可以獲取到如下結果:
./at/s1/1.pgm;0
./at/s1/2.pgm;0
...
./at/s2/1.pgm;1
./at/s2/2.pgm;1
...
./at/s40/1.pgm;39
./at/s40/2.pgm;39
想像我已經把圖像解壓縮在D:/data/at下面,而CSV文件在D:/data/at.txt。下面你根據自己的情況修改替換即可。一旦你成功建立CSV文件,就可以像這樣運行示常式序:
facerec_demo.exe D:/data/at.txt
1.3.2 Creating the CSV File
你不需要手工來創建一個CSV文件,我已經寫了一個Python程序來做這事。
[gm:說一個我實現的方法
如果你會cmd命令,或者稱DOS命令,那麼你打開命令控制台。假設我們的圖片放在J:下的Faces文件夾下,可以輸入如下語句:
J:\Faces\ORL>dir /b/s *.bmp > at.txt
然後你打開at.txt文件可能看到如下內容(後面的0,1..標簽是自己加的):
。。。。
J:\Faces\ORL\s1\1.bmp;0
J:\Faces\ORL\s1\10.bmp;0
J:\Faces\ORL\s1\2.bmp;0
J:\Faces\ORL\s1\3.bmp;0
J:\Faces\ORL\s1\4.bmp;0
J:\Faces\ORL\s1\5.bmp;0
J:\Faces\ORL\s1\6.bmp;0
J:\Faces\ORL\s1\7.bmp;0
J:\Faces\ORL\s1\8.bmp;0
J:\Faces\ORL\s1\9.bmp;0
J:\Faces\ORL\s10\1.bmp;1
J:\Faces\ORL\s10\10.bmp;1
J:\Faces\ORL\s10\2.bmp;1
J:\Faces\ORL\s10\3.bmp;1
J:\Faces\ORL\s10\4.bmp;1
J:\Faces\ORL\s10\5.bmp;1
J:\Faces\ORL\s10\6.bmp;1
。。。。
自然還有c++編程等方法可以做得更好,看這篇文章反響,如果很多人需要,我就把這部分的代碼寫出來。(遍歷多個文件夾,標上標簽)
]
特徵臉Eigenfaces
我們講過,圖像表示的問題是他的高維問題。二維灰度圖像p*q大小,是一個m=qp維的向量空間,所以一個100*100像素大小的圖像就是10,000維的圖像空間。問題是,是不是所有的維數空間對我們來說都有用?我們可以做一個決定,如果數據有任何差異,我們可以通過尋找主元來知道主要信息。主成分分析(Principal Component Analysis,PCA)是KarlPearson (1901)獨立發表的,而 Harold Hotelling (1933)把一些可能相關的變數轉換成一個更小的不相關的子集。想法是,一個高維數據集經常被相關變數表示,因此只有一些的維上數據才是有意義的,包含最多的信息。PCA方法尋找數據中擁有最大方差的方向,被稱為主成分。
演算法描述Algorithmic Description
令 表示一個隨機特徵,其中 .
計算均值向量
計算協方差矩陣 S
計算 的特徵值 和對應的特徵向量
對特徵值進行遞減排序,特徵向量和它順序一致. K個主成分也就是k個最大的特徵值對應的特徵向量。
x的K個主成份:
其中 .
PCA基的重構:
其中 .
然後特徵臉通過下面的方式進行人臉識別:
A. 把所有的訓練數據投影到PCA子空間
B. 把待識別圖像投影到PCA子空間
C. 找到訓練數據投影後的向量和待識別圖像投影後的向量最近的那個。
還有一個問題有待解決。比如我們有400張圖片,每張100*100像素大小,那麼PCA需要解決協方差矩陣 的求解,而X的大小是10000*400,那麼我們會得到10000*10000大小的矩陣,這需要大概0.8GB的內存。解決這個問題不容易,所以我們需要另一個計策。就是轉置一下再求,特徵向量不變化。文獻 [Duda01]中有描述。
[gm:這個PCA還是自己搜著看吧,這里的講的不清楚,不適合初學者看]
OpenCV中使用特徵臉Eigenfaces in OpenCV
給出示常式序源代碼
#include "opencv2/core/core.hpp"
#include "opencv2/contrib/contrib.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <iostream>
#include <fstream>
#include <sstream>
usingnamespace cv;
usingnamespace std;
static Mat norm_0_255(InputArray _src) {
Mat src = _src.getMat();
// 創建和返回一個歸一化後的圖像矩陣:
Mat dst;
switch(src.channels()) {
case1:
cv::normalize(_src, dst, 0,255, NORM_MINMAX, CV_8UC1);
break;
case3:
cv::normalize(_src, dst, 0,255, NORM_MINMAX, CV_8UC3);
break;
default:
src.To(dst);
break;
}
return dst;
}
//使用CSV文件去讀圖像和標簽,主要使用stringstream和getline方法
staticvoid read_csv(const string& filename, vector<Mat>& images, vector<int>& labels, char separator =';') {
std::ifstream file(filename.c_str(), ifstream::in);
if (!file) {
string error_message ="No valid input file was given, please check the given filename.";
CV_Error(CV_StsBadArg, error_message);
}
string line, path, classlabel;
while (getline(file, line)) {
stringstream liness(line);
getline(liness, path, separator);
getline(liness, classlabel);
if(!path.empty()&&!classlabel.empty()) {
images.push_back(imread(path, 0));
labels.push_back(atoi(classlabel.c_str()));
}
}
}
int main(int argc, constchar*argv[]) {
// 檢測合法的命令,顯示用法
// 如果沒有參數輸入則退出!.
if (argc <2) {
cout <<"usage: "<< argv[0]<<" <csv.ext> <output_folder> "<< endl;
exit(1);
}
string output_folder;
if (argc ==3) {
output_folder = string(argv[2]);
}
//讀取你的CSV文件路徑.
string fn_csv = string(argv[1]);
// 2個容器來存放圖像數據和對應的標簽
vector<Mat> images;
vector<int> labels;
// 讀取數據. 如果文件不合法就會出錯
// 輸入的文件名已經有了.
try {
read_csv(fn_csv, images, labels);
} catch (cv::Exception& e) {
cerr <<"Error opening file \""<< fn_csv <<"\". Reason: "<< e.msg << endl;
// 文件有問題,我們啥也做不了了,退出了
exit(1);
}
// 如果沒有讀取到足夠圖片,我們也得退出.
if(images.size()<=1) {
string error_message ="This demo needs at least 2 images to work. Please add more images to your data set!";
CV_Error(CV_StsError, error_message);
}
// 得到第一張照片的高度. 在下面對圖像
// 變形到他們原始大小時需要
int height = images[0].rows;
// 下面的幾行代碼僅僅是從你的數據集中移除最後一張圖片
//[gm:自然這里需要根據自己的需要修改,他這里簡化了很多問題]
Mat testSample = images[images.size() -1];
int testLabel = labels[labels.size() -1];
images.pop_back();
labels.pop_back();
// 下面幾行創建了一個特徵臉模型用於人臉識別,
// 通過CSV文件讀取的圖像和標簽訓練它。
// T這里是一個完整的PCA變換
//如果你只想保留10個主成分,使用如下代碼
// cv::createEigenFaceRecognizer(10);
//
// 如果你還希望使用置信度閾值來初始化,使用以下語句:
// cv::createEigenFaceRecognizer(10, 123.0);
//
// 如果你使用所有特徵並且使用一個閾值,使用以下語句:
// cv::createEigenFaceRecognizer(0, 123.0);
//
Ptr<FaceRecognizer> model = createEigenFaceRecognizer();
model->train(images, labels);
// 下面對測試圖像進行預測,predictedLabel是預測標簽結果
int predictedLabel = model->predict(testSample);
//
// 還有一種調用方式,可以獲取結果同時得到閾值:
// int predictedLabel = -1;
// double confidence = 0.0;
// model->predict(testSample, predictedLabel, confidence);
//
string result_message = format("Predicted class = %d / Actual class = %d.", predictedLabel, testLabel);
cout << result_message << endl;
// 這里是如何獲取特徵臉模型的特徵值的例子,使用了getMat方法:
Mat eigenvalues = model->getMat("eigenvalues");
// 同樣可以獲取特徵向量:
Mat W = model->getMat("eigenvectors");
// 得到訓練圖像的均值向量
Mat mean = model->getMat("mean");
// 現實還是保存:
if(argc==2) {
imshow("mean", norm_0_255(mean.reshape(1, images[0].rows)));
} else {
imwrite(format("%s/mean.png", output_folder.c_str()), norm_0_255(mean.reshape(1, images[0].rows)));
}
// 現實還是保存特徵臉:
for (int i =0; i < min(10, W.cols); i++) {
string msg = format("Eigenvalue #%d = %.5f", i, eigenvalues.at<double>(i));
cout << msg << endl;
// 得到第 #i個特徵
Mat ev = W.col(i).clone();
//把它變成原始大小,為了把數據顯示歸一化到0~255.
Mat grayscale = norm_0_255(ev.reshape(1, height));
// 使用偽彩色來顯示結果,為了更好的感受.
Mat cgrayscale;
applyColorMap(grayscale, cgrayscale, COLORMAP_JET);
// 顯示或者保存:
if(argc==2) {
imshow(format("eigenface_%d", i), cgrayscale);
} else {
imwrite(format("%s/eigenface_%d.png", output_folder.c_str(), i), norm_0_255(cgrayscale));
}
}
// 在一些預測過程中,顯示還是保存重建後的圖像:
for(int num_components =10; num_components <300; num_components+=15) {
// 從模型中的特徵向量截取一部分
Mat evs = Mat(W, Range::all(), Range(0, num_components));
Mat projection = subspaceProject(evs, mean, images[0].reshape(1,1));
Mat reconstruction = subspaceReconstruct(evs, mean, projection);
// 歸一化結果,為了顯示:
reconstruction = norm_0_255(reconstruction.reshape(1, images[0].rows));
// 顯示或者保存:
if(argc==2) {
imshow(format("eigenface_reconstruction_%d", num_components), reconstruction);
} else {
imwrite(format("%s/eigenface_reconstruction_%d.png", output_folder.c_str(), num_components), reconstruction);
}
}
// 如果我們不是存放到文件中,就顯示他,這里使用了暫定等待鍵盤輸入:
if(argc==2) {
waitKey(0);
}
return0;
}
我使用了偽彩色圖像,所以你可以看到在特徵臉中灰度值是如何分布的。你可以看到特徵臉不但對人臉特徵進行編碼,還對這些圖像中的光照進行編碼。(看第四張圖像是左側的光照,而第五張是右側的光照)[gm:PCA對光照變化圖像識別效果很差,自然有一些改進方法,有後再談]
❼ 如何實現人臉識別及其原理
如何實現人臉識別及其原理
只要開人臉識別功能就行了 人臉識別其實很簡單,相機處理器對拍到的物體進行長寬比例的分析,分析出的數值接近人臉的比例就會自動鎖定,其實就是數學上的計算和比例,也許大家認為人臉差別很大,其實都是遵循著固定的比率的,只要不是畸形,不管胖瘦臉部的比例都是人臉特有的那個值,所以即使是素描畫,相機一樣認為他是人臉,只要他的比例是對的
winform如何實現人臉識別
=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))
如何實現人臉表情識別
適合啊,我同學做的就跟你一點差別,她是人臉識別,沒有表情。
蘋果iPhoneX支援人臉識別是如何實現的?
據說,蘋果新品手機可以「在一百萬張臉中識別出你的肥臉」,還可以通過人臉識別解鎖手機,以及訂制動態3D Animojis 表情。
蘋果iPhoneX人臉識別是怎麼實現的呢?
這是一個復雜的技術問題......人臉識別主要包括人臉檢測、特徵提取、人臉分類三個過程。
簡單地說,就是通過人臉檢測,對五官進行一些關鍵點的定位,然後提取計算機能夠識別的人臉特徵,最後進行一個相似度的比對,從而得到一個人臉識別的結果,也就是判斷「刷臉」的是不是你本人。
讓人最為激動還是蘋果在取消home鍵後,替代Touch ID的Face ID功能。有了人臉識別技術加持,抬手秒解鎖iPhone的過程真的是更簡單也更迅速。
不僅如此,蘋果人臉識別解鎖的安全性、可靠性也非常高。運用3D結構光技術,iPhone X 能夠快速對「人臉3D建模」。即使使用者改變發型,戴上眼鏡帽子,或者在晚上,iPhone X都能成功解鎖。
人臉識別技術這么牛,那它是萬能的嗎?只要是人臉都可以識別、辨認出來么?其實,在進行人臉識別的時候,也存在一些難題,比如人的姿態、光照、遮擋等都會對人臉識別造成影響。
如何實現人的面部識別?
首先是面部捕捉。它根據人的頭部的部位進行判定,首先確定頭部,然後判斷眼睛和嘴巴等頭部特徵,通過特徵庫的比對,確認是面部,完成面部捕捉,ai可以這樣做。 不過個人以為這個技術並不好用,特別是在有不止一個人的場景上,比如大合照,對焦點經常亂跑,所以偶的相機基本還是放在中央對焦上,畢竟cpu再聰明,還是人腦更靠譜。。。
mate9pro,可以實現人臉識別嗎
Mate9 Pro會支援人臉解鎖/識別功能,正在努力適配中。版本具體的更新資訊,請您關注花粉論壇官方通知。感謝您對華為產品的一貫支援。
如何用Python實現簡單人臉識別
你可以使用opencv庫提供的人臉識別模組,這樣子會比較快
Win10怎樣用Kinect實現人臉識別功能
具體操作方法:
1、首先你需要一個連線Windows10電腦和Kinect的介面卡;
2、然後還需要給系統做一個小手術以獲取Kinect Beta驅動更新:
- 按Win+R開啟執行,輸入regedit回車開啟登錄檔編輯器;
- 導航至HKLMSofareMicrosoft
- 建立子鍵DriverFlightingPartner
3、在Partner子鍵中新建名為「TargetRing」的專案,將其值設定為「Drivers」。
不需要重啟電腦,之後你就可以在Windows Update或裝置管理器中更新Kinect Beta驅動了。
以上就是Windows10用Kinect實現人臉識別功能的方法了,這樣一來只要給連線一個Kinect就可以使用Windows10人臉識別功能,而不用更換電腦了。
人臉識別技術是怎樣實現人臉精準檢測?
是的,比如雲脈人臉識別中的人臉檢測技術就是採用三維定向,對人臉三維朝向,做精準到「度」的判斷,以及對人臉特徵點進行「畫素級」定位,輕松判斷眼睛開合狀態,還可通過技術對現有人臉識別做技術上的補充和完善,進而達到識別的創新性和嚴謹性。
Win10系統怎麼使用Kinect實現人臉識別
操作方法:
1、首先你需要一個連線Windows10電腦和Kinect的介面卡;
2、然後還需要給系統做一個小手術以獲取Kinect Beta驅動更新:
- 按Win+R開啟執行,輸入regedit回車開啟登錄檔編輯器;
- 導航至HKLMSofareMicrosoft
- 建立子鍵DriverFlightingPartner
3、在Partner子鍵中新建名為「TargetRing」的專案,將其值設定為「Drivers」。
不需要重啟電腦,之後你就可以在Windows Update或裝置管理器中更新Kinect Beta驅動了。
以上就是Windows10用Kinect實現人臉識別功能的方法了,這樣一來只要給連線一個Kinect就可以使用Windows10人臉識別功能,而不用更換電腦了。
❽ opencv用c++還是python好
python更好。
opencv內置支持的主要語言為python和c++,如果你用戶不是特別大)(比如10000次以上的人臉識別每秒),一般python就綽綽有餘了。當然如果是安卓客戶端的話,還是c++或java方便點,如果是後台或者樹莓派之類的,python就更方便。
這里有個python的例子。
opencv 3.3+已經內置了人臉識別功能。
可以很輕松的完成相關畢業設計。
使用OpenCV提供的預先訓練的深度學習面部檢測器模型,可快速,准確的進行人臉識別。
Python優點:
學習難易:Python與C++對比是一門易於學習的語言所以很適合作為第一門語言來學習編程。
可視化調試:Matplotlib進行結果可視化這方法,與C++的窗體調試比起來那是好了很多啊。
❾ Python太好用了!AI初學者快速體驗人臉檢測
我們使用python進行AI識別測試,具體方式是是開啟本地電腦的攝像頭進行實時的識別,或者直接傳入一張圖片進行行人檢測,在分析代碼把數據源傳入到識別,看到的是source=』0』,但是這個參數是打開本地電腦的攝像頭流,再進行行人檢測。
但我們需要對此處進行修改,使用rtsp流,進行AI行人識別,下面需要進行分析代碼,找到可以修改的地方,或者摸個參數,來進行RTSP流的修改。
已經找到了視頻流在哪裡傳進去的了,下面就是進行分析裡面的代碼進行改成rtsp流,把rtsp流寫進去,來做到實時分析,實現行人檢測的效果。
在進行分析的時候,發現source這個參數只有LoadStreams用到過,而且是直接傳進去的。
進入source參數裡面查看,發現裡面有一個默認的值,就是讀文件,如果不是文件,就把source=[source],再進行source值遍歷。在遍歷中還使用到了opencv打開本地電腦的攝像機流,再開一個線程進行實時行人識別。
代碼中使用了opencv中cv2.VideoCapture的函數,從網上查找這個函數的用法得知,此函數是可以直接傳入rtsp流地址的,所以問題解決就簡單多了。cv2.VideoCapture這個函數是可以傳入rtsp地址的,所以傳入rtsp地址進行嘗試,發現傳入rtsp地址是沒有問題的。
只要修改source這個參數即可,最終實現了檢測:
❿ 關於python人臉識別的問題
應該是沒有找到分類器編碼文件,把 haarcascade_frontalface_default.xml, haarcascade_eye.xml文件放到項目根目錄下,再用cv.CascadeClassifier(path1), cv.CascadeClassifier(path2)兩個API導入,另python下windows的文件路徑要用 \\ 或者 /