测试"/>
0002 python3.6++dlib+skimage 人脸识别测试
使用了
shape_predictor_68_face_landmarks.dat dlib_face_recognition_resnet_model_v1.dat网上可以找到资源下载
PYTHON3.6
用VSCODE写的
图片放在D:/renlian 下面
./a5 放的是人脸数据,在百度上找明星的图片自己截的图
./a5-2 也是百度上找的图片 单张,用来测试
不全是原创,看了网上的例子,自己改写了一下.
直接上源码和图片了
os_walk_test.py
import osdef ldir(path, ext = ''):#便历目录ret = os.listdir(path)if ext:#格式化extif '.' in ext:if ext[0] == '.'and '.' not in ext[1:]:passelse:ext = os.path.splitext(ext)[1]else:ext = '.' + ext#按ext筛选结果ret2 = []for i in ret:if ext == os.path.splitext(i)[1]:ret2.append(i)ret = ret2#返回结果return retif __name__ == '__main__':path = 'd:/'print(ldir(path, 'py'))
test.py
import os,dlib,numpy
os.chdir('d:/renlian')
from os_walk_test import ldir
from skimage import io#获取一个图片上的人脸的识别特征
def get_descriptor(imgfile,factor):detector, sharp_detector, descriptor=factorimg = io.imread(imgfile)dets = detector(img, 1)ret=[]for k, d in enumerate(dets):#2.关键点检测shape = sharp_detector(img, d)face_decriptor = descriptor(img, shape)v = numpy.array(face_decriptor)ret.append(v)return ret#获取人脸图片数据库的所有人脸特征
def get_data(data_img_path, factor):dt=[]#1.人脸检测for f in ldir(data_img_path, "*.jpg"):name=ff=os.path.join(faces_folder_path,f)dt.append([name,get_descriptor(f,factor)])return dt#根据图片和特征数据库,查找到相应的图片名字
def find_fixed(img, face_data, factor):result = []tar=get_descriptor(img,factor)for i in face_data:for j in i[1]:result.append([i[0],numpy.linalg.norm(j-tar)])r=sorted(result,key=lambda d:d[1])return r[0]if __name__=='__main__':predictor_path = "./shape_predictor_68_face_landmarks.dat"face_rec_model_path = "./dlib_face_recognition_resnet_model_v1.dat"faces_folder_path = "./a5"img_path = "./a5-2"detc = dlib.get_frontal_face_detector() #人脸检测器sp = dlib.shape_predictor(predictor_path) #关键点探测器recg = dlib.face_recognition_model_v1(face_rec_model_path).\compute_face_descriptor #识别器factors = (detc, sp, recg) #反应器集合data=get_data(faces_folder_path,factors) #获取数据for i in ldir(img_path):n=if=os.path.join(img_path,i)imgname=find_fixed(f,data,factors) #识别名字print('{}:{}'.format(n,imgname))
d:/renlian/a5
范冰冰.jpg
刘亦菲.jpg
刘亦菲-2.jpg
刘诗诗.jpg
d:/renlian/a5-2
bingbing.jpg shishi.jpg shishi-2.jpg
yifei.jpg
上结果
如果自己用opencv写个界面也许更好一点.
更多推荐
0002 python3.6++dlib+skimage 人脸识别测试
发布评论