基于QT,C++和opencv 的人脸识别项目(一)

0.目录

    • 1.引言
    • 2.实验环境
    • 3.项目文章布局
    • 4.正文
        • linux的基本配置
        • ubuntu安装配置opencv
        • 测试一下
    • 5.总结

1.引言

近期按照师傅的要求做了一个基于opencv实现的人脸检测和人脸识别的项目,并且用QT做了一个界面。
由于长时间没有用C++,也是第一次接触opencv和qt,做起来有点慢,但也因此遇到的问题比较多,写下一篇文章作为项目的总结。
因为涉及的原理及代码较多,我把本次项目分为多篇文章来介绍,在之后我会添加到github上。
先把自己的实现结果放上来。
基于QT,C++和opencv 的人脸识别项目(一)_第1张图片
基于QT,C++和opencv 的人脸识别项目(一)_第2张图片
基于QT,C++和opencv 的人脸识别项目(一)_第3张图片

2.实验环境

本项目主要是基于ubuntu - linux系统,所以介绍的相关的环境配置会大部分基于linux,我也尽可能把windows上的操作也加以介绍。
本文的电脑配置为:
cpu: Intel® Xeon® CPU E3-1230 V2 @ 3.30GHz
显卡:GeForce GTX 1050 Ti
顺便一提一些查看linux下硬件配置的命令:

uname -a                     # 查看内核/操作系统/CPU信息
head -n 1 /etc/issue     # 查看操作系统版本
cat /proc/cpuinfo          # 查看CPU信息
hostname                     # 查看计算机名
lsusb -tv                       # 列出所有USB设备
env   # 查看环境变量
sudo lshw -numeric -class video  # 查看显卡配置

对于做图像处理的项目,有显卡的话可以加快不少运行的速度。

3.项目文章布局

这是本项目的第一篇文章,主要介绍的是的环境的配置。
第二篇文章,主要介绍opencv和相关模型,点击阅读。
第三篇文章,主要介绍人脸检测haar+adaboost的原理,点击阅读。
第四篇文章,主要介绍PCA降维和人脸识别的原理,点击阅读。
第五篇文章,主要给出相关的代码,点击阅读。

4.正文

linux的基本配置

1.如果是新安装的系统,建议:

apt-get update
apt-get upgrade

2.接下来安装qt,qt的安装很简单,之后的opencv配置就他痛苦多了

sudo apt-get install qt5-default qtcreator
sudo apt-get install qt5-doc
sudo apt-get install qt5-doc-html qtbase5-doc-html
sudo apt-get install qtbase5-examples

3.安装相关的包

sudo apt-get install build-essential    //安装g++编译器
sudo apt-get install libfontcongfig1    //注意是1不是l,安装字体库
sudo apt-get install mesa-common-dev libgl1-mesa-dev //安装openGL相关库

ubuntu安装配置opencv

这个配置我应该弄了一两天,配置环境一直都是噩梦一般,搞好配置能让我开心的多吃一碗饭。
下面给出opencv4.3.0和opencv_contrib4.3.0的百度网盘链接,有需要的可以下载,不建议去尝试官网下载,实在是太慢了,而且经常因为网络问题下载失败。
链接: https://pan.baidu.com/s/1Nz94HE40UI7F2V0EmB0V5Q
密码: dgjs
接下来有很多相关的文章介绍如何在linux下配置opencv,我就不在这里赘述了。介绍几个我遇到的坑。

  • 多个opencv版本的的问题
    首先我们查看opencv的版本

     pkg-config --modversion opencv
    

    然后,如果显示的是自己安装的路径,那么就很好。否则需要修改PKG_CONFIG_PATH的pkgconfig路径LD_LIBRARY_PATH的路径来选择对应的opencv版本,如:
    export PKG_CONFIG_PATH=/usr/local/opencv/4.3.0/lib/pkgconfig
    export LD_LIBRARY_PATH=/usr/local/opencv/4.3.0/lib
    具体还是要在CMakeList.txt中指定要找的opencv的目录

  • 在cmake的时候,会遇到很多东西下载不了,主要是file给的路径的网站是外网,下不动,可以将具体的报错百度谷歌一下,有朋友给出来了缺失资源的百度网盘或者是网站链接。

  • 记得安装opencv_contrib包,里面的face和dnn模块我们都会用得上。

  • 环境变量和库的配置

      vi /etc/bash.bashrc
        //在文档的末尾加入
      export PKG_CONFIG_PATH=$ PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
      export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
      //更新环境变量
      source /etc/profile
    

测试一下

打开QTcreator,创建一个C++程序。
基于QT,C++和opencv 的人脸识别项目(一)_第4张图片
接着一直next就可以了。在后面可能会遇到kits无法被选择或者是没有配置好的问题。
基于QT,C++和opencv 的人脸识别项目(一)_第5张图片
我们在tools(工具)-> options(选项)->Build & run -> Kits -> 按照自己电脑的配置选择编译器和调试器 -> apply
基于QT,C++和opencv 的人脸识别项目(一)_第6张图片
pro文件
在QT中,有一个工具qmake可以生成一个makefile文件,它是由.pro文件生成而来的。.pro是qmake的工程文件(project);.pri文件可以把 *.pro 文件内的一部分单独放到一个 *.pri 文件内(include),然后包含进来;.prf文件(feature),和.pri文件类似,也是被包含进.pro文件,只是更隐秘,如CONFIG+=QT;.prl文件(link),主要和生成与使用静态库密切相关。
我把自己的配置复制上来,具体的路径需要自己去确定。
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TEMPLATE = app   //建立一个应用程序的makefile 这是默认值,所以如果模板没有被指定,这个将被使用

//配置信息
CONFIG += console c++11
CONFIG += app_bundle
CONFIG += qt
CONFIG += QApplication

DEFINES += QT_DEPRECATED_WARNINGS

//头文件
HEADERS += \
    mainwindow.h \
    detect.h \
    functions.h \
    recognize2.h \
    facein.h \
    dialog.h

//源文件
SOURCES += main.cpp \
    mainwindow.cpp \
    functions.cpp \
    detect.cpp \
    recognize2.cpp \
    facein.cpp \
    dialog.cpp

//工程中包含的资源文件
#RESOURCES += \
#    img.qrc \
#    img.qrc \
#    resource.qrc

//窗口ui设计文件
FORMS += \
    mainwindow.ui \
    detect.ui \
    recognize2.ui \
    facein.ui \
    dialog.ui

//制定生成的应用程序名
TARGET = interface

//opencv的路径
INCLUDEPATH += /usr/local/include\
                /usr/local/include/opencv4\
                /usr/local/include/opencv4/opencv2/

//opencv的库路径
LIBS += /usr/local/lib/lib*

接下来加入一段测试函数,如果运行成功,表明配置成功。

#include 
#include 

int main()
{
	pic =  cv::imread("nidetupian.jpg");
	cv::imshow("wodetupian",pic);
}

5.总结

对于环境的配置往往比较麻烦,但是完事开头难,配置好环境表明我们的任务已经迈出了第一步。
这里踩了不少坑,我也没一一记录下来,以后想起来了再加进去。

你可能感兴趣的