基于PYQT编写一个人脸识别软件(2)
前言
以前在博客:基于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上,寫一個功能也花不了多少時間,也許自己還是太菜了。
最近一直在等我的雙目攝像頭,總算到了,正好也把軟件給寫完了,可以開始做實驗了。
總結
以上是生活随笔為你收集整理的基于PYQT编写一个人脸识别软件(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PYQT中QThread输出到textB
- 下一篇: class std::vectorcla