资讯专栏INFORMATION COLUMN

menpo 人脸识别(一)测试样例

mrcode / 3939人阅读

摘要:该库可用于医疗图像分割人脸识别等等很多领域,鉴于大家看英文感觉麻烦,我就看一点给大家分享一点,学会了该库感觉还是很有用的,如果后面时间的多的话会写一下原理和具体实现

menpo作为一个集成程度比较高的开发库,里面集合了opencv numpy 还有很多其他的库,理论上数据之间可以相互转换,如果大家用的不熟练的话可以将该库的输出转化为自己熟悉的库比如numpy,用于做人脸识别是比较方便的(我不是要做这个的所以人脸识别具体怎么搞我也不太清楚,我是想用该库做医学图像分割),在该领域一个比较核心的点是landmark localization,所以下面将会演示如何使用menpo的库进行人脸特征点识别。今天只是分享个实例,每个函数的具体意思和参数要求会在下一篇博文中讲解,今天只是展示一下如何使用(我不会告诉你我还没看明白他的底层库的),算法具体原理就不细讲了(我也不懂,貌似该库是对几十篇顶刊的算法实现),包括AAM SDM APS 等等诸多算法,从某种角度讲这能让我们使用高级算法的同时还不用自己去实现,节省很大一部分时间。

 

首先完成上面对库的安装和环境的搭建,为了使效果更直观我使用了jupyter 来进行程序运行,jupyter如何在linux下安装可以参考其他博客

数据源来自于http://ibug.doc.ic.ac.uk/resources/facial-point-annotations/  的LFPW数据源。该数据源中包括png类型图片 还有pts点集,具体情况如下:

数据信息如下:

将数据资源下载完成后就可以加载图片和数据点集了:

%matplotlib inlinefrom menpowidgets import visualize_imagesimport menpo.io as miofrom menpo.visualize import print_progressfrom menpo.landmark import labeller, face_ibug_68_to_face_ibug_68_trimeshpath_to_images = "/home/ke/testset/"training_images = []for img in print_progress(mio.import_images(path_to_images, verbose=True)):    # convert to greyscale    if img.n_channels == 3:        img = img.as_greyscale()    # crop to landmarks bounding box with an extra 20% padding    img = img.crop_to_landmarks_proportion(0.2)    # rescale image if its diagonal is bigger than 400 pixels    d = img.diagonal()    if d > 400:        img = img.rescale(400.0 / d)    # define a TriMesh which will be useful for Piecewise Affine Warp of HolisticAAM    labeller(img, "PTS", face_ibug_68_to_face_ibug_68_trimesh)    # append to list    training_images.append(img)visualize_images(training_images)

需要修改path_to_image 为你图片存的路径,其他的无需修改,下面是效果展示:

下面是训练模型(包括了特征点对齐,生成shape_model 和appearance_model),训练完成后会告诉你在不同scale下的模型已经训练完毕

from menpofit.aam import PatchAAMfrom menpo.feature import fast_dsiftpatch_aam = PatchAAM(training_images, group="PTS", patch_shape=[(15, 15), (23, 23)],                     diagonal=150, scales=(0.5, 1.0), holistic_features=fast_dsift,                     max_shape_components=20, max_appearance_components=150,                     verbose=True)

 随后就是基于光流法生成一个fillter用于最终的fitting,

from menpofit.aam import LucasKanadeAAMFitter, WibergInverseCompositionalfitter = LucasKanadeAAMFitter(patch_aam, lk_algorithm_cls=WibergInverseCompositional,                              n_shape=[5, 20], n_appearance=[30, 150])print(fitter)

生成完filter后就可以进行测试了,首先导入路径和图片,该图片即为测试图片

from pathlib import Pathimport menpo.io as miopath_to_lfpw = Path("/home/ke/testset/")image = mio.import_image(path_to_lfpw / "image_0021.png")image = image.as_greyscale()

 一般需要定位模型的初始位置,否则大概率出现收敛不成功的问题,一个好的初始位置在该问题中很重要,在该库中可以使用 load_dlib_frontal_face_detector()函数生成人脸的初始位置,并将该位置作为filter的输入位置

