openface中实例化AlignDlib的优化

2 篇文章 0 订阅
2 篇文章 0 订阅

最近在做人脸识识别,使用的是openface框架结构。开发出来之后可以使用,但是效率比较慢,时间大概在1.8s左右。这个速度根本无法满足使用需要。于是,由于工作需要便开始优化识别速度。

经过打断点等方式,成功定位到文问题所在。

openface.AlignDlib('openface/models/dlib/shape_predictor_68_face_landmarks.dat')

就是这句话使用了1.3秒左右,之后发现  shape_predictor_68_face_landmarks.dat      文件有90多兆。


由此我们点位到问题所在,解决方式有以下几种:

1,实例化  AlignDlib  时间过长,我们可以保存实例化后的结果到文件,每次从这个文件直接读取。不用再实例化这个类。

2,实例化之后,长期保存到内存中。需要使用时。直接从内存调取。

 

方案一:我们是用了python提供的cpickle模块,将生成的实例变量保存到磁盘中。代码如下

import cPickle as pickle
import openface
objFile = '/root/openface/obj_file/AlignDlib.pkl'
dlib_face_predictor = '/root/openface/shape_predictor_68_face_landmarks.dat'
align = openface.AlignDlib(dlib_face_predictor)
f1 = file(objFile, 'wb')
pickle.dump(align, f1, True)
f1.close()
保存好之后的读取

t2 = pickle.loads(objFile)

读取出来的结果可以可以直接当做实例对象使用。使用该方法,可以实例化过程时间优化为0.7秒,减少将近50%的时间。


方案二:

我的python项目是使用uwsgi和nginx搭建的,由uwsgi守护入口文件,基本思路是:在入口文件引入一个单例模式类(single_objmodel)并实例化;

single_objmodel.py 文件代码如下:

import ds_config
import openface
class single_objmodel ( object):
'''
单例模式,实例化时,保存alignDlib实例对象到类变量,方便后续调用
alignDlib:alignDlib实例对象保存位置
'''
_instance = None
alignDlib = None
def __new__( cls, * args, ** kw):
if not cls._instance:
cls._instance = super(single_objmodel, cls). __new__( cls, *args, **kw)
return cls._instance
def __init__( self):
self. __class__.alignDlib = openface.AlignDlib(' /root/openface/shape_predictor_68_face_landmarks.dat')

在入口文件实例化该类,在需要使用alignDlib的位置,引入single_objmodel,并获取类变量alignDlib即可。该方法可以将实例化的时间减少到忽略不计。第一次时间会长一点。之后的请求时,时间会大大减少。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

红豆110

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值