基于PYQT编写一个人脸识别软件(2)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hongbin_xu/article/details/79179194

前言

以前在博客:基于PYQT编写一个人脸识别软件 中给出了我自己用PYQT编写的一个小软件。鉴于使用的是开源库——face_recogniton,尽管使用很简单,但是还有些问题,比如:识别黄种人时效果不好,运行速度较慢等等。
有一点还需要说明,face_recogntion的底层是dlib机器学习库,换种想法我们也可以使用dlib的一些基础功能自己编写出一些类似face_recogntion库提供的功能。
我自己基于dlib库重新写了一个新的软件,性能上相对会比原来使用face_recognition好一些。

环境依赖

  • dlib机器学习库。安装教程:https://www.pyimagesearch.com/2017/03/27/how-to-install-dlib/?spm=5176.100239.blogcont336184.15.b7697a079ArIo。Linux下相对安装更容易一些,Windows下要自行配置好boost库,稍微会麻烦一点。
  • OpenCV(python)。图像处理必备,没什么说的。
  • PyQt4。GUI界面是基于PYQT编写的,界面设计上我没有花太多功夫,直接在QT Designer设计,然后用eric编译生成的。
  • 一些常用库:比如numpy、webbrowser、pickle等等,如果少了用pip装就可以了。
  • 软件是基于Python2编写的,尽管尽量注意了py2和py3的兼容问题,但在python3不保证一定能运行通过,可能要自行修改一些代码才能运行通过。

软件截图

下面是部分截图,总共做了9个功能。
这里写图片描述

最基本的人脸检测,可以选择默认模型或者CNN模型,CNN模型运行耗时较长(在笔记本上跑挺慢的)。
这里写图片描述

换脸。
这里写图片描述

训练目标检测器,默认会导入我做好的猫数据集,也可以自行制作数据集。要使用到dlib的imglab工具,生成描述数据集信息的xml文件。自己训练相对也会比较花时间。
这里写图片描述
训练完成,会打印一些相关信息,后面控制台也会打印一些信息。
这里写图片描述
默认会导入我训练好的模型,这个是猫脸识别的模型。
这里写图片描述

下载链接

http://download.csdn.net/download/hongbin_xu/10226813
里面提供了两个下载链接。一个是python源码,一个是我打包好的exe可执行文件。
python源码,需要自行配置Python环境,安装dlib、opencv、pyqt等库;
软件使用python2编写,python3不保证一定能运行,需要自己调试或是修改部分代码;
exe文件,可以直接在Windows下运行,不需要安装依赖库;

目录说明

/app/下存放的是有关图像处理,后台功能实现的代码。
这里写图片描述

/gui/下存放的是有关GUI界面的文件,Ui开头的是在eric下编译生成的py文件,用来绘制GUI界面,没有Ui开头的是对应GUI界面交互的文件,定义了一些对应的槽函数来响应用户操作。
这里写图片描述

/images/文件夹下存放了一些测试图片。
/images/test_face_clustering/存放了测试人脸聚类功能时使用的一些图片。
/images/face_clustering_output/保存了人脸聚类的输出结果。
/images/test_face_exchange/存放了换脸功能的测试图片。
/images/test_object_detector/存放了训练数据集,在使用训练目标检测器功能时,会自动导入。里面放的是一些猫脸的数据集,默认会导入我用imglab(dlib提供的工具软件)做好的xml文件。
/images/test_shape_predictor/存放了训练数据集,用于训练人脸特征点检测器,软件默认会导入做好的xml文件,引入数据集。
剩下的几张图片,是随便放的一些测试图片。
这里写图片描述

/model/文件夹中放了一些官方提供的模型文件,程序中会用到。
这里写图片描述

/template/文件夹中存放了人脸比对功能中使用的模板图片,以及我生成好的模板。
这里写图片描述

在main.py中创建了主界面(定义在mainWindow.py中),mainWindow.py导入了其他所有的代码。
这里写图片描述

后记

这个软件也是断断续续地写的,哪天有多余时间就来写几个功能,也是当做练手用的小项目。用代码统计了一下有4000多行Python代码,不过除去用软件生成的画GUI界面的那些代码,差不多加起来也有2000-3000行吧。感觉主要时间都是花在调试bug上,写一个功能也花不了多少时间,也许自己还是太菜了。
最近一直在等我的双目摄像头,总算到了,正好也把软件给写完了,可以开始做实验了。

展开阅读全文

没有更多推荐了,返回首页