关于openface开发遇到的问题
最近在做一个人脸识别,使用的开源框架openface。官网地址(openface):http://cmusatyalab.github.io/openface/这篇文章主要是向大家资讯一个问题,是目前我还没有解决的问题。第一:人脸识别的时间有1.7-2.0秒的时间,公司老板希望时间控制在1秒以内,最好0.3秒。该测试数据是在本地虚拟机中,照片为80kb左右的识别结果人脸识别的基
·
最近在做一个人脸识别,使用的开源框架openface。
官网地址(openface):http://cmusatyalab.github.io/openface/
这篇文章主要是向大家资讯一个问题,是目前我还没有解决的问题。
第一:人脸识别的时间有1.7-2.0秒的时间,公司老板希望时间控制在1秒以内,最好0.3秒。
该测试数据是在本地虚拟机中,照片为80kb左右的识别结果
人脸识别的基本流程中有一个步骤是提取人脸,
也就是吧这种照片提取人脸,变成这种照片。
代码如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 获取图片的rep标识,供人脸识别和活体检测使用(训练&识别)
# authour:weichaojie
import cv2
import openface
import logging
import ds_config
import ds_errCode
import time
class
util_getRep(
object):
'''
图片预处理类
'''
def
getRep(
self,
imgPath,
multiple=
False,
imgDim=
96,
cuda=
False):
'''
获取人脸图片的特征向量
input:
imgPath:图片地址
output:
图片bgr表示和裁剪后的图片
或者false
'''
res = {}
try:
# 从图中抠人脸工具
align = openface.AlignDlib(ds_config.get(
'dlib_face_predictor'))
#该行代码用时约1.3秒
bgrImg = cv2.imread(imgPath)
if bgrImg
is
None:
raise ds_errCode.IMG_UNDEFINED
rgbImg = cv2.cvtColor(bgrImg, cv2.COLOR_BGR2RGB)
if multiple:
bbs = align.getAllFaceBoundingBoxes(rgbImg)
else:
bb1 = align.getLargestFaceBoundingBox(rgbImg)
bbs = [bb1]
if
len(bbs) ==
0
or (
not multiple
and bb1
is
None):
raise ds_errCode.FACE_NOT_FOUND
landmarks=ds_config.get(
'landmark')
landmarkMap = {
'outerEyesAndNose': openface.AlignDlib.OUTER_EYES_AND_NOSE,
'innerEyesAndBottomLip': openface.AlignDlib.INNER_EYES_AND_BOTTOM_LIP
}
if landmarks
not
in landmarkMap:
raise ds_errCode.LANDMARK_UNKNOW
landmarkIndices = landmarkMap[landmarks]
# 获得人脸特征值网络
reps = []
for bb
in bbs:
alignedFace = align.align(imgDim, rgbImg, bb,
landmarkIndices=landmarkIndices)
t3 = time.time()
if alignedFace
is
None:
raise ds_errCode.FACE_NOT_FOUND
res[
'bb'] = bb
res[
'alignedFace'] = alignedFace
except
Exception
as e:
logging.exception(e)
return
False
return res
这句话
align = openface.AlignDlib(ds_config.get(
'dlib_face_predictor'))
#该行代码用时约1.3秒
ds_config.get(
'dlib_face_predictor'
)#这是获取一个人脸提取的文件。为.bat文件
执行时间有1.3秒,也就是实例化一个人脸提取器,占据整个人脸识别时间的90%。
再往里面看
openface/align_dlib.py文件
def
__init__(
self,
facePredictor):
"""
Instantiate an 'AlignDlib' object.
:param facePredictor: The path to dlib's
:type facePredictor: str
"""
assert facePredictor
is
not
None
self.detector = dlib.get_frontal_face_detector()
self.predictor = dlib.shape_predictor(facePredictor)
这是使用了一个dlib方法。于是我又继续找着两个方法那个用时比较长。
同是我也感觉,走到这里,应可以确定不是自己的代码问题导致时间长。如果要是想解决问题,恐怕要了解dlib库的修改
。后面我发现,修改__init__构造方法,代码执行不受影响,感觉很是奇怪。
目录结构如下:
,到这里,我就排查不下去了。目前也就定位到这里:
align = openface.AlignDlib(ds_config.get(
'dlib_face_predictor'))
#该行代码用时约1.3秒
希望有高手可以告诉我怎么增加这句话的执行速度也就是,人脸提取类的实例化速度。
第一次写博文。写的不好望见谅
更多推荐
已为社区贡献1条内容
所有评论(0)