//載入人臉檢測模型
std::string modelconfiguration =
"./deploy_lowres.prototxt"
;std::string modelbinary =
"./res10_300x300_ssd_iter_140000_fp16 .caffemodel"
;//初始化網路
net detectnet =
readnetfromcaffe
(modelconfiguration, modelbinary)
;//載入識別模型
std::string recongnitionmodel =
"./openface.nn4.small2.v1.t7"
;net reconet =
readnetfromtorch
(recongnitionmodel)
;cv::string databasepath=
"/faceregister/faceregister"
;std::map databasef = \
facedatabasefeature
(databasepath,detectnet,reconet)
;
其中,__deploy_lowres.prototxt__和__es10_300x300_ssd_iter_140000_fp16 .caffemodel__檔案是用於檢測檢測人臉的工作,將檢測到的人臉__faces__返回,接著用__openface.nn4.small2.v1.t7__模型將這個faces對映到為乙個128維的向量,通過計算向量的相似度,即可得出比較結果
cv::mat inputblob = cv::dnn::
blobfromimage
( \
face, inscalefactor, cv::
size
(inwidth, inheight)
, meanval,
true
,false);
net.
setinput
(inputblob)
;cv::mat detection = net.
forward()
.clone()
;
注:這個步驟所得的正確率非常低,應該是其中某乙個部分出錯,可能的問題是人臉沒有對齊(alignment)的原因
根據openface計算得到的向量,可以發現根據人臉得到的向量,是__feature∈128*1__的單位向量,通過比較兩個向量的相似性即可得到兩張人臉的相似性對量
c os
θ=ab
∣∣a∣
∣∗∣∣
b∣
∣cos\theta=\frac
cosθ=∣
∣a∣∣
∗∣∣b
∣∣ab
其中,因為兩個__feature__都是單位向量,即a和b的模都是1,所以最終,兩個影象的特徵值的相似度可以用兩個影象的特徵值的點乘表示
c os
θ=ab
cos\theta=ab
cosθ=a
b注意
__init__.py
from .
import modulename
face_recognition
numpy
cv2tensorflow
安裝完成之後,開始測試**
x1_rltv = x1 / self.cam_w
x2_rltv = x2 / self.cam_w
y1_rltv = y1 / self.cam_h
y2_rltv = y2 / self.cam_h
_face_area = frame[y1:y2, x1:x2,
:]
_face_area = frame[ x1:x2, y1:y2,
:]
最終,這個第三方模型實現不符合預期,效果太差
測試基於mxnet實現的insightface模型
前期準備:
由於mxnet 是比較早期的專案實現的,因此採用的是python2.7。建議在安裝顯示卡和cuda前先看看nvidia官網nvidia
cuda toolkit
linux x86_64 driver version
windows x86_64 driver version
cuda 10.2.89
>= 440.33
>= 441.22
cuda 10.1 (10.1.105 )
>= 418.39
>= 418.96
cuda 10.0.130
>= 410.48
>= 411.31
cuda 9.2 (9.2.148 update 1)
>= 396.37
>= 398.26
cuda 9.2 (9.2.88)
>= 396.26
>= 397.44
cuda 9.1 (9.1.85)
>= 390.46
>= 391.29
cuda 9.0 (9.0.76)
>= 384.81
>= 385.54
cuda 8.0 (8.0.61 ga2)
>= 375.26
>= 376.51
cuda 8.0 (8.0.44)
>= 367.48
>= 369.30
cuda 7.5 (7.5.16)
>= 352.31
>= 353.66
cuda 7.0 (7.0.28)
>= 346.46
>= 347.62
安裝完顯示卡之後
pip install mxnet-cu100
#test.py
import mxnet as mx
mx.nd.array(
[0], ctx = mx.gpu(0))
執行, 之前cuda和顯示卡裝得不匹配,導致執行這段**出現問題:
mxnet.base.mxneterror: [14:40:28] src/storage/storage.cc:119: check failed:
e == cudasuccess || e == cudaerrorcudartunloading cuda: cuda driver version is
insufficient for cuda runtime version
在github insightface官網上有人提出了******_bind錯誤,也是出於這個原因
之後就是自己測試了。
後期會補上**
FLASH人臉識別演算法
這個今天也是偶然在網上看到,不過對於人臉識別精確演算法確實比較複雜涉及到人臉特徵點提取和生物統計學原理的東西,不做太多討論,只是談談今天我在網上看到的兩個演算法。第乙個是被稱為木刻演算法,他主要用於提取人臉輪廓。該演算法的前提是認為一般因為人體攝影的緣故人臉的周邊會存在陰影,這樣就為我們提取輪廓提供...
C Emgu 人臉識別(已測試)
今天開始寫這篇部落格,原因是看了好幾篇文章,用了好幾個demo,但是執行不了,因為太久了,emgu裡面修改了一些屬性,所以就自己摸索寫了一下。首先我們需要emgu裡面的dll檔案 emgu.cv emgu.cv.cuda emgu.cv.ui emgu.util 基本就這幾個 我使用的emgu版本為...
阿里雲 人臉識別 測試
1.使用阿里雲平台提供的介面直接測試人臉識別功能 usr bin python coding utf 8 from urlparse import urlparse import datetime import base64 import hmac import hashlib import jso...