from menpodetect import load_dlib_frontal_face_detector# Load detectordetect = load_dlib_frontal_face_detector()# Detectbboxes = detect(image)print("{} detected faces.".format(len(bboxes)))# Viewif len(bboxes) > 0:    image.view_landmarks(group="dlib_0", line_colour="red",                         render_markers=False, line_width=4);

如上图所示可以较为准确的识别人脸的位置,大家如果想用在其他领域也可以使用这个menpodetect库,里面集成了opencv dlib 还有其他很多的人脸检测的资源,有兴趣的可以玩一下。

随后就可以使用filter进行最后的拟合了:initial_bbox是初始的位置

# initial bboxinitial_bbox = bboxes[0]# fit imageresult = fitter.fit_from_bb(image, initial_bbox, max_iters=[15, 5],                            gt_shape=image.landmarks["PTS"].lms)# print resultprint(result)

下面是最终的人脸识别效果:

他可以显示迭代过程,效果很不错,今天就分享到这,我要继续去看库文件了。

该库可用于医疗图像分割、人脸识别等等很多领域,鉴于大家看英文感觉麻烦,我就看一点给大家分享一点,学会了该库感觉还是很有用的,如果后面时间的多的话会写一下原理和具体实现

 

 

 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/119646.html

相关文章

  • Junit源码阅读()

    摘要:是对测试样例的建模,用来组合多个测试样例,是中的核心内容。也是一个虚类,子类应该实现方法来决定对于是否运行。如下列代码所示组合了和,为运行时异常和断言错误屏蔽了不一致的方面,可以向上提供错误信息和样例信息。 Junit的工程结构 showImg(/img/bVsEeS); 从上图可以清楚的看出Junit大致分为几个版块,接下来一一简略介绍这些版块的作用。 runner:定义了Jun...

    Gilbertat 评论0 收藏0
  • 虹软AI 人脸识别SDK接入 — 参数优化篇

    摘要:引言使用了免费的人脸识别算法,感觉还是很不错的,但是初次接触的话会对一些接口的参数有些疑问的。这里分享一下我对一些参数的验证结果这里以版本为例,基本一样,希望能更好的帮助各位接入虹软的人脸识别算法。 引言 使用了免费的人脸识别算法,感觉还是很不错的,但是初次接触的话会对一些接口的参数有些疑问的。这里分享一下我对一些参数的验证结果(这里以windows版本为例,linux、android...

    yibinnn 评论0 收藏0
  • 虹软AI 人脸识别SDK接入 — 参数优化篇

    摘要:引言使用了免费的人脸识别算法,感觉还是很不错的,但是初次接触的话会对一些接口的参数有些疑问的。这里分享一下我对一些参数的验证结果这里以版本为例,基本一样,希望能更好的帮助各位接入虹软的人脸识别算法。 引言 使用了免费的人脸识别算法,感觉还是很不错的,但是初次接触的话会对一些接口的参数有些疑问的。这里分享一下我对一些参数的验证结果(这里以windows版本为例,linux、android...

    Shisui 评论0 收藏0
  • 用Python实现不同数据源的对象匹配【思考】

    摘要:关于之前的利用实现不同数据源的数据匹配的实验的一些思考在开始匹配之前一定要对于两个数据源中的记录进行分析,结合实际的应用场景判断合适的匹配字段开始匹配之前可以进行一些简单的判断,看看所得到的数据的纯净度如何,比如是否存在重复数据重复数据重复 关于之前的利用python实现不同数据源的数据匹配的实验的一些思考: 在开始匹配之前一定要对于两个数据源中的记录进行分析,结合实际的应用场景判断...

    Juven 评论0 收藏0
  • node试基础

    摘要:前言到了开发的后期,测试工作往往是重中之重,但是测试本身又十分繁琐与复杂。对后端测试的时候难免会发起请求,为我们提供了这样的功能。测试效果截图如下 前言 到了开发的后期,测试工作往往是重中之重,但是测试本身又十分繁琐与复杂。对于使用js的朋友,对于我接下来要讲的内容绝对不会陌生,对,就是大名鼎鼎的摩卡!由于为我的好友开发的后端框架Zeta做测试工作,所以开始接触这一类测试工具和测试流...

    jonh_felix 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